In the (excellent! :) book "Good Omens", Crawley (the earthly incarnation of The Fallen Dark Angel), reflects:
>'I shall deal with the matter momentarily,’ he said. It was a good word. It always made people hesitate. They were never quite sure whether he meant he’d deal with it now, or just deal with it briefly. And no-one ever dared ask.
"""
"""
Compare to a scene from the book "The Truth", involving a powerful politician and the ruler of the great (?) city of Ankh Morpork (Lord Vetinari), and a powerful but somewhat dense clergyman (Hughnon):
>Lord Vetinari: “My motives, as ever, are entirely transparent.”
>Hughnon reflected that “entirely transparent” meant either that you could see right through them or that you couldn’t see them at all.
This is a lovely book by a friend of mine named Lee Siegel, who's a professor of religion, actually, at the University of Hawaii, and he's an expert magician, and an expert on the street magic of India, which is what this book is about, "Net of Magic." And there's a passage in it which I would love to share with you. It speaks so eloquently to the problem. "'I'm writing a book on magic,' I explain, and I'm asked, 'Real magic?' By 'real magic,' people mean miracles, thaumaturgical acts, and supernatural powers. 'No,' I answer. 'Conjuring tricks, not real magic.' 'Real magic,' in other words, refers to the magic that is not real; while the magic that is real, that can actually be done, is not real magic."
:-- from [[a TED Talk by Daniel Dennett|https://www.ted.com/talks/dan_dennett_on_our_consciousness/transcript]]
Briefly stated, the [[Gell-Mann|Murray Gell-Mann]] Amnesia effect is as follows. You open the newspaper to an article on some subject you know well. In Murray's case, physics. In mine, show business.
You read the article and see the journalist has absolutely no understanding of either the facts or the issues. Often, the article is so wrong it actually presents the story backward—reversing cause and effect. I call these the "wet streets cause rain" stories. Paper's full of them.
In any case, you read with exasperation or amusement the multiple errors in a story, and then turn the page to national or international affairs, and read as if the rest of the newspaper was somehow more accurate about Palestine than the baloney you just read. You turn the page, and forget what you know.
(compare to what [[Kathryn Schulz]] had to say about [[our belief in chronological exceptionalism|Almost all of us often engage in a kind of tacit chronological exceptionalism. Unlike all those suckers who fell for the flat earth or the geocentric universe or cold fusion or the cosmological constant, we ourselves have the great good luck to be alive during the very apex of accurate human thought.]])
<<comparequote "Erwin Knoll" "Everything you read in the newspapers is absolutely true except for that rare story of which you happen to have firsthand knowledge." "news and misinformation">>
<<comparequote "Mark Twain" "If you don’t read the newspaper, you’re uninformed. If you read the newspaper, you're misinformed." "knowledge and misinformation">>
Don’t let anybody make you do something you do not want to do. Don’t allow someone to utter yes for you while you’re still undecided (say “I’ll think about it”). And do not allow anyone to ever tell you that “No” is not enough. It is.
‘No,’ is a complete sentence.
Saying no is a right we all have. Use it.
Or as [[Stephen Fry]] put it:
> The short answer to that is 'no.' The long answer is 'f**k no.”
For liberal ironists, there is no answer to the question "why not be cruel?" - no noncircular theoretical backup for the belief that cruelty is horrible. Nor is there an answer to the question "How do you decide when to struggle against injustice and when to devote yourself to private projects of self-creation?"
This question strikes liberal ironists as just as hopeless as the questions "Is it right to deliver n innocents over to be tortured to save the lives of m x n other innocents? If so, what are the correct values of m and n?" or the question "When may one favor members of one's family, or one's community, over other, randomly chosen, human beings?"
Anybody who thinks that there are well-grounded theoretical answers to this sort of question - algorithms for resolving moral dilemmas of this sort - is still, in his heart, a theologian or a metaphysician. He believes in an order beyond time and change which both determines the point of human existence and establishes a hierarchy of responsibilities.
: -- from [[his|Richard Rorty]] book //Contingency, Irony, and Solidarity// (1989)
Part of a Q&A session described in [[Donald Knuth]]'s book [[Things a Computer Scientist Rarely Talks About|https://en.wikipedia.org/wiki/Things_a_Computer_Scientist_Rarely_Talks_About]]:
Question (by Guy Steele): I've got a comment. Twenty two years ago, I took a course here at MIT and the title of the course was “Digital Physics", taught by Ed Fredkin.
I distinctly remember a discussion in class about the possibility of modeling the universe as a cellular automaton. Fredkin spoke rapturously, I think of electrons possibly being represented by billions of cells in some 3-D framework.
One of the students in a very distressed voice said: “Wouldn't that take an awfully long time. Wouldn’t it be awfully slow?" Fredkin said, “How fast do you want it to be?” And another student piped up and said, “One second per second."^^1^^
----
^^1^^ or, similarly expressed by [[Jasper Fforde]] in his book //Lost in a Good Book//:
Lesson one in time travel, Thursday^^2^^. First of all, we are all time travellers. The vast majority of us manage only one day per day.
^^2^^ Thursday Next is the protagonist in a series of comic fantasy, alternate history mystery novels by [[Jasper Fforde]].
[[Douglas Adams]] has a parable called "the sentient puddle" in which he shows the flaw of reasoning that this world/universe was "designed for human beings", AKA "the [[fine-tuned universe|https://en.wikipedia.org/wiki/Fine-tuned_universe]] argument for God":
>A puddle wakes up one morning, looks around and thinks:
>This is an interesting world I find myself in – an interesting hole I find myself in – fits me rather neatly, doesn't it? In fact it fits me staggeringly well, must have been made to have me in it!
>
>After the sun rises, and the puddle grows smaller and smaller, the moment he disappears catches him rather by surprise.
Let us first ask ourselves what should be understood by “a tragic optimism.” In brief it means that one is, and remains, optimistic in spite of the “tragic triad,” … a triad which consists of …
# pain;
# guilt; and
# death.
This … raises the question, How is it possible to say yes to life in spite of all that? How … can life retain its potential meaning in spite of its tragic aspects? After all, “saying yes to life in spite of everything,” …presupposes that life is potentially meaningful under any conditions, even those which are most miserable. And this in turn presupposes the human capacity to creatively turn life’s negative aspects into something positive or constructive. In other words, what matters is to make the best of any given situation. …
hence the reason I speak of a tragic optimism … an optimism in the face of tragedy and in view of the human potential which at its best always allows for:
# turning suffering into a human achievement and accomplishment;
# deriving from guilt the opportunity to change oneself for the better; and
# deriving from life’s transitoriness an incentive to take responsible action.
: -- from his lecture [["Tragic Optimism"|https://reasonandmeaning.com/2017/03/03/summary-of-victor-frankls-tragic-optimism/]].
[As you grow older] you realize that life is an ever-narrowing conveyor belt. Slowly, inexorably, it takes us all along with it, and one by one we tumble off the sides of the conveyor belt into darkness.
Neil Gaiman from his book "The View from the Cheap Seats" - the article titled "Eight Views of Mount Fuji"
We’ve always shied away from trying to define what is a perfect proof. And I think that’s not only shyness, but actually, there is no definition and no uniform criterion. Of course, there are all these components of a beautiful proof. It can’t be too long; it has to be clear; there has to be a special idea; it might connect things that usually one wouldn’t think of as having any connection.
For some theorems, there are different perfect proofs for different types of readers. I mean, what is a proof? A proof, in the end, is something that convinces the reader of things being true. And whether the proof is understandable and beautiful depends not only on the proof but also on the reader: What do you know? What do you like? What do you find obvious?
: -- from [[an interview with the mathematician Günter Ziegler,|https://www.quantamagazine.org/gunter-ziegler-and-martin-aigner-seek-gods-perfect-math-proofs-20180319/]] who co-authored (with Martin Aigner) the book //Proofs From THE BOOK// (and here's at least [[an earthly shadow of it|http://www.springer.com/us/book/9783662442043]] :).
(see also [[This one is from The (Divine) Book. You don’t have to believe in God, but you should believe in The Book.]]).
[beauty]
[On the road to wisdom] The first lesson, and the last, is 'Do what is needful. And no more!'
The lessons in between consist in learning what is needful.
One must consider the Balance. But when the Balance itself is broken—then one considers other things. Above all, haste.
: -- Archmage Sparrowhawk. From [[Ursula K. Le Guin]]'s book //The Farthest Shore// (part 3 of the Earthsea Series)
(see what [[Piet Hein]] had to say [[about the road to wisdom|The road to wisdom? Well, it's plain and easy to express. Err, and err, and err again, but less, and less, and less.]]).
[Putting things in writing is a way] to set the record straight -- or at least firmly crooked.
in the Hitchhiker's Guide to the Galaxy.
Ludwig Feuerbach's book //The Essence of Religion// begins with the striking claims that
1) the feeling of dependence is the “ground” of religion, and
2) that the original object of this feeling, i.e., in the history of religion, is nature. Feuerbach defines the feeling of dependence as
>the feeling or consciousness of man that he does not and cannot exist apart from a being that is distinct from himself, that he does not have himself to thank for his own existence.
This feeling can manifest itself negatively as fear, which Feuerbach refers to at one point as “a feeling of dependency on an object without which I am nothing, which has the power to destroy me”, but it can also manifest itself in the form of celebratory joy and exaltation.
-- from the [[Stanford Encyclopedia entry on Feuerbach|https://plato.stanford.edu/entries/ludwig-feuerbach]]
See also [[Marylynne Robinson interpreting Feuerbach|Religion is a human projection of humanity's conceptions of beauty, goodness, power, and other valued things, a humanizing of experience by understanding it as structured around and mirroring back these values.]]
Built from branch 'tiddlywiki-com' at commit 37fd52e6c99b71e2063865abe43865c5ca00ce2c of https://github.com/Jermolene/TiddlyWiki5 at 2021-03-10 22:35:27 UTC
$:/core/ui/SideBar/Recent
{
"tiddlers": {
"$:/Acknowledgements": {
"title": "$:/Acknowledgements",
"text": "TiddlyWiki incorporates code from these fine OpenSource projects:\n\n* [[The Stanford Javascript Crypto Library|http://bitwiseshiftleft.github.io/sjcl/]]\n* [[The Jasmine JavaScript Test Framework|http://pivotal.github.io/jasmine/]]\n* [[Normalize.css by Nicolas Gallagher|http://necolas.github.io/normalize.css/]]\n\nAnd media from these projects:\n\n* World flag icons from [[Wikipedia|http://commons.wikimedia.org/wiki/Category:SVG_flags_by_country]]\n"
},
"$:/core/copyright.txt": {
"title": "$:/core/copyright.txt",
"type": "text/plain",
"text": "TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n\nCopyright (c) 2004-2007, Jeremy Ruston\nCopyright (c) 2007-2020, UnaMesa Association\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n* Neither the name of the copyright holder nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
},
"$:/core/icon": {
"title": "$:/core/icon",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path d=\"M64 0l54.56 32v64L64 128 9.44 96V32L64 0zm21.127 95.408c-3.578-.103-5.15-.094-6.974-3.152l-1.42.042c-1.653-.075-.964-.04-2.067-.097-1.844-.07-1.548-1.86-1.873-2.8-.52-3.202.687-6.43.65-9.632-.014-1.14-1.593-5.17-2.157-6.61-1.768.34-3.546.406-5.34.497-4.134-.01-8.24-.527-12.317-1.183-.8 3.35-3.16 8.036-1.21 11.44 2.37 3.52 4.03 4.495 6.61 4.707 2.572.212 3.16 3.18 2.53 4.242-.55.73-1.52.864-2.346 1.04l-1.65.08c-1.296-.046-2.455-.404-3.61-.955-1.93-1.097-3.925-3.383-5.406-5.024.345.658.55 1.938.24 2.53-.878 1.27-4.665 1.26-6.4.47-1.97-.89-6.73-7.162-7.468-11.86 1.96-3.78 4.812-7.07 6.255-11.186-3.146-2.05-4.83-5.384-4.61-9.16l.08-.44c-3.097.59-1.49.37-4.82.628-10.608-.032-19.935-7.37-14.68-18.774.34-.673.664-1.287 1.243-.994.466.237.4 1.18.166 2.227-3.005 13.627 11.67 13.732 20.69 11.21.89-.25 2.67-1.936 3.905-2.495 2.016-.91 4.205-1.282 6.376-1.55 5.4-.63 11.893 2.276 15.19 2.37 3.3.096 7.99-.805 10.87-.615 2.09.098 4.143.483 6.16 1.03 1.306-6.49 1.4-11.27 4.492-12.38 1.814.293 3.213 2.818 4.25 4.167 2.112-.086 4.12.46 6.115 1.066 3.61-.522 6.642-2.593 9.833-4.203-3.234 2.69-3.673 7.075-3.303 11.127.138 2.103-.444 4.386-1.164 6.54-1.348 3.507-3.95 7.204-6.97 7.014-1.14-.036-1.805-.695-2.653-1.4-.164 1.427-.81 2.7-1.434 3.96-1.44 2.797-5.203 4.03-8.687 7.016-3.484 2.985 1.114 13.65 2.23 15.594 1.114 1.94 4.226 2.652 3.02 4.406-.37.58-.936.785-1.54 1.01l-.82.11zm-40.097-8.85l.553.14c.694-.27 2.09.15 2.83.353-1.363-1.31-3.417-3.24-4.897-4.46-.485-1.47-.278-2.96-.174-4.46l.02-.123c-.582 1.205-1.322 2.376-1.72 3.645-.465 1.71 2.07 3.557 3.052 4.615l.336.3z\" fill-rule=\"evenodd\"/></svg>"
},
"$:/core/images/add-comment": {
"title": "$:/core/images/add-comment",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-add-comment tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M56 56H36a8 8 0 100 16h20v20a8 8 0 1016 0V72h20a8 8 0 100-16H72V36a8 8 0 10-16 0v20zm-12.595 58.362c-6.683 7.659-20.297 12.903-36.006 12.903-2.196 0-4.35-.102-6.451-.3 9.652-3.836 17.356-12.24 21.01-22.874C8.516 94.28 0 79.734 0 63.5 0 33.953 28.206 10 63 10s63 23.953 63 53.5S97.794 117 63 117c-6.841 0-13.428-.926-19.595-2.638z\"/></svg>"
},
"$:/core/images/advanced-search-button": {
"title": "$:/core/images/advanced-search-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-advanced-search-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M74.565 87.985A47.776 47.776 0 0148 96C21.49 96 0 74.51 0 48S21.49 0 48 0s48 21.49 48 48c0 9.854-2.97 19.015-8.062 26.636l34.347 34.347a9.443 9.443 0 010 13.36 9.446 9.446 0 01-13.36 0l-34.36-34.358zM48 80c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32z\"/><circle cx=\"48\" cy=\"48\" r=\"8\"/><circle cx=\"28\" cy=\"48\" r=\"8\"/><circle cx=\"68\" cy=\"48\" r=\"8\"/></g></svg>"
},
"$:/core/images/auto-height": {
"title": "$:/core/images/auto-height",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-auto-height tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M67.987 114.356l-.029-14.477a4 4 0 00-2.067-3.494l-15.966-8.813-1.933 7.502H79.9c4.222 0 5.564-5.693 1.786-7.58L49.797 71.572 48.01 79.15h31.982c4.217 0 5.564-5.682 1.795-7.575L49.805 55.517l-1.795 7.575h31.982c4.212 0 5.563-5.67 1.805-7.57l-16.034-8.105 2.195 3.57V35.614l9.214 9.213a4 4 0 105.656-5.656l-16-16a4 4 0 00-5.656 0l-16 16a4 4 0 105.656 5.656l9.13-9.13v15.288a4 4 0 002.195 3.57l16.035 8.106 1.804-7.57H48.01c-4.217 0-5.564 5.682-1.795 7.574l31.982 16.059 1.795-7.575H48.01c-4.222 0-5.564 5.693-1.787 7.579l31.89 15.923 1.787-7.578H47.992c-4.133 0-5.552 5.504-1.933 7.501l15.966 8.813-2.067-3.494.029 14.436-9.159-9.158a4 4 0 00-5.656 5.656l16 16a4 4 0 005.656 0l16-16a4 4 0 10-5.656-5.656l-9.185 9.184zM16 20h96a4 4 0 100-8H16a4 4 0 100 8z\"/></svg>"
},
"$:/core/images/blank": {
"title": "$:/core/images/blank",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-blank tc-image-button\" viewBox=\"0 0 128 128\"/>"
},
"$:/core/images/bold": {
"title": "$:/core/images/bold",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-bold tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M41.146 51.81V21.87h26.353c2.51 0 4.93.21 7.26.628 2.33.418 4.392 1.165 6.185 2.24 1.793 1.076 3.227 2.57 4.302 4.482 1.076 1.913 1.614 4.363 1.614 7.35 0 5.379-1.613 9.263-4.84 11.653-3.227 2.39-7.35 3.586-12.37 3.586H41.146zM13 0v128h62.028a65.45 65.45 0 0016.762-2.151c5.438-1.434 10.278-3.645 14.52-6.633 4.244-2.988 7.62-6.842 10.13-11.563 2.51-4.721 3.764-10.308 3.764-16.762 0-8.008-1.942-14.85-5.826-20.527-3.884-5.677-9.77-9.65-17.658-11.921 5.737-2.75 10.069-6.275 12.997-10.577 2.928-4.303 4.392-9.681 4.392-16.135 0-5.976-.986-10.995-2.958-15.059-1.972-4.063-4.75-7.32-8.336-9.77-3.585-2.45-7.888-4.213-12.907-5.289C84.888.538 79.33 0 73.235 0H13zm28.146 106.129V70.992H71.8c6.095 0 10.995 1.404 14.7 4.212 3.705 2.81 5.558 7.5 5.558 14.073 0 3.347-.568 6.096-1.703 8.247-1.136 2.151-2.66 3.854-4.572 5.11-1.912 1.254-4.123 2.15-6.633 2.688-2.51.538-5.139.807-7.888.807H41.146z\"/></svg>"
},
"$:/core/images/cancel-button": {
"title": "$:/core/images/cancel-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-cancel-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 76.314l-16.97 16.97a7.999 7.999 0 01-11.314 0c-3.118-3.118-3.124-8.19 0-11.313L52.686 65l-16.97-16.97a7.999 7.999 0 010-11.314c3.118-3.118 8.19-3.124 11.313 0L64 53.686l16.97-16.97a7.999 7.999 0 0111.314 0c3.118 3.118 3.124 8.19 0 11.313L75.314 65l16.97 16.97a7.999 7.999 0 010 11.314c-3.118 3.118-8.19 3.124-11.313 0L64 76.314zM64 129c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 1 0 29.654 0 65c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 17 64 17 16 38.49 16 65s21.49 48 48 48z\"/></svg>"
},
"$:/core/images/chevron-down": {
"title": "$:/core/images/chevron-down",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-down tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M64.053 85.456a7.889 7.889 0 01-5.6-2.316L2.473 27.16a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0L64.05 66.344l50.382-50.382a7.92 7.92 0 0111.195 0c3.085 3.086 3.092 8.105 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.317z\"/><path d=\"M64.053 124.069a7.889 7.889 0 01-5.6-2.316l-55.98-55.98a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0l50.382 50.382 50.382-50.382a7.92 7.92 0 0111.195 0c3.085 3.086 3.092 8.104 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.316z\"/></g></svg>"
},
"$:/core/images/chevron-left": {
"title": "$:/core/images/chevron-left",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-left tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M47.544 64.053c0-2.027.77-4.054 2.316-5.6l55.98-55.98a7.92 7.92 0 0111.196 0c3.085 3.086 3.092 8.105 0 11.196L66.656 64.05l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.085-8.105 3.092-11.196 0l-55.98-55.98a7.892 7.892 0 01-2.317-5.595z\"/><path d=\"M8.931 64.053c0-2.027.77-4.054 2.316-5.6l55.98-55.98a7.92 7.92 0 0111.196 0c3.085 3.086 3.092 8.105 0 11.196L28.041 64.05l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.085-8.104 3.092-11.196 0l-55.98-55.98a7.892 7.892 0 01-2.316-5.595z\"/></g></svg>"
},
"$:/core/images/chevron-right": {
"title": "$:/core/images/chevron-right",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-right tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M83.456 63.947c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196L64.344 63.95 13.963 13.567a7.92 7.92 0 010-11.195c3.086-3.085 8.105-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.317 5.595z\"/><path d=\"M122.069 63.947c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l50.382-50.382-50.382-50.382a7.92 7.92 0 010-11.195c3.086-3.085 8.104-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.316 5.595z\"/></g></svg>"
},
"$:/core/images/chevron-up": {
"title": "$:/core/images/chevron-up",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-up tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M63.947 44.544c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.105 3.092-11.196 0L63.95 63.656l-50.382 50.382a7.92 7.92 0 01-11.195 0c-3.085-3.086-3.092-8.105 0-11.196l55.98-55.98a7.892 7.892 0 015.595-2.317z\"/><path d=\"M63.947 5.931c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.105 3.092-11.196 0L63.95 25.041 13.567 75.423a7.92 7.92 0 01-11.195 0c-3.085-3.086-3.092-8.104 0-11.196l55.98-55.98a7.892 7.892 0 015.595-2.316z\"/></g></svg>"
},
"$:/core/images/clone-button": {
"title": "$:/core/images/clone-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-clone-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M32.265 96v24.002A7.996 7.996 0 0040.263 128h79.74a7.996 7.996 0 007.997-7.998v-79.74a7.996 7.996 0 00-7.998-7.997H96V48h12.859a2.99 2.99 0 012.994 2.994v57.865a2.99 2.99 0 01-2.994 2.994H50.994A2.99 2.99 0 0148 108.859V96H32.265z\"/><path d=\"M40 56h-7.993C27.588 56 24 52.418 24 48c0-4.41 3.585-8 8.007-8H40v-7.993C40 27.588 43.582 24 48 24c4.41 0 8 3.585 8 8.007V40h7.993C68.412 40 72 43.582 72 48c0 4.41-3.585 8-8.007 8H56v7.993C56 68.412 52.418 72 48 72c-4.41 0-8-3.585-8-8.007V56zM8 0C3.58 0 0 3.588 0 8v80c0 4.419 3.588 8 8 8h80c4.419 0 8-3.588 8-8V8c0-4.419-3.588-8-8-8H8zM19 16A2.997 2.997 0 0016 19.001v57.998A2.997 2.997 0 0019.001 80h57.998A2.997 2.997 0 0080 76.999V19.001A2.997 2.997 0 0076.999 16H19.001z\"/></g></svg>"
},
"$:/core/images/close-all-button": {
"title": "$:/core/images/close-all-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-close-all-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M28 111.314l-14.144 14.143a8 8 0 01-11.313-11.313L16.686 100 2.543 85.856a8 8 0 0111.313-11.313L28 88.686l14.144-14.143a8 8 0 0111.313 11.313L39.314 100l14.143 14.144a8 8 0 01-11.313 11.313L28 111.314zM28 39.314L13.856 53.457A8 8 0 012.543 42.144L16.686 28 2.543 13.856A8 8 0 0113.856 2.543L28 16.686 42.144 2.543a8 8 0 0111.313 11.313L39.314 28l14.143 14.144a8 8 0 01-11.313 11.313L28 39.314zM100 39.314L85.856 53.457a8 8 0 01-11.313-11.313L88.686 28 74.543 13.856A8 8 0 0185.856 2.543L100 16.686l14.144-14.143a8 8 0 0111.313 11.313L111.314 28l14.143 14.144a8 8 0 01-11.313 11.313L100 39.314zM100 111.314l-14.144 14.143a8 8 0 01-11.313-11.313L88.686 100 74.543 85.856a8 8 0 0111.313-11.313L100 88.686l14.144-14.143a8 8 0 0111.313 11.313L111.314 100l14.143 14.144a8 8 0 01-11.313 11.313L100 111.314z\"/></g></svg>"
},
"$:/core/images/close-button": {
"title": "$:/core/images/close-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-close-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M65.086 75.41l-50.113 50.113c-3.121 3.121-8.192 3.126-11.316.002-3.118-3.118-3.123-8.19.002-11.316l50.114-50.114L3.659 13.982C.538 10.86.533 5.79 3.657 2.666c3.118-3.118 8.19-3.123 11.316.002l50.113 50.114L115.2 2.668c3.121-3.121 8.192-3.126 11.316-.002 3.118 3.118 3.123 8.19-.002 11.316L76.4 64.095l50.114 50.114c3.121 3.121 3.126 8.192.002 11.316-3.118 3.118-8.19 3.123-11.316-.002L65.086 75.409z\"/></svg>"
},
"$:/core/images/close-others-button": {
"title": "$:/core/images/close-others-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-close-others-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48zm0-16c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32zm0-16c8.837 0 16-7.163 16-16s-7.163-16-16-16-16 7.163-16 16 7.163 16 16 16z\"/></svg>"
},
"$:/core/images/copy-clipboard": {
"title": "$:/core/images/copy-clipboard",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-copy-clipboard tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"33\" height=\"8\" x=\"40\" y=\"40\" rx=\"4\"/><rect width=\"17\" height=\"8\" x=\"40\" y=\"82\" rx=\"4\"/><rect width=\"17\" height=\"8\" x=\"40\" y=\"54\" rx=\"4\"/><rect width=\"33\" height=\"8\" x=\"40\" y=\"96\" rx=\"4\"/><rect width=\"12\" height=\"8\" x=\"40\" y=\"68\" rx=\"4\"/><path d=\"M40 16H24c-4.419 0-8 3.59-8 8a8.031 8.031 0 000 .01v95.98a8.03 8.03 0 000 .01c0 4.41 3.581 8 8 8h80a7.975 7.975 0 005.652-2.34 7.958 7.958 0 002.348-5.652v-16.016c0-4.414-3.582-7.992-8-7.992-4.41 0-8 3.578-8 7.992V112H32V32h64v8.008C96 44.422 99.582 48 104 48c4.41 0 8-3.578 8-7.992V23.992a7.963 7.963 0 00-2.343-5.651A7.995 7.995 0 00104.001 16H88c0-4.41-3.585-8-8.007-8H48.007C43.588 8 40 11.582 40 16zm4-1.004A4.001 4.001 0 0148 11h32c2.21 0 4 1.797 4 3.996v4.008A4.001 4.001 0 0180 23H48c-2.21 0-4-1.797-4-3.996v-4.008z\"/><rect width=\"66\" height=\"16\" x=\"62\" y=\"64\" rx=\"8\"/><path d=\"M84.657 82.343l-16-16v11.314l16-16a8 8 0 10-11.314-11.314l-16 16a8 8 0 000 11.314l16 16a8 8 0 1011.314-11.314z\"/></g></svg>"
},
"$:/core/images/delete-button": {
"title": "$:/core/images/delete-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-delete-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\" transform=\"translate(12)\"><rect width=\"105\" height=\"16\" y=\"11\" rx=\"8\"/><rect width=\"48\" height=\"16\" x=\"28\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"8\" y=\"16\" rx=\"8\"/><rect width=\"88\" height=\"16\" x=\"8\" y=\"112\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"80\" y=\"16\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"56\" y=\"16\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"32\" y=\"16\" rx=\"8\"/></g></svg>"
},
"$:/core/images/done-button": {
"title": "$:/core/images/done-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-done-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M42.26 111.032c-2.051.001-4.103-.78-5.668-2.345L2.662 74.758a8 8 0 01-.005-11.32c3.118-3.117 8.192-3.12 11.32.007l28.278 28.278 72.124-72.124a8.002 8.002 0 0111.314-.001c3.118 3.118 3.124 8.19 0 11.315l-77.78 77.78a7.978 7.978 0 01-5.658 2.343z\"/></svg>"
},
"$:/core/images/down-arrow": {
"title": "$:/core/images/down-arrow",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-down-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M64.177 100.069a7.889 7.889 0 01-5.6-2.316l-55.98-55.98a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0l50.382 50.382 50.382-50.382a7.92 7.92 0 0111.195 0c3.086 3.086 3.092 8.104 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.316z\"/></svg>"
},
"$:/core/images/download-button": {
"title": "$:/core/images/download-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-download-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48z\" class=\"tc-image-download-button-ring\"/><path d=\"M34.35 66.43l26.892 27.205a4.57 4.57 0 006.516 0L94.65 66.43a4.7 4.7 0 000-6.593 4.581 4.581 0 00-3.258-1.365h-8.46c-2.545 0-4.608-2.087-4.608-4.661v-15.15c0-2.575-2.063-4.662-4.608-4.662H55.284c-2.545 0-4.608 2.087-4.608 4.662v15.15c0 2.574-2.063 4.661-4.608 4.661h-8.46c-2.545 0-4.608 2.087-4.608 4.662a4.69 4.69 0 001.35 3.296z\"/></g></svg>"
},
"$:/core/images/edit-button": {
"title": "$:/core/images/edit-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-edit-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M95.627 10.059l-5.656 5.657 11.313 11.313 5.657-5.656-11.314-11.314zm5.657-5.657l1.966-1.966c3.123-3.122 8.194-3.129 11.319-.005 3.117 3.118 3.122 8.192-.005 11.32l-1.966 1.965-11.314-11.314zm-16.97 16.97l-60.25 60.25a8.12 8.12 0 00-.322.342c-.1.087-.198.179-.295.275-5.735 5.735-10.702 22.016-10.702 22.016s16.405-5.09 22.016-10.702c.095-.096.186-.193.272-.292a8.12 8.12 0 00.345-.325l60.25-60.25-11.314-11.313zM35.171 124.19c6.788-.577 13.898-2.272 23.689-5.348 1.825-.573 3.57-1.136 6.336-2.04 16-5.226 21.877-6.807 28.745-7.146 8.358-.413 13.854 2.13 17.58 8.699a4 4 0 006.959-3.946c-5.334-9.406-13.745-13.296-24.933-12.744-7.875.39-14.057 2.052-30.835 7.533-2.739.894-4.46 1.45-6.25 2.012-19.46 6.112-30.77 7.072-39.597 1.747a4 4 0 10-4.132 6.85c6.333 3.82 13.754 5.12 22.438 4.383z\"/></g></svg>"
},
"$:/core/images/erase": {
"title": "$:/core/images/erase",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-erase tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M60.087 127.996l63.015-63.015c6.535-6.535 6.528-17.115-.003-23.646L99.466 17.702c-6.539-6.538-17.117-6.532-23.646-.003L4.898 88.62c-6.535 6.534-6.528 17.115.003 23.646l15.73 15.73h39.456zm-34.95-7.313l-14.324-14.325c-3.267-3.268-3.268-8.564-.008-11.824L46.269 59.07l35.462 35.462-26.15 26.15H25.137z\"/></svg>"
},
"$:/core/images/excise": {
"title": "$:/core/images/excise",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-excise tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M56 107.314l-2.343 2.343a8 8 0 11-11.314-11.314l16-16a8 8 0 0111.314 0l16 16a8 8 0 11-11.314 11.314L72 107.314v14.284c0 3.536-3.582 6.402-8 6.402s-8-2.866-8-6.402v-14.284zM0 40.007C0 35.585 3.59 32 8 32c4.418 0 8 3.588 8 8.007v31.986C16 76.415 12.41 80 8 80c-4.418 0-8-3.588-8-8.007V40.007zm32 0C32 35.585 35.59 32 40 32c4.418 0 8 3.588 8 8.007v31.986C48 76.415 44.41 80 40 80c-4.418 0-8-3.588-8-8.007V40.007zm48 0C80 35.585 83.59 32 88 32c4.418 0 8 3.588 8 8.007v31.986C96 76.415 92.41 80 88 80c-4.418 0-8-3.588-8-8.007V40.007zm-24-32C56 3.585 59.59 0 64 0c4.418 0 8 3.588 8 8.007v31.986C72 44.415 68.41 48 64 48c-4.418 0-8-3.588-8-8.007V8.007zm56 32c0-4.422 3.59-8.007 8-8.007 4.418 0 8 3.588 8 8.007v31.986c0 4.422-3.59 8.007-8 8.007-4.418 0-8-3.588-8-8.007V40.007z\"/></svg>"
},
"$:/core/images/export-button": {
"title": "$:/core/images/export-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-export-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.003 128H119.993a7.984 7.984 0 005.664-2.349v.007A7.975 7.975 0 00128 120V56c0-4.418-3.59-8-8-8-4.418 0-8 3.58-8 8v56H16V56c0-4.418-3.59-8-8-8-4.418 0-8 3.58-8 8v64c0 4.418 3.59 8 8 8h.003zm48.62-100.689l-8.965 8.966c-3.125 3.125-8.195 3.13-11.319.005-3.118-3.118-3.122-8.192.005-11.319L58.962 2.346A7.986 7.986 0 0164.625 0l-.006.002c2.05-.001 4.102.78 5.666 2.344l22.618 22.617c3.124 3.125 3.129 8.195.005 11.319-3.118 3.118-8.192 3.122-11.319-.005l-8.965-8.966v61.256c0 4.411-3.582 8-8 8-4.41 0-8-3.582-8-8V27.311z\"/></svg>"
},
"$:/core/images/file": {
"title": "$:/core/images/file",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-file tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M111.968 30.5H112V120a8 8 0 01-8 8H24a8 8 0 01-8-8V8a8 8 0 018-8h57v.02a7.978 7.978 0 015.998 2.337l22.627 22.627a7.975 7.975 0 012.343 5.516zM81 8H24v112h80V30.5H89c-4.418 0-8-3.578-8-8V8z\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"36\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"52\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"68\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"84\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"100\" rx=\"4\"/><rect width=\"40\" height=\"8\" x=\"32\" y=\"20\" rx=\"4\"/></svg>"
},
"$:/core/images/fixed-height": {
"title": "$:/core/images/fixed-height",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fixed-height tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M60 35.657l-9.172 9.171a4 4 0 11-5.656-5.656l16-16a4 4 0 015.656 0l16 16a4 4 0 01-5.656 5.656L68 35.657v57.686l9.172-9.171a4 4 0 115.656 5.656l-16 16a4 4 0 01-5.656 0l-16-16a4 4 0 115.656-5.656L60 93.343V35.657zM16 116h96a4 4 0 100-8H16a4 4 0 100 8zm0-96h96a4 4 0 100-8H16a4 4 0 100 8z\"/></svg>"
},
"$:/core/images/fold-all-button": {
"title": "$:/core/images/fold-all-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fold-all tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"64\" rx=\"8\"/><path d=\"M64.03 20.004c-2.05 0-4.102.78-5.667 2.344L35.746 44.966c-3.125 3.124-3.13 8.194-.005 11.318 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.965 16.966 16.965c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.191-.005-11.318L69.687 22.348a7.986 7.986 0 00-5.663-2.346zM64.03 85.002c-2.05-.001-4.102.78-5.667 2.344l-22.617 22.617c-3.125 3.125-3.13 8.195-.005 11.319 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.966 16.966 16.966c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.192-.005-11.319L69.687 87.346A7.986 7.986 0 0064.024 85z\"/></g></svg>"
},
"$:/core/images/fold-button": {
"title": "$:/core/images/fold-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fold tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><path d=\"M64.03 25.004c-2.05 0-4.102.78-5.667 2.344L35.746 49.966c-3.125 3.124-3.13 8.194-.005 11.318 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.965 16.966 16.965c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.191-.005-11.318L69.687 27.348a7.986 7.986 0 00-5.663-2.346zM64.005 67.379c-2.05 0-4.102.78-5.666 2.344L35.722 92.34c-3.125 3.125-3.13 8.195-.006 11.32 3.118 3.117 8.192 3.121 11.32-.006L64 86.69l16.965 16.965c3.125 3.125 8.195 3.13 11.319.005 3.118-3.118 3.122-8.192-.005-11.319L69.663 69.723A7.986 7.986 0 0064 67.377z\"/></g></svg>"
},
"$:/core/images/fold-others-button": {
"title": "$:/core/images/fold-others-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fold-others tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" y=\"56.031\" rx=\"8\"/><path d=\"M86.632 79.976c-2.05 0-4.102.78-5.666 2.345L64 99.286 47.034 82.321a7.986 7.986 0 00-5.662-2.346l.005.001c-2.05 0-4.102.78-5.666 2.345l-22.618 22.617c-3.124 3.125-3.129 8.195-.005 11.319 3.118 3.118 8.192 3.122 11.319-.005l16.966-16.966 16.965 16.966a7.986 7.986 0 005.663 2.346l-.005-.002c2.05 0 4.102-.78 5.666-2.344l16.965-16.966 16.966 16.966c3.125 3.124 8.194 3.129 11.319.005 3.118-3.118 3.122-8.192-.005-11.319L92.289 82.321a7.986 7.986 0 00-5.663-2.346zM86.7 48.024c-2.05 0-4.102-.78-5.666-2.345L64.07 28.714 47.103 45.679a7.986 7.986 0 01-5.663 2.346l.005-.001c-2.05 0-4.101-.78-5.666-2.345L13.162 23.062c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L41.44 28.714l16.966-16.966a7.986 7.986 0 015.662-2.346l-.005.002c2.05 0 4.102.78 5.666 2.344l16.966 16.966 16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L92.358 45.679a7.986 7.986 0 01-5.663 2.346z\"/></g></svg>"
},
"$:/core/images/folder": {
"title": "$:/core/images/folder",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-folder tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M55.694 128H8C3.58 128 0 124.414 0 119.996V48.004C0 43.584 3.584 40 7.999 40H16v-8c0-4.418 3.578-8 8-8h32a8 8 0 018 8v8h40.001c4.418 0 7.999 3.586 7.999 8.004V59.83l-8-.082v-7.749A4 4 0 0099.997 48H56V36c0-2.21-1.793-4-4.004-4H28.004A4 4 0 0024 36v12H12.003A4 4 0 008 52v64a4 4 0 004.003 4h46.76l-3.069 8z\"/><path d=\"M23.873 55.5h96.003c4.417 0 7.004 4.053 5.774 9.063l-13.344 54.374c-1.228 5.005-5.808 9.063-10.223 9.063H6.08c-4.417 0-7.003-4.053-5.774-9.063L13.65 64.563c1.228-5.005 5.808-9.063 10.223-9.063zm1.78 8.5h87.994c2.211 0 3.504 2.093 2.891 4.666l-11.12 46.668c-.614 2.577-2.902 4.666-5.115 4.666H12.31c-2.211 0-3.504-2.093-2.891-4.666l11.12-46.668C21.152 66.09 23.44 64 25.653 64z\"/></g></svg>"
},
"$:/core/images/full-screen-button": {
"title": "$:/core/images/full-screen-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-full-screen-button tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M0 8a8 8 0 018-8h32a8 8 0 110 16H16v24a8 8 0 11-16 0V8zM128 120a8 8 0 01-8 8H88a8 8 0 110-16h24V88a8 8 0 1116 0v32zM8 128a8 8 0 01-8-8V88a8 8 0 1116 0v24h24a8 8 0 110 16H8zM120 0a8 8 0 018 8v32a8 8 0 11-16 0V16H88a8 8 0 110-16h32z\"/></svg>"
},
"$:/core/images/github": {
"title": "$:/core/images/github",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-github tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M63.938 1.607c-35.336 0-63.994 28.69-63.994 64.084 0 28.312 18.336 52.329 43.768 60.802 3.202.59 4.37-1.388 4.37-3.088 0-1.518-.056-5.55-.087-10.897-17.802 3.871-21.558-8.591-21.558-8.591-2.911-7.404-7.108-9.375-7.108-9.375-5.81-3.973.44-3.895.44-3.895 6.424.453 9.803 6.606 9.803 6.606 5.709 9.791 14.981 6.963 18.627 5.322.582-4.138 2.236-6.963 4.063-8.564-14.211-1.617-29.153-7.117-29.153-31.672 0-6.995 2.495-12.718 6.589-17.195-.66-1.621-2.856-8.14.629-16.96 0 0 5.37-1.722 17.597 6.57 5.104-1.424 10.58-2.132 16.022-2.16 5.438.028 10.91.736 16.022 2.16 12.22-8.292 17.582-6.57 17.582-6.57 3.493 8.82 1.297 15.339.64 16.96 4.102 4.477 6.578 10.2 6.578 17.195 0 24.618-14.966 30.035-29.22 31.62 2.295 1.98 4.342 5.89 4.342 11.87 0 8.564-.079 15.476-.079 17.576 0 1.715 1.155 3.71 4.4 3.084 25.413-8.493 43.733-32.494 43.733-60.798 0-35.394-28.657-64.084-64.006-64.084\"/></svg>"
},
"$:/core/images/gitter": {
"title": "$:/core/images/gitter",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-gitter tc-image-button\" viewBox=\"0 0 18 25\"><path d=\"M15 5h2v10h-2zM10 5h2v20h-2zM5 5h2v20H5zM0 0h2v15H0z\"/></svg>"
},
"$:/core/images/globe": {
"title": "$:/core/images/globe",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-globe tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M72.811 37.128v2.554c0 2.196.978 6.881 0 8.832-1.466 2.928-4.65 3.54-6.394 5.867-1.182 1.577-4.618 10.601-3.69 12.92 3.969 9.922 11.534 3.187 17.962 9.293.864.821 2.887 2.273 3.296 3.296 3.29 8.223-7.576 15.009 3.757 26.3 1.245 1.24 3.813-3.817 4.079-4.614.852-2.563 6.725-5.45 9.088-7.053 2.02-1.37 4.873-2.667 6.328-4.745 2.27-3.244 1.48-7.514 3.098-10.745 2.139-4.274 3.828-9.635 5.998-13.966 3.898-7.781 4.721 2.093 5.067 2.439.358.357 1.011 0 1.517 0 .094 0 1.447.099 1.516 0 .65-.935-1.043-17.92-1.318-19.297-1.404-7.01-6.944-15.781-11.865-20.5-6.274-6.015-7.09-16.197-18.259-14.954-.204.022-5.084 10.148-7.777 13.512-3.728 4.657-2.47-4.153-6.526-4.153-.081 0-1.183-.103-1.253 0-.586.88-1.44 3.896-2.306 4.417-.265.16-1.722-.239-1.846 0-2.243 4.3 8.256 2.212 5.792 7.952-2.352 5.481-6.328-1.997-6.328 8.56M44.467 7.01c9.685 6.13.682 12.198 2.694 16.215 1.655 3.303 4.241 5.395 1.714 9.814-2.063 3.608-6.87 3.966-9.623 6.723-3.04 3.044-5.464 8.94-6.79 12.911-1.617 4.843 14.547 6.866 12.063 11.008-1.386 2.311-6.746 1.466-8.437.198-1.165-.873-3.593-.546-4.417-1.78-2.613-3.915-2.26-8.023-3.625-12.128-.938-2.822-6.313-2.12-7.844-.593-.523.522-.33 1.792-.33 2.505 0 5.285 7.12 3.316 7.12 6.46 0 14.636 3.927 6.534 11.14 11.336 10.036 6.683 7.844 7.303 14.946 14.404 3.673 3.673 7.741 3.686 9.425 9.294 1.602 5.331-9.327 5.339-11.716 7.448-1.123.991-2.813 4.146-4.219 4.615-1.792.598-3.234.496-4.944 1.78-2.427 1.82-3.9 4.932-4.02 4.81-2.148-2.147-3.52-15.479-3.89-18.257-.588-4.42-5.59-5.54-6.986-9.03-1.57-3.927 1.524-9.52-1.129-13.761-6.52-10.424-11.821-14.5-15.35-26.292-.942-3.148 3.342-6.529 4.877-8.833 1.877-2.816 2.662-5.854 4.746-8.635C22.147 24.19 40.855 9.461 43.857 8.635l.61-1.625z\"/><path d=\"M64 126c34.242 0 62-27.758 62-62 0-34.242-27.758-62-62-62C29.758 2 2 29.758 2 64c0 34.242 27.758 62 62 62zm0-6c30.928 0 56-25.072 56-56S94.928 8 64 8 8 33.072 8 64s25.072 56 56 56z\"/></g></svg>"
},
"$:/core/images/heading-1": {
"title": "$:/core/images/heading-1",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-1 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M14 30h13.25v30.104H61.7V30h13.25v75.684H61.7V71.552H27.25v34.132H14V30zm70.335 13.78c2.544 0 5.017-.212 7.42-.636 2.403-.424 4.576-1.13 6.52-2.12 1.942-.99 3.603-2.261 4.981-3.816 1.378-1.555 2.28-3.463 2.703-5.724h9.858v74.2h-13.25V53.32H84.335v-9.54z\"/></svg>"
},
"$:/core/images/heading-2": {
"title": "$:/core/images/heading-2",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-2 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm119.52 75.684H74.85c.07-6.148 1.555-11.519 4.452-16.112 2.897-4.593 6.855-8.586 11.872-11.978a133.725 133.725 0 017.526-5.141 59.6 59.6 0 007.208-5.353c2.19-1.908 3.993-3.975 5.406-6.201 1.413-2.226 2.155-4.788 2.226-7.685 0-1.343-.159-2.774-.477-4.293a11.357 11.357 0 00-1.855-4.24c-.919-1.307-2.19-2.403-3.816-3.286-1.625-.883-3.745-1.325-6.36-1.325-2.403 0-4.399.477-5.989 1.431-1.59.954-2.862 2.261-3.816 3.922-.954 1.66-1.66 3.622-2.12 5.883-.46 2.261-.724 4.7-.795 7.314H76.23c0-4.099.548-7.897 1.643-11.395 1.095-3.498 2.738-6.519 4.93-9.063 2.19-2.544 4.857-4.54 8.002-5.989C93.95 30.724 97.606 30 101.775 30c4.523 0 8.303.742 11.342 2.226 3.039 1.484 5.494 3.357 7.367 5.618 1.873 2.261 3.198 4.717 3.975 7.367.777 2.65 1.166 5.176 1.166 7.579 0 2.968-.46 5.653-1.378 8.056a25.942 25.942 0 01-3.71 6.625 37.5 37.5 0 01-5.3 5.565 79.468 79.468 0 01-6.148 4.77 165.627 165.627 0 01-6.36 4.24 94.28 94.28 0 00-5.883 4.028c-1.802 1.343-3.374 2.738-4.717 4.187-1.343 1.449-2.261 2.986-2.756 4.611h36.146v10.812z\"/></svg>"
},
"$:/core/images/heading-3": {
"title": "$:/core/images/heading-3",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-3 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm88.885 32.224c1.979.07 3.957-.07 5.936-.424 1.979-.353 3.745-.972 5.3-1.855a10.365 10.365 0 003.763-3.657c.954-1.555 1.431-3.463 1.431-5.724 0-3.18-1.078-5.724-3.233-7.632-2.155-1.908-4.929-2.862-8.32-2.862-2.12 0-3.958.424-5.513 1.272a11.318 11.318 0 00-3.869 3.445c-1.025 1.449-1.784 3.074-2.279 4.876a18.335 18.335 0 00-.636 5.565H75.381c.141-3.604.813-6.943 2.014-10.017 1.201-3.074 2.844-5.742 4.93-8.003 2.084-2.261 4.61-4.028 7.578-5.3C92.871 30.636 96.228 30 99.973 30a29.2 29.2 0 018.533 1.272c2.791.848 5.3 2.085 7.526 3.71s4.01 3.692 5.353 6.201c1.343 2.509 2.014 5.388 2.014 8.639 0 3.745-.848 7.014-2.544 9.805-1.696 2.791-4.346 4.823-7.95 6.095v.212c4.24.848 7.544 2.95 9.911 6.307s3.551 7.438 3.551 12.243c0 3.533-.707 6.696-2.12 9.487a21.538 21.538 0 01-5.724 7.102c-2.403 1.943-5.194 3.445-8.374 4.505-3.18 1.06-6.537 1.59-10.07 1.59-4.31 0-8.074-.618-11.289-1.855s-5.9-2.986-8.056-5.247c-2.155-2.261-3.798-4.982-4.929-8.162-1.13-3.18-1.731-6.713-1.802-10.6h12.084c-.141 4.523.972 8.286 3.34 11.289 2.366 3.003 5.917 4.505 10.652 4.505 4.028 0 7.402-1.148 10.123-3.445 2.72-2.297 4.081-5.565 4.081-9.805 0-2.897-.565-5.194-1.696-6.89a10.97 10.97 0 00-4.452-3.869c-1.837-.883-3.904-1.431-6.2-1.643a58.067 58.067 0 00-7.05-.212v-9.01z\"/></svg>"
},
"$:/core/images/heading-4": {
"title": "$:/core/images/heading-4",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-4 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8 30h13.25v30.104H55.7V30h13.25v75.684H55.7V71.552H21.25v34.132H8V30zm76.59 48.548h22.471V45.9h-.212L84.59 78.548zm43.46 9.54h-9.54v17.596H107.06V88.088h-31.8V76.11l31.8-44.626h11.448v47.064h9.54v9.54z\"/></svg>"
},
"$:/core/images/heading-5": {
"title": "$:/core/images/heading-5",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-5 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm77.755 1.484h38.372v10.812H92.765L88.95 61.164l.212.212c1.625-1.837 3.692-3.233 6.201-4.187 2.509-.954 5-1.431 7.473-1.431 3.675 0 6.96.618 9.858 1.855 2.897 1.237 5.335 2.968 7.314 5.194s3.48 4.858 4.505 7.897c1.025 3.039 1.537 6.325 1.537 9.858 0 2.968-.477 6.024-1.43 9.169a25.161 25.161 0 01-4.559 8.586c-2.085 2.58-4.752 4.7-8.003 6.36-3.25 1.66-7.137 2.491-11.66 2.491-3.604 0-6.943-.477-10.017-1.431-3.074-.954-5.777-2.385-8.109-4.293-2.332-1.908-4.187-4.258-5.565-7.049-1.378-2.791-2.138-6.06-2.279-9.805h12.084c.353 4.028 1.731 7.12 4.134 9.275 2.403 2.155 5.583 3.233 9.54 3.233 2.544 0 4.7-.424 6.466-1.272 1.767-.848 3.198-2.014 4.293-3.498 1.095-1.484 1.873-3.215 2.332-5.194.46-1.979.69-4.099.69-6.36 0-2.05-.284-4.01-.849-5.883-.565-1.873-1.413-3.516-2.544-4.929-1.13-1.413-2.597-2.544-4.399-3.392-1.802-.848-3.904-1.272-6.307-1.272-2.544 0-4.929.477-7.155 1.431-2.226.954-3.834 2.738-4.823 5.353H75.805l7.95-40.598z\"/></svg>"
},
"$:/core/images/heading-6": {
"title": "$:/core/images/heading-6",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-6 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm106.587 20.246c-.283-3.039-1.36-5.494-3.233-7.367-1.873-1.873-4.399-2.809-7.579-2.809-2.19 0-4.08.406-5.67 1.219a12.435 12.435 0 00-4.029 3.233c-1.095 1.343-1.979 2.88-2.65 4.611a37.696 37.696 0 00-1.643 5.459 46.08 46.08 0 00-.9 5.671 722.213 722.213 0 00-.478 5.247l.212.212c1.625-2.968 3.87-5.176 6.731-6.625 2.862-1.449 5.954-2.173 9.275-2.173 3.675 0 6.96.636 9.858 1.908 2.897 1.272 5.353 3.021 7.367 5.247 2.014 2.226 3.551 4.858 4.611 7.897 1.06 3.039 1.59 6.325 1.59 9.858 0 3.604-.583 6.943-1.749 10.017-1.166 3.074-2.844 5.76-5.035 8.056-2.19 2.297-4.805 4.081-7.844 5.353-3.039 1.272-6.395 1.908-10.07 1.908-5.441 0-9.91-1.007-13.409-3.021-3.498-2.014-6.254-4.77-8.268-8.268-2.014-3.498-3.41-7.597-4.187-12.296-.777-4.7-1.166-9.77-1.166-15.211 0-4.452.477-8.94 1.431-13.462.954-4.523 2.526-8.639 4.717-12.349 2.19-3.71 5.07-6.731 8.64-9.063C92.676 31.166 97.075 30 102.304 30c2.968 0 5.76.495 8.374 1.484 2.615.99 4.93 2.367 6.943 4.134 2.014 1.767 3.657 3.887 4.93 6.36 1.271 2.473 1.978 5.23 2.12 8.268h-12.085zm-11.66 46.852c2.19 0 4.099-.442 5.724-1.325a12.869 12.869 0 004.081-3.445c1.095-1.413 1.908-3.056 2.438-4.929.53-1.873.795-3.798.795-5.777s-.265-3.887-.795-5.724c-.53-1.837-1.343-3.445-2.438-4.823-1.095-1.378-2.456-2.491-4.08-3.339-1.626-.848-3.534-1.272-5.725-1.272-2.19 0-4.116.406-5.777 1.219-1.66.813-3.056 1.908-4.187 3.286-1.13 1.378-1.979 2.986-2.544 4.823-.565 1.837-.848 3.78-.848 5.83 0 2.05.283 3.993.848 5.83.565 1.837 1.413 3.48 2.544 4.929a12.39 12.39 0 004.187 3.445c1.66.848 3.586 1.272 5.777 1.272z\"/></svg>"
},
"$:/core/images/help": {
"title": "$:/core/images/help",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-help tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M36.055 111.441c-5.24 4.396-15.168 7.362-26.555 7.362-1.635 0-3.24-.06-4.806-.179 7.919-2.64 14.062-8.6 16.367-16.014C8.747 92.845 1.05 78.936 1.05 63.5c0-29.547 28.206-53.5 63-53.5s63 23.953 63 53.5-28.206 53.5-63 53.5c-10.055 0-19.56-2-27.994-5.559zm35.35-33.843a536.471 536.471 0 00.018-4.682 199.02 199.02 0 00-.023-3.042c.008-1.357.595-2.087 3.727-4.235.112-.077 1.085-.74 1.386-.948 3.093-2.133 5.022-3.786 6.762-6.187 2.34-3.228 3.558-7.077 3.558-11.649 0-13.292-9.86-21.952-21.455-21.952-11.103 0-22.499 9.609-24.066 22.295a6.023 6.023 0 1011.956 1.477c.806-6.527 6.972-11.726 12.11-11.726 5.265 0 9.408 3.64 9.408 9.906 0 3.634-1.1 5.153-5.111 7.919l-1.362.93c-2.682 1.84-4.227 3.1-5.7 4.931-2.109 2.62-3.242 5.717-3.258 9.314.013.892.02 1.86.022 2.981a470.766 470.766 0 01-.022 4.943 6.023 6.023 0 1012.046.12l.003-.395zm-6.027 24.499a7.529 7.529 0 100-15.058 7.529 7.529 0 000 15.058z\"/></svg>"
},
"$:/core/images/home-button": {
"title": "$:/core/images/home-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-home-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M112.985 119.502c.01-.165.015-.331.015-.499V67.568c3.137 2.948 8.076 2.884 11.134-.174a7.999 7.999 0 00-.002-11.316L70.396 2.343A7.978 7.978 0 0064.734 0a7.957 7.957 0 00-5.656 2.343L33 28.42V8.007C33 3.585 29.41 0 25 0c-4.418 0-8 3.59-8 8.007V44.42L5.342 56.078c-3.125 3.125-3.12 8.198-.002 11.316a7.999 7.999 0 0011.316-.003l.344-.343v52.945a8.11 8.11 0 000 .007c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8a8.11 8.11 0 00-.015-.498zM97 112V51.574L64.737 19.31 33 51.048V112h64z\"/></svg>"
},
"$:/core/images/import-button": {
"title": "$:/core/images/import-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-import-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M114.832 60.436s3.235-3.27 6.921.417c3.686 3.686.231 7.14.231 7.14l-42.153 42.92s-30.765 32.367-58.798 4.333C-7 87.213 24.59 55.623 24.59 55.623L67.363 12.85s22.725-24.6 43.587-3.738c20.862 20.862-3.96 43.09-3.96 43.09l-35.04 35.04S49.903 112.546 36.426 99.07c-13.476-13.477 11.83-35.523 11.83-35.523l35.04-35.04s3.902-3.902 7.78-.023c3.879 3.878.118 7.921.118 7.921l-35.04 35.04s-13.212 13.212-8.872 17.551c4.34 4.34 16.77-9.653 16.77-9.653l35.04-35.04s16.668-14.598 3.966-27.3c-13.893-13.892-27.565 3.702-27.565 3.702l-42.91 42.91s-23.698 23.698-3.658 43.738 43.012-4.385 43.012-4.385l42.895-42.533z\"/></svg>"
},
"$:/core/images/info-button": {
"title": "$:/core/images/info-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-info-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\" transform=\"translate(.05)\"><path d=\"M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48z\"/><circle cx=\"64\" cy=\"32\" r=\"8\"/><rect width=\"16\" height=\"56\" x=\"56\" y=\"48\" rx=\"8\"/></g></svg>"
},
"$:/core/images/italic": {
"title": "$:/core/images/italic",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-italic tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M66.711 0h22.41L62.408 128H40z\"/></svg>"
},
"$:/core/images/left-arrow": {
"title": "$:/core/images/left-arrow",
"created": "20150315234410875",
"modified": "20150315235324760",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-left-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M0 64.177c0-2.026.771-4.054 2.317-5.6l55.98-55.98a7.92 7.92 0 0111.195.001c3.086 3.085 3.092 8.104.001 11.195L19.111 64.175l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.086-8.105 3.092-11.196.001l-55.98-55.98A7.892 7.892 0 010 64.177z\"/></svg>"
},
"$:/core/images/line-width": {
"title": "$:/core/images/line-width",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-line-width tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M16 18h96a2 2 0 000-4H16a2 2 0 100 4zm0 17h96a4 4 0 100-8H16a4 4 0 100 8zm0 21h96a6 6 0 000-12H16a6 6 0 100 12zm0 29h96c5.523 0 10-4.477 10-10s-4.477-10-10-10H16c-5.523 0-10 4.477-10 10s4.477 10 10 10zm0 43h96c8.837 0 16-7.163 16-16s-7.163-16-16-16H16c-8.837 0-16 7.163-16 16s7.163 16 16 16z\"/></svg>"
},
"$:/core/images/link": {
"title": "$:/core/images/link",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-link tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M42.263 69.38a31.919 31.919 0 006.841 10.13c12.5 12.5 32.758 12.496 45.255 0l22.627-22.628c12.502-12.501 12.497-32.758 0-45.255-12.5-12.5-32.758-12.496-45.254 0L49.104 34.255a32.333 32.333 0 00-2.666 3.019 36.156 36.156 0 0121.94.334l14.663-14.663c6.25-6.25 16.382-6.254 22.632-.004 6.248 6.249 6.254 16.373-.004 22.631l-22.62 22.62c-6.25 6.25-16.381 6.254-22.631.004a15.93 15.93 0 01-4.428-8.433 11.948 11.948 0 00-7.59 3.48l-6.137 6.137z\"/><path d=\"M86.35 59.234a31.919 31.919 0 00-6.84-10.13c-12.5-12.5-32.758-12.497-45.255 0L11.627 71.732c-12.501 12.5-12.496 32.758 0 45.254 12.5 12.5 32.758 12.497 45.255 0L79.51 94.36a32.333 32.333 0 002.665-3.02 36.156 36.156 0 01-21.94-.333l-14.663 14.663c-6.25 6.25-16.381 6.253-22.63.004-6.25-6.249-6.255-16.374.003-22.632l22.62-22.62c6.25-6.25 16.381-6.253 22.631-.003a15.93 15.93 0 014.428 8.432 11.948 11.948 0 007.59-3.48l6.137-6.136z\"/></g></svg>"
},
"$:/core/images/linkify": {
"title": "$:/core/images/linkify",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-linkify-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M17.031 31.919H9.048V96.85h7.983v6.92H0V25h17.031v6.919zm24.66 0h-7.983V96.85h7.983v6.92H24.66V25h17.03v6.919zM67.77 56.422l11.975-3.903 2.306 7.096-12.063 3.903 7.628 10.379-6.12 4.435-7.63-10.467-7.45 10.2-5.943-4.523L58.1 63.518 45.95 59.35l2.306-7.096 12.064 4.17V43.825h7.45v12.596zM86.31 96.85h7.982V31.92H86.31V25h17.031v78.77H86.31v-6.92zm24.659 0h7.983V31.92h-7.983V25H128v78.77h-17.031v-6.92z\"/></svg>"
},
"$:/core/images/list-bullet": {
"title": "$:/core/images/list-bullet",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-list-bullet tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M11.636 40.273c6.427 0 11.637-5.21 11.637-11.637C23.273 22.21 18.063 17 11.636 17 5.21 17 0 22.21 0 28.636c0 6.427 5.21 11.637 11.636 11.637zm0 34.909c6.427 0 11.637-5.21 11.637-11.637 0-6.426-5.21-11.636-11.637-11.636C5.21 51.91 0 57.12 0 63.545c0 6.427 5.21 11.637 11.636 11.637zm0 34.909c6.427 0 11.637-5.21 11.637-11.636 0-6.427-5.21-11.637-11.637-11.637C5.21 86.818 0 92.028 0 98.455c0 6.426 5.21 11.636 11.636 11.636zM34.91 22.818H128v11.637H34.91V22.818zm0 34.91H128v11.636H34.91V57.727zm0 34.908H128v11.637H34.91V92.636z\"/></svg>"
},
"$:/core/images/list-number": {
"title": "$:/core/images/list-number",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-list-number tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M33.84 22.356H128v11.77H33.84v-11.77zm0 35.31H128v11.77H33.84v-11.77zm0 35.311H128v11.77H33.84v-11.77zM.38 42.631v-2.223h.998c.826 0 1.445-.14 1.858-.42.413-.28.619-.948.619-2.002V22.769c0-1.442-.193-2.336-.58-2.683-.385-.347-1.477-.52-3.275-.52v-2.143c3.502-.147 6.252-.955 8.25-2.423h2.117v22.865c0 .921.15 1.575.449 1.963.3.387.949.58 1.948.58h.998v2.223H.38zm-.3 35.356v-1.902c7.19-6.554 10.786-12.58 10.786-18.08 0-1.562-.326-2.81-.979-3.744-.652-.934-1.524-1.402-2.616-1.402-.893 0-1.655.317-2.287.952-.633.634-.95 1.364-.95 2.192 0 .974.247 1.829.74 2.563.106.16.16.28.16.36 0 .147-.16.28-.48.4-.213.08-.752.308-1.618.681-.839.374-1.358.561-1.558.561-.24 0-.512-.37-.819-1.111A6.2 6.2 0 010 57.064c0-1.949.849-3.544 2.547-4.785 1.698-1.242 3.798-1.862 6.302-1.862 2.463 0 4.53.67 6.202 2.012 1.67 1.341 2.506 3.093 2.506 5.256a8.644 8.644 0 01-.849 3.724c-.566 1.201-1.92 3.053-4.064 5.556a165.471 165.471 0 01-6.272 6.938h11.445l-1.019 5.726h-2.117c.08-.28.12-.534.12-.76 0-.388-.1-.631-.3-.731-.2-.1-.599-.15-1.198-.15H.08zm12.124 19.207c1.745.04 3.236.637 4.474 1.792 1.239 1.154 1.858 2.773 1.858 4.855 0 2.99-1.132 5.393-3.396 7.208-2.263 1.815-5 2.723-8.209 2.723-2.01 0-3.669-.384-4.974-1.151C.652 111.853 0 110.849 0 109.607c0-.774.27-1.398.809-1.872.54-.474 1.128-.71 1.768-.71.639 0 1.162.2 1.568.6.406.4.782 1.055 1.128 1.962.466 1.268 1.239 1.902 2.317 1.902 1.265 0 2.287-.477 3.066-1.431.78-.955 1.169-2.686 1.169-5.196 0-1.709-.12-3.023-.36-3.944-.24-.921-.792-1.382-1.658-1.382-.586 0-1.185.307-1.797.921-.493.494-.932.741-1.319.741-.333 0-.602-.147-.809-.44-.206-.294-.31-.574-.31-.841 0-.32.104-.594.31-.821.207-.227.69-.594 1.449-1.102 2.876-1.922 4.314-4.017 4.314-6.287 0-1.188-.306-2.092-.919-2.713a3.001 3.001 0 00-2.217-.93c-.799 0-1.525.263-2.177.79-.653.528-.979 1.158-.979 1.892 0 .641.253 1.235.76 1.782.172.2.259.367.259.5 0 .121-.57.428-1.708.922-1.139.494-1.854.74-2.147.74-.413 0-.75-.333-1.009-1-.26-.668-.39-1.282-.39-1.842 0-1.749.93-3.224 2.787-4.425 1.858-1.202 3.965-1.802 6.322-1.802 2.064 0 3.851.447 5.363 1.341 1.511.895 2.267 2.116 2.267 3.664 0 1.362-.57 2.623-1.708 3.784a13.387 13.387 0 01-3.945 2.784z\"/></svg>"
},
"$:/core/images/list": {
"title": "$:/core/images/list",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-list tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M87.748 128H23.999c-4.418 0-7.999-3.59-7.999-8.007V8.007C16 3.585 19.588 0 24 0h80c4.419 0 8 3.59 8 8.007V104H91.25c-.965 0-1.84.392-2.473 1.025a3.476 3.476 0 00-1.029 2.476V128zm8-.12l15.88-15.88h-15.88v15.88zM40 15.508A3.502 3.502 0 0143.5 12h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 20h-55a3.498 3.498 0 01-3.5-3.509v-.982zM32 22a6 6 0 100-12 6 6 0 000 12zm8 9.509A3.502 3.502 0 0143.5 28h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 36h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 44h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 52h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 60h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 68h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 76h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 84h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 92h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 100h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.505 3.505 0 0143.497 108h33.006A3.497 3.497 0 0180 111.509v.982A3.505 3.505 0 0176.503 116H43.497A3.497 3.497 0 0140 112.491v-.982zM32 38a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12z\"/></svg>"
},
"$:/core/images/locked-padlock": {
"title": "$:/core/images/locked-padlock",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-locked-padlock tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M96.472 64H105v32.01C105 113.674 90.674 128 73.001 128H56C38.318 128 24 113.677 24 96.01V64h8c.003-15.723.303-47.731 32.16-47.731 31.794 0 32.305 32.057 32.312 47.731zm-15.897 0H48.44c.002-16.287.142-32 15.719-32 15.684 0 16.977 16.136 16.415 32zM67.732 92.364A8.503 8.503 0 0064.5 76a8.5 8.5 0 00-3.498 16.25l-5.095 22.77H72.8l-5.07-22.656z\"/></svg>"
},
"$:/core/images/mail": {
"title": "$:/core/images/mail",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-mail tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M122.827 104.894a7.986 7.986 0 01-2.834.516H8.007c-.812 0-1.597-.12-2.335-.345l34.163-34.163 20.842 20.842a3.998 3.998 0 003.418 1.134 4.003 4.003 0 003.395-1.134L88.594 70.64c.075.09.155.176.24.26l33.993 33.994zm5.076-6.237c.064-.406.097-.823.097-1.247v-64c0-.669-.082-1.318-.237-1.94L94.23 65.006c.09.075.177.154.261.239l33.413 33.413zm-127.698.56A8.023 8.023 0 010 97.41v-64c0-.716.094-1.41.271-2.071l33.907 33.906L.205 99.218zM5.93 25.684a8.012 8.012 0 012.078-.273h111.986c.766 0 1.507.108 2.209.308L64.083 83.837 5.93 25.683z\"/></svg>"
},
"$:/core/images/menu-button": {
"title": "$:/core/images/menu-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-menu-button tc-image-button\" viewBox=\"0 0 128 128\"><rect width=\"128\" height=\"16\" y=\"16\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"56\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"96\" rx=\"8\"/></svg>"
},
"$:/core/images/mono-block": {
"title": "$:/core/images/mono-block",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-mono-block tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M23.965 32.967h.357c.755 0 1.328.192 1.72.577.39.384.586.947.586 1.688 0 .824-.206 1.418-.618 1.782-.413.363-1.094.545-2.045.545h-6.31c-.965 0-1.65-.178-2.056-.535-.405-.356-.608-.954-.608-1.792 0-.811.203-1.391.608-1.74.406-.35 1.09-.525 2.055-.525h.734l-.86-2.453H8.471l-.902 2.453h.734c.95 0 1.632.178 2.044.535.413.356.619.933.619 1.73 0 .824-.206 1.418-.619 1.782-.412.363-1.094.545-2.044.545h-5.41c-.964 0-1.649-.182-2.054-.545-.406-.364-.608-.958-.608-1.782 0-.741.195-1.304.587-1.688.391-.385.964-.577 1.719-.577h.356l5.62-15.641H6.835c-.95 0-1.632-.182-2.044-.546-.412-.363-.619-.95-.619-1.76 0-.825.207-1.42.619-1.783.412-.363 1.094-.545 2.044-.545h7.863c1.244 0 2.118.67 2.62 2.013v.063l6.647 18.2zM12.98 17.326l-3.04 8.848h6.08l-3.04-8.848zm22.402 9.372v6.395h3.145c2.223 0 3.788-.245 4.697-.734.908-.49 1.362-1.307 1.362-2.453 0-1.16-.433-1.985-1.3-2.474-.866-.49-2.383-.734-4.55-.734h-3.354zm10.693-2.327c1.524.559 2.642 1.324 3.355 2.295.713.972 1.07 2.212 1.07 3.722 0 1.272-.308 2.432-.923 3.48-.615 1.049-1.496 1.909-2.642 2.58a7.499 7.499 0 01-2.254.849c-.832.174-2.01.262-3.533.262H30.202c-.922 0-1.583-.182-1.981-.545-.399-.364-.598-.958-.598-1.782 0-.741.189-1.304.566-1.688.378-.385.93-.577 1.657-.577h.356V17.326h-.356c-.727 0-1.28-.196-1.657-.587-.377-.392-.566-.965-.566-1.72 0-.81.203-1.401.608-1.771.406-.37 1.062-.556 1.971-.556h9.645c2.95 0 5.19.573 6.72 1.72 1.53 1.145 2.296 2.823 2.296 5.031 0 1.09-.234 2.052-.703 2.883-.468.832-1.163 1.513-2.086 2.045zM35.381 17.2v5.284h2.83c1.72 0 2.932-.203 3.638-.609.706-.405 1.06-1.09 1.06-2.054 0-.909-.319-1.573-.955-1.992-.636-.42-1.667-.63-3.093-.63h-3.48zm35.863-3.816c.28-.503.566-.86.86-1.07.293-.21.664-.314 1.111-.314.685 0 1.17.182 1.457.545.287.364.43.986.43 1.866l.042 5.452c0 .964-.157 1.614-.472 1.95-.314.335-.884.503-1.709.503-.587 0-1.037-.14-1.352-.42-.314-.28-.584-.796-.807-1.551-.364-1.328-.944-2.282-1.74-2.862-.797-.58-1.901-.87-3.313-.87-2.153 0-3.802.727-4.948 2.18-1.147 1.454-1.72 3.558-1.72 6.311 0 2.74.58 4.844 1.74 6.311 1.16 1.468 2.817 2.202 4.97 2.202 1.467 0 3.085-.49 4.854-1.468 1.768-.978 2.883-1.467 3.344-1.467.545 0 1.003.23 1.373.692.37.46.556 1.034.556 1.719 0 1.23-1.084 2.39-3.25 3.48-2.167 1.09-4.606 1.636-7.318 1.636-3.662 0-6.625-1.21-8.89-3.627-2.264-2.419-3.396-5.578-3.396-9.478 0-3.76 1.146-6.884 3.438-9.372 2.293-2.488 5.2-3.732 8.723-3.732.992 0 1.97.112 2.935.335.964.224 1.992.574 3.082 1.049zm10.22 19.583V17.326h-.356c-.755 0-1.328-.196-1.72-.587-.39-.392-.586-.965-.586-1.72 0-.81.21-1.401.629-1.771.42-.37 1.097-.556 2.034-.556h5.178c2.922 0 5.06.126 6.416.377 1.356.252 2.51.671 3.46 1.258 1.691 1.007 2.988 2.443 3.89 4.31.9 1.865 1.352 4.021 1.352 6.467 0 2.586-.514 4.847-1.541 6.783-1.028 1.936-2.485 3.4-4.372 4.393-.853.447-1.852.772-2.998.975-1.147.203-2.852.304-5.116.304h-6.269c-.965 0-1.65-.178-2.055-.535-.406-.356-.608-.954-.608-1.792 0-.741.195-1.304.587-1.688.391-.385.964-.577 1.72-.577h.356zm5.41-15.725v15.725h1.195c2.642 0 4.592-.646 5.85-1.94 1.258-1.292 1.887-3.28 1.887-5.965 0-2.641-.64-4.612-1.918-5.912-1.28-1.3-3.205-1.95-5.777-1.95-.335 0-.59.003-.765.01a7.992 7.992 0 00-.472.032zm35.067-.126h-9.75v5.368h3.69v-.252c0-.797.175-1.39.524-1.782.35-.392.88-.587 1.594-.587.629 0 1.142.178 1.54.534.4.357.598.808.598 1.353 0 .028.007.118.021.272.014.154.021.308.021.462v4.34c0 .936-.167 1.607-.503 2.013-.335.405-.88.608-1.635.608-.713 0-1.251-.19-1.615-.567-.363-.377-.545-.936-.545-1.677v-.377h-3.69v6.269h9.75v-2.495c0-.937.178-1.608.534-2.013.357-.405.94-.608 1.75-.608.798 0 1.367.2 1.71.597.342.399.513 1.073.513 2.024v5.074c0 .755-.146 1.258-.44 1.51-.293.251-.873.377-1.74.377h-17.172c-.923 0-1.583-.182-1.982-.545-.398-.364-.597-.958-.597-1.782 0-.741.189-1.304.566-1.688.377-.385.93-.577 1.656-.577h.357V17.326h-.357c-.712 0-1.261-.2-1.646-.598-.384-.398-.576-.968-.576-1.709 0-.81.203-1.401.608-1.771.405-.37 1.062-.556 1.97-.556h17.173c.853 0 1.43.13 1.73.388.3.258.45.772.45 1.54v4.698c0 .95-.174 1.631-.524 2.044-.35.412-.915.618-1.698.618-.81 0-1.394-.21-1.75-.629-.357-.419-.535-1.097-.535-2.033v-2.202zM19.77 47.641c.267-.504.55-.86.85-1.07.3-.21.675-.314 1.122-.314.685 0 1.17.181 1.457.545.287.363.43.985.43 1.866l.042 5.451c0 .965-.157 1.615-.472 1.95-.314.336-.891.504-1.73.504-.587 0-1.045-.144-1.373-.43-.329-.287-.598-.8-.807-1.541-.378-1.342-.958-2.3-1.74-2.873-.783-.573-1.88-.86-3.292-.86-2.153 0-3.799.727-4.938 2.181-1.14 1.454-1.709 3.557-1.709 6.311s.598 4.882 1.793 6.385C10.599 67.248 12.294 68 14.488 68c.503 0 1.077-.06 1.72-.179a23.809 23.809 0 002.264-.555v-3.313h-2.37c-.95 0-1.624-.175-2.023-.524-.398-.35-.597-.93-.597-1.74 0-.84.199-1.437.597-1.793.399-.357 1.073-.535 2.024-.535h7.569c.978 0 1.667.175 2.065.524.398.35.598.937.598 1.762 0 .74-.2 1.31-.598 1.708-.398.399-.975.598-1.73.598h-.335v5.242c0 .447-.05.758-.147.933-.098.174-.293.353-.587.534-.797.476-2.062.895-3.795 1.258a25.576 25.576 0 01-5.263.546c-3.662 0-6.625-1.21-8.89-3.628-2.264-2.418-3.397-5.577-3.397-9.477 0-3.76 1.147-6.884 3.44-9.372 2.292-2.488 5.199-3.732 8.721-3.732.979 0 1.954.112 2.925.335.972.224 2.003.573 3.093 1.049zm15.84 3.941v4.823h6.857v-4.823h-.336c-.754 0-1.331-.195-1.73-.587-.398-.391-.597-.964-.597-1.719 0-.825.206-1.419.619-1.782.412-.364 1.093-.545 2.044-.545h5.41c.95 0 1.624.181 2.023.545.398.363.597.957.597 1.782 0 .755-.192 1.328-.576 1.72-.385.39-.947.586-1.688.586h-.357v15.642h.357c.755 0 1.328.192 1.719.576.391.385.587.947.587 1.688 0 .825-.203 1.419-.608 1.782-.405.364-1.09.546-2.055.546h-5.41c-.964 0-1.649-.179-2.054-.535-.405-.357-.608-.954-.608-1.793 0-.74.2-1.303.598-1.688.398-.384.975-.576 1.73-.576h.335v-6.186h-6.856v6.186h.335c.755 0 1.331.192 1.73.576.398.385.597.947.597 1.688 0 .825-.206 1.419-.618 1.782-.412.364-1.094.546-2.044.546h-5.41c-.964 0-1.65-.179-2.055-.535-.405-.357-.608-.954-.608-1.793 0-.74.196-1.303.587-1.688.392-.384.965-.576 1.72-.576h.356V51.582h-.356c-.741 0-1.304-.195-1.688-.587-.385-.391-.577-.964-.577-1.719 0-.825.2-1.419.598-1.782.398-.364 1.073-.545 2.023-.545h5.41c.936 0 1.614.181 2.033.545.42.363.63.957.63 1.782 0 .755-.2 1.328-.598 1.72-.399.39-.975.586-1.73.586h-.335zm31.754 0v15.642h3.523c.95 0 1.632.178 2.044.534.412.357.618.933.618 1.73 0 .811-.21 1.402-.629 1.772-.419.37-1.097.556-2.033.556H58.433c-.95 0-1.632-.182-2.044-.546-.412-.363-.619-.957-.619-1.782 0-.81.203-1.39.608-1.74.406-.35 1.09-.524 2.055-.524h3.523V51.582h-3.523c-.95 0-1.632-.181-2.044-.545-.412-.363-.619-.95-.619-1.761 0-.825.203-1.412.608-1.761.406-.35 1.09-.524 2.055-.524h12.455c.992 0 1.684.174 2.075.524.392.35.587.936.587 1.761 0 .81-.202 1.398-.608 1.761-.405.364-1.09.545-2.054.545h-3.523zm30.496 0v11.994c0 1.873-.122 3.228-.367 4.067a5.876 5.876 0 01-1.227 2.244c-.74.852-1.768 1.495-3.082 1.929-1.314.433-2.893.65-4.738.65-1.3 0-2.555-.126-3.764-.378a16.843 16.843 0 01-3.491-1.132c-.615-.28-1.017-.643-1.206-1.09-.188-.448-.283-1.175-.283-2.18v-4.32c0-1.202.175-2.04.525-2.516.349-.475.957-.713 1.824-.713 1.244 0 1.929.915 2.054 2.747.014.321.035.566.063.733.168 1.622.545 2.73 1.133 3.324.587.594 1.523.89 2.81.89 1.593 0 2.714-.422 3.364-1.268.65-.845.975-2.386.975-4.623V51.582H88.93c-.95 0-1.632-.181-2.044-.545-.413-.363-.619-.95-.619-1.761 0-.825.2-1.412.598-1.761.398-.35 1.086-.524 2.065-.524h10.693c.979 0 1.667.174 2.065.524.399.35.598.936.598 1.761 0 .81-.206 1.398-.619 1.761-.412.364-1.093.545-2.044.545h-1.761zm14.644 0v6.353l6.48-6.478c-.728-.084-1.238-.29-1.531-.619-.294-.328-.44-.85-.44-1.562 0-.825.198-1.419.597-1.782.398-.364 1.073-.545 2.023-.545h5.137c.95 0 1.625.181 2.023.545.399.363.598.957.598 1.782 0 .769-.2 1.345-.598 1.73-.398.384-.982.576-1.75.576h-.483l-6.101 6.06c1.132.839 2.167 1.94 3.103 3.302.937 1.363 2.034 3.456 3.292 6.28h.692c.825 0 1.44.188 1.845.566.405.377.608.943.608 1.698 0 .825-.206 1.419-.619 1.782-.412.364-1.093.546-2.044.546h-2.579c-1.132 0-2.048-.762-2.746-2.286-.126-.28-.224-.503-.294-.67-.923-1.958-1.768-3.467-2.537-4.53a16.616 16.616 0 00-2.705-2.914l-1.97 1.887v3.92h.335c.755 0 1.331.193 1.73.577.398.385.597.947.597 1.688 0 .825-.206 1.419-.618 1.782-.413.364-1.094.546-2.045.546h-5.41c-.964 0-1.649-.179-2.054-.535-.405-.357-.608-.954-.608-1.793 0-.74.196-1.303.587-1.688.391-.384.965-.576 1.72-.576h.356V51.582h-.357c-.74 0-1.303-.195-1.687-.587-.385-.391-.577-.964-.577-1.719 0-.825.2-1.419.598-1.782.398-.364 1.072-.545 2.023-.545h5.41c.936 0 1.614.181 2.033.545.42.363.63.957.63 1.782 0 .755-.2 1.328-.598 1.72-.399.39-.975.586-1.73.586h-.336zM13.44 96.326l4.005-11.889c.251-.782.6-1.352 1.048-1.709.447-.356 1.041-.534 1.782-.534h3.271c.95 0 1.632.182 2.044.545.413.363.619.957.619 1.782 0 .755-.2 1.328-.598 1.72-.398.39-.975.587-1.73.587h-.335l.587 15.641h.357c.754 0 1.32.192 1.698.577.377.384.566.947.566 1.687 0 .825-.2 1.42-.598 1.783-.398.363-1.072.545-2.023.545h-4.718c-.95 0-1.624-.178-2.023-.535-.398-.356-.597-.954-.597-1.793 0-.74.192-1.303.576-1.687.385-.385.954-.577 1.709-.577h.335l-.293-12.79-3.061 9.52c-.224.712-.542 1.226-.954 1.54-.413.315-.982.472-1.709.472-.727 0-1.303-.157-1.73-.472-.426-.314-.751-.828-.975-1.54l-3.04-9.52-.294 12.79h.336c.755 0 1.324.192 1.709.577.384.384.576.947.576 1.687 0 .825-.202 1.42-.608 1.783-.405.363-1.076.545-2.013.545H2.621c-.937 0-1.608-.182-2.013-.545-.405-.364-.608-.958-.608-1.783 0-.74.192-1.303.577-1.687.384-.385.954-.577 1.708-.577h.336l.608-15.641h-.336c-.754 0-1.331-.196-1.73-.588-.398-.39-.597-.964-.597-1.719 0-.825.206-1.419.619-1.782.412-.363 1.093-.545 2.044-.545h3.27c.728 0 1.311.175 1.752.524.44.35.8.923 1.08 1.72l4.109 11.888zm30.454 2.054V86.828H42.74c-.922 0-1.583-.182-1.981-.546-.398-.363-.598-.95-.598-1.76 0-.812.2-1.402.598-1.773.398-.37 1.059-.555 1.981-.555h5.955c.909 0 1.566.185 1.97.555.406.37.609.961.609 1.772 0 .741-.192 1.31-.577 1.709-.384.398-.933.598-1.646.598h-.356v19.038c0 .657-.07 1.069-.21 1.237-.14.167-.454.251-.943.251h-2.097c-.67 0-1.143-.07-1.415-.21-.273-.14-.507-.384-.703-.733l-8.722-15.327v11.385h1.216c.909 0 1.559.175 1.95.524.392.35.587.93.587 1.74 0 .825-.199 1.42-.597 1.783-.399.363-1.045.545-1.94.545h-6.017c-.909 0-1.566-.182-1.971-.545-.406-.364-.608-.958-.608-1.783 0-.74.188-1.303.566-1.687.377-.385.936-.577 1.677-.577h.336V86.828h-.336c-.713 0-1.265-.2-1.656-.598-.392-.398-.587-.968-.587-1.709 0-.81.206-1.401.618-1.772.413-.37 1.066-.555 1.96-.555h3.44c.824 0 1.383.108 1.677.325.293.216.622.653.985 1.31l7.989 14.551zM64.66 86.366c-1.803 0-3.218.727-4.245 2.18-1.028 1.455-1.541 3.474-1.541 6.06 0 2.586.517 4.613 1.551 6.08 1.034 1.468 2.446 2.202 4.235 2.202 1.804 0 3.222-.73 4.257-2.19 1.034-1.461 1.551-3.492 1.551-6.092 0-2.586-.513-4.605-1.54-6.06-1.028-1.453-2.45-2.18-4.268-2.18zm0-4.864c3.44 0 6.27 1.23 8.492 3.69 2.223 2.46 3.334 5.598 3.334 9.414 0 3.844-1.104 6.99-3.313 9.436-2.208 2.446-5.046 3.669-8.513 3.669-3.424 0-6.255-1.234-8.491-3.701-2.237-2.467-3.355-5.602-3.355-9.404 0-3.83 1.108-6.971 3.323-9.424 2.216-2.454 5.057-3.68 8.523-3.68zM87.461 98.17v4.298h2.16c.908 0 1.555.175 1.94.524.384.35.576.93.576 1.74 0 .825-.196 1.42-.587 1.783-.392.363-1.035.545-1.93.545h-7.254c-.922 0-1.583-.182-1.981-.545-.399-.364-.598-.958-.598-1.783 0-.74.189-1.303.566-1.687.378-.385.93-.577 1.657-.577h.356V86.828h-.356c-.713 0-1.262-.2-1.646-.598-.385-.398-.577-.968-.577-1.709 0-.81.203-1.401.608-1.772.406-.37 1.063-.555 1.971-.555h8.66c3.424 0 6.014.657 7.768 1.97 1.754 1.315 2.631 3.25 2.631 5.809 0 2.697-.873 4.738-2.62 6.122-1.748 1.384-4.34 2.076-7.78 2.076h-3.564zm0-11.343v6.625h2.977c1.65 0 2.89-.28 3.722-.839.832-.559 1.248-1.397 1.248-2.516 0-1.048-.43-1.855-1.29-2.421-.86-.566-2.086-.85-3.68-.85h-2.977zm27.267 20.568l-1.636 1.636a12.37 12.37 0 011.772-.44c.58-.098 1.15-.147 1.709-.147 1.104 0 2.268.164 3.491.492 1.223.329 1.967.493 2.233.493.447 0 1.03-.15 1.75-.45.72-.301 1.206-.452 1.458-.452.517 0 .947.2 1.29.598.342.398.513.898.513 1.5 0 .796-.472 1.474-1.415 2.033-.944.56-2.1.839-3.47.839-.937 0-2.139-.22-3.607-.66-1.467-.441-2.53-.661-3.187-.661-.992 0-2.11.272-3.354.817-1.244.546-2.013.818-2.307.818a2.14 2.14 0 01-1.53-.597c-.42-.399-.63-.878-.63-1.437 0-.391.134-.807.4-1.247.265-.44.733-1.01 1.404-1.709l2.118-2.139c-2.335-.852-4.194-2.386-5.578-4.602-1.384-2.215-2.075-4.763-2.075-7.642 0-3.802 1.104-6.909 3.312-9.32 2.209-2.411 5.053-3.617 8.534-3.617 3.467 0 6.304 1.209 8.513 3.627 2.208 2.418 3.312 5.522 3.312 9.31 0 3.774-1.097 6.884-3.291 9.33-2.195 2.446-4.977 3.67-8.345 3.67a22.5 22.5 0 01-1.384-.043zm1.195-21.03c-1.803 0-3.218.727-4.246 2.18-1.027 1.455-1.54 3.474-1.54 6.06 0 2.586.516 4.613 1.55 6.08 1.035 1.468 2.447 2.202 4.236 2.202 1.803 0 3.222-.73 4.256-2.19 1.035-1.461 1.552-3.492 1.552-6.092 0-2.586-.514-4.605-1.541-6.06-1.028-1.453-2.45-2.18-4.267-2.18z\"/></svg>"
},
"$:/core/images/mono-line": {
"title": "$:/core/images/mono-line",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-mono-line tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M60.437 84.523h.908c1.922 0 3.381.489 4.378 1.468.997.979 1.495 2.411 1.495 4.298 0 2.1-.525 3.612-1.575 4.538-1.05.925-2.785 1.388-5.206 1.388h-16.07c-2.456 0-4.2-.454-5.232-1.361-1.032-.908-1.548-2.43-1.548-4.565 0-2.065.516-3.542 1.548-4.432 1.032-.89 2.776-1.334 5.232-1.334h1.869l-2.19-6.247H20.983l-2.296 6.247h1.87c2.42 0 4.155.453 5.205 1.361 1.05.908 1.575 2.376 1.575 4.405 0 2.1-.525 3.612-1.575 4.538-1.05.925-2.785 1.388-5.206 1.388H6.781c-2.456 0-4.2-.463-5.233-1.388C.516 93.9 0 92.389 0 90.289c0-1.887.498-3.32 1.495-4.298.997-.979 2.456-1.468 4.378-1.468h.908l14.308-39.83h-4.271c-2.42 0-4.156-.462-5.206-1.387-1.05-.926-1.575-2.42-1.575-4.485 0-2.1.525-3.613 1.575-4.538 1.05-.926 2.785-1.388 5.206-1.388h20.021c3.168 0 5.392 1.708 6.674 5.125v.16l16.924 46.343zm-27.976-39.83L24.72 67.225h15.483l-7.742-22.53zM89.506 68.56v16.284h8.008c5.66 0 9.646-.623 11.96-1.869 2.313-1.245 3.47-3.328 3.47-6.246 0-2.955-1.103-5.055-3.31-6.3-2.207-1.246-6.069-1.869-11.586-1.869h-8.542zm27.229-5.926c3.88 1.423 6.727 3.372 8.542 5.846 1.815 2.474 2.723 5.633 2.723 9.477 0 3.239-.783 6.193-2.35 8.862-1.565 2.67-3.808 4.859-6.726 6.567-1.709.997-3.622 1.718-5.74 2.163-2.118.445-5.116.667-8.996.667h-27.87c-2.349 0-4.03-.463-5.045-1.388-1.014-.926-1.521-2.438-1.521-4.538 0-1.887.48-3.32 1.441-4.298.961-.979 2.367-1.468 4.218-1.468h.907v-39.83h-.907c-1.851 0-3.257-.498-4.218-1.494-.961-.997-1.441-2.456-1.441-4.378 0-2.065.516-3.568 1.548-4.512 1.032-.943 2.705-1.414 5.018-1.414h24.56c7.51 0 13.214 1.459 17.111 4.377 3.898 2.92 5.847 7.19 5.847 12.814 0 2.776-.597 5.223-1.789 7.341-1.192 2.118-2.963 3.853-5.312 5.206zm-27.23-18.26v13.455h7.208c4.378 0 7.466-.516 9.264-1.549 1.797-1.032 2.696-2.776 2.696-5.232 0-2.313-.81-4.004-2.43-5.072-1.619-1.068-4.244-1.602-7.874-1.602h-8.863z\"/></svg>"
},
"$:/core/images/new-button": {
"title": "$:/core/images/new-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M56 72H8.007C3.591 72 0 68.418 0 64c0-4.41 3.585-8 8.007-8H56V8.007C56 3.591 59.582 0 64 0c4.41 0 8 3.585 8 8.007V56h47.993c4.416 0 8.007 3.582 8.007 8 0 4.41-3.585 8-8.007 8H72v47.993c0 4.416-3.582 8.007-8 8.007-4.41 0-8-3.585-8-8.007V72z\"/></svg>"
},
"$:/core/images/new-here-button": {
"title": "$:/core/images/new-here-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-here-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M55.838 20.935l-3.572.938c-3.688.968-8.23 4.43-10.136 7.731L3.37 96.738c-1.905 3.3-.771 7.524 2.534 9.432l33.717 19.466c3.297 1.904 7.53.78 9.435-2.521l38.76-67.134c1.905-3.3 2.632-8.963 1.623-12.646L83.285 20.88c-1.009-3.68-4.821-5.884-8.513-4.915l-7.603 1.995.043.287c.524 3.394 2.053 7.498 4.18 11.55.418.163.829.36 1.23.59a8.864 8.864 0 014.438 8.169c.104.132.21.264.316.395l-.386.318a8.663 8.663 0 01-1.082 3.137c-2.42 4.192-7.816 5.608-12.051 3.163-4.12-2.379-5.624-7.534-3.476-11.671-2.177-4.394-3.788-8.874-4.543-12.964z\"/><path d=\"M69.554 44.76c-5.944-7.476-10.74-17.196-11.955-25.059-1.68-10.875 3.503-18.216 15.082-18.04 10.407.158 19.975 5.851 24.728 13.785 5.208 8.695 2.95 17.868-6.855 20.496l-2.037-7.601c4.232-1.134 4.999-4.248 2.24-8.853-3.37-5.626-10.465-9.848-18.146-9.965-6.392-.097-8.31 2.62-7.323 9.01.999 6.465 5.318 15.138 10.582 21.65l-.072.06c.559 1.553-4.17 6.44-5.938 4.888l-.005.004-.028-.034a1.323 1.323 0 01-.124-.135 2.618 2.618 0 01-.149-.205z\"/><rect width=\"16\" height=\"48\" x=\"96\" y=\"80\" rx=\"8\"/><rect width=\"48\" height=\"16\" x=\"80\" y=\"96\" rx=\"8\"/></g></svg>"
},
"$:/core/images/new-image-button": {
"title": "$:/core/images/new-image-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-image-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M81.362 73.627l15.826-27.41a2.626 2.626 0 00-.962-3.59l-50.01-28.872a2.626 2.626 0 00-3.588.961L30.058 36.49l10.04-5.261c3.042-1.595 6.771.114 7.55 3.46l3.607 17.702 9.88.85a5.25 5.25 0 014.571 3.77c.034.115.1.344.199.671.165.553.353 1.172.562 1.843.595 1.914 1.23 3.85 1.872 5.678.207.588.412 1.156.614 1.701.625 1.685 1.209 3.114 1.725 4.207.255.54.485.977.726 1.427.214.212.547.425 1.011.622 1.141.482 2.784.74 4.657.758.864.008 1.71-.034 2.492-.11.448-.043.753-.085.871-.104.315-.053.625-.077.927-.076zM37.47 2.649A5.257 5.257 0 0144.649.725l63.645 36.746a5.257 5.257 0 011.923 7.178L73.47 108.294a5.257 5.257 0 01-7.177 1.923L2.649 73.47a5.257 5.257 0 01-1.924-7.177L37.471 2.649zm42.837 50.49a5.25 5.25 0 105.25-9.092 5.25 5.25 0 00-5.25 9.093zM96 112h-7.993c-4.419 0-8.007-3.582-8.007-8 0-4.41 3.585-8 8.007-8H96v-7.993C96 83.588 99.582 80 104 80c4.41 0 8 3.585 8 8.007V96h7.993c4.419 0 8.007 3.582 8.007 8 0 4.41-3.585 8-8.007 8H112v7.993c0 4.419-3.582 8.007-8 8.007-4.41 0-8-3.585-8-8.007V112zM33.347 51.791c7.428 7.948 9.01 10.69 7.449 13.394-1.56 2.703-13.838-2.328-16.094 1.58-2.256 3.908-.907 3.258-2.437 5.908l19.73 11.39s-5.605-8.255-4.235-10.628c2.515-4.356 8.77-1.256 10.365-4.019 2.414-4.181-5.103-9.639-14.778-17.625z\"/></svg>"
},
"$:/core/images/new-journal-button": {
"title": "$:/core/images/new-journal-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-journal-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M102.545 112.818v11.818c0 1.306 1.086 2.364 2.425 2.364h6.06c1.34 0 2.425-1.058 2.425-2.364v-11.818h12.12c1.34 0 2.425-1.058 2.425-2.363v-5.91c0-1.305-1.085-2.363-2.424-2.363h-12.121V90.364c0-1.306-1.086-2.364-2.425-2.364h-6.06c-1.34 0-2.425 1.058-2.425 2.364v11.818h-12.12c-1.34 0-2.425 1.058-2.425 2.363v5.91c0 1.305 1.085 2.363 2.424 2.363h12.121zM60.016 4.965c-4.781-2.76-10.897-1.118-13.656 3.66L5.553 79.305A9.993 9.993 0 009.21 92.963l51.04 29.468c4.78 2.76 10.897 1.118 13.655-3.66l40.808-70.681a9.993 9.993 0 00-3.658-13.656L60.016 4.965zm-3.567 27.963a6 6 0 106-10.393 6 6 0 00-6 10.393zm31.697 17.928a6 6 0 106-10.392 6 6 0 00-6 10.392z\"/><text class=\"tc-fill-background\" font-family=\"Helvetica\" font-size=\"47.172\" font-weight=\"bold\" transform=\"rotate(30 25.742 95.82)\"><tspan x=\"42\" y=\"77.485\" text-anchor=\"middle\"><<now \"DD\">></tspan></text></g></svg>"
},
"$:/core/images/opacity": {
"title": "$:/core/images/opacity",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-opacity tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M102.362 65a51.595 51.595 0 01-1.942 6H82.584a35.867 35.867 0 002.997-6h16.78zm.472-2c.423-1.961.734-3.963.929-6H87.656a35.78 35.78 0 01-1.368 6h16.546zm-3.249 10a51.847 51.847 0 01-3.135 6H75.812a36.205 36.205 0 005.432-6h18.341zm-4.416 8c-1.424 2.116-3 4.12-4.71 6H60.46a35.843 35.843 0 0012.874-6h21.834zm-7.513-34h16.107C101.247 20.627 79.033 0 52 0 23.281 0 0 23.281 0 52c0 25.228 17.965 46.26 41.8 51h20.4a51.66 51.66 0 0015.875-6H39v-2h42.25a52.257 52.257 0 007.288-6H39v-2h4.539C27.739 83.194 16 68.968 16 52c0-19.882 16.118-36 36-36 18.186 0 33.222 13.484 35.656 31zm.22 2h16.039a52.823 52.823 0 010 6H87.877a36.483 36.483 0 000-6z\"/><path d=\"M76 128c28.719 0 52-23.281 52-52s-23.281-52-52-52-52 23.281-52 52 23.281 52 52 52zm0-16c19.882 0 36-16.118 36-36S95.882 40 76 40 40 56.118 40 76s16.118 36 36 36z\"/><path d=\"M37 58h53v4H37v-4zm3-8h53v4H40v-4zm0-8h53v4H40v-4zm-8 24h53v4H32v-4zm-2 8h53v4H30v-4zm-3 8h53v4H27v-4z\"/></g></svg>"
},
"$:/core/images/open-window": {
"title": "$:/core/images/open-window",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-open-window tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M16 112h88.994c3.87 0 7.006 3.59 7.006 8 0 4.418-3.142 8-7.006 8H7.006C3.136 128 0 124.41 0 120a9.321 9.321 0 010-.01V24.01C0 19.586 3.59 16 8 16c4.418 0 8 3.584 8 8.01V112z\"/><path d=\"M96 43.196V56a8 8 0 1016 0V24c0-4.41-3.585-8-8.007-8H72.007C67.588 16 64 19.582 64 24c0 4.41 3.585 8 8.007 8H84.57l-36.3 36.299a8 8 0 00-.001 11.316c3.117 3.117 8.19 3.123 11.316-.003L96 43.196zM32 7.999C32 3.581 35.588 0 40 0h80c4.419 0 8 3.588 8 8v80c0 4.419-3.588 8-8 8H40c-4.419 0-8-3.588-8-8V8z\"/></g></svg>"
},
"$:/core/images/options-button": {
"title": "$:/core/images/options-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-options-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M110.488 76a47.712 47.712 0 01-5.134 12.384l6.724 6.724c3.123 3.123 3.132 8.192.011 11.313l-5.668 5.668c-3.12 3.12-8.186 3.117-11.313-.01l-6.724-6.725c-3.82 2.258-7.98 4-12.384 5.134v9.505c0 4.417-3.578 8.007-7.992 8.007h-8.016C55.58 128 52 124.415 52 119.993v-9.505a47.712 47.712 0 01-12.384-5.134l-6.724 6.725c-3.123 3.122-8.192 3.131-11.313.01l-5.668-5.668c-3.12-3.12-3.116-8.186.01-11.313l6.725-6.724c-2.257-3.82-4-7.98-5.134-12.384H8.007C3.591 76 0 72.422 0 68.01v-8.017C0 55.58 3.585 52 8.007 52h9.505a47.712 47.712 0 015.134-12.383l-6.724-6.725c-3.123-3.122-3.132-8.191-.011-11.312l5.668-5.669c3.12-3.12 8.186-3.116 11.313.01l6.724 6.725c3.82-2.257 7.98-4 12.384-5.134V8.007C52 3.591 55.578 0 59.992 0h8.016C72.42 0 76 3.585 76 8.007v9.505a47.712 47.712 0 0112.384 5.134l6.724-6.724c3.123-3.123 8.192-3.132 11.313-.01l5.668 5.668c3.12 3.12 3.116 8.186-.01 11.312l-6.725 6.725c2.257 3.82 4 7.979 5.134 12.383h9.505c4.416 0 8.007 3.578 8.007 7.992v8.017c0 4.411-3.585 7.991-8.007 7.991h-9.505zM64 96c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32z\"/></svg>"
},
"$:/core/images/paint": {
"title": "$:/core/images/paint",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-paint tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M83.527 76.19C90.43 69.287 91.892 59 87.91 50.665l37.903-37.902c2.919-2.92 2.913-7.659 0-10.572a7.474 7.474 0 00-10.572 0L77.338 40.093c-8.335-3.982-18.622-2.521-25.526 4.383l31.715 31.715zm-2.643 2.644L49.169 47.119S8.506 81.243 0 80.282c0 0 3.782 5.592 6.827 8.039 14.024-5.69 37.326-24.6 37.326-24.6l.661.66S19.45 90.222 9.18 92.047c1.222 1.44 4.354 4.053 6.247 5.776 5.417-1.488 34.733-28.57 34.733-28.57l.661.66-32.407 31.022 5.285 5.286L56.106 75.2l.662.66s-27.864 30.536-28.684 32.432c0 0 6.032 6.853 7.569 7.824.702-2.836 27.884-33.485 27.884-33.485l.661.66s-20.597 23.755-24.964 36.732c3.21 3.549 7.5 5.137 10.926 6.298-2.19-11.817 30.724-47.487 30.724-47.487z\"/></svg>"
},
"$:/core/images/palette": {
"title": "$:/core/images/palette",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-palette tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M80.247 39.182a93.52 93.52 0 00-16.228-1.4C28.662 37.781 0 57.131 0 81.002c0 9.642 4.676 18.546 12.58 25.735C23.504 91.19 26.34 72.395 36.89 63.562c15.183-12.713 26.538-7.828 26.538-7.828l16.82-16.552zm26.535 9.655c13.049 7.913 21.257 19.392 21.257 32.166 0 9.35.519 17.411-11.874 25.08-10.797 6.681-3.824-6.536-11.844-10.898s-19.946 1.308-18.213 7.906c3.2 12.181 19.422 11.455 6.314 16.658-13.107 5.202-18.202 4.476-28.403 4.476-7.821 0-15.315-.947-22.243-2.68 9.844-4.197 27.88-12.539 33.354-19.456C82.788 92.409 87.37 80 83.324 72.484c-.194-.359 11.215-11.668 23.458-23.647zM1.134 123.867l-.66.002c33.479-14.94 22.161-64.226 58.818-64.226.317 1.418.644 2.944 1.062 4.494-25.907-4.166-23.567 48.031-59.22 59.73zm.713-.007c38.872-.506 78.152-22.347 78.152-44.813-9.27 0-14.073-3.48-16.816-7.942-16.597-7.003-30.365 45.715-61.336 52.755zm65.351-64.008c-4.45 4.115 4.886 16.433 11.318 11.318l45.27-45.27c11.317-11.318 0-22.635-11.318-11.318-11.317 11.318-33.518 34.405-45.27 45.27z\"/></svg>"
},
"$:/core/images/permalink-button": {
"title": "$:/core/images/permalink-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-permalink-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M80.483 48l-7.387 32h-25.58l7.388-32h25.58zm3.694-16l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L100.598 32h3.403c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8h-7.096l-7.387 32H104c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H85.824l-5.624 24.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L69.402 96h-25.58L38.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L27.402 96h-3.403C19.59 96 16 92.418 16 88c0-4.41 3.581-8 8-8h7.096l7.387-32H24C19.59 48 16 44.418 16 40c0-4.41 3.581-8 8-8h18.177l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L58.598 32h25.58z\"/></svg>"
},
"$:/core/images/permaview-button": {
"title": "$:/core/images/permaview-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-permaview-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M81.483 48l-1.846 8h-5.58l1.847-8h5.58zm3.694-16l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L101.598 32h2.403c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8h-6.096l-1.847 8h7.944c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H92.364l-1.846 8H104c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H86.824l-5.624 24.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L70.402 96h-5.58L59.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L48.402 96h-5.58L37.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L26.402 96h-2.403C19.59 96 16 92.418 16 88c0-4.41 3.581-8 8-8h6.096l1.847-8h-7.944C19.59 72 16 68.418 16 64c0-4.41 3.581-8 8-8h11.637l1.846-8H24C19.59 48 16 44.418 16 40c0-4.41 3.581-8 8-8h17.177l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L57.598 32h5.58L68.8 7.642c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L79.598 32h5.58zM53.904 48l-1.847 8h5.58l1.846-8h-5.579zm22.039 24l-1.847 8h-5.58l1.847-8h5.58zm-27.58 0l-1.846 8h5.579l1.847-8h-5.58z\"/></svg>"
},
"$:/core/images/picture": {
"title": "$:/core/images/picture",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-picture tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M112 68.233v-48.23A4.001 4.001 0 00107.997 16H20.003A4.001 4.001 0 0016 20.003v38.31l9.241-14.593c2.8-4.422 9.023-5.008 12.6-1.186l18.247 20.613 13.687-6.407a8 8 0 018.903 1.492 264.97 264.97 0 002.92 2.739 249.44 249.44 0 006.798 6.066 166.5 166.5 0 002.106 1.778c2.108 1.747 3.967 3.188 5.482 4.237.748.518 1.383.92 2.044 1.33.444.117 1.046.144 1.809.05 1.873-.233 4.238-1.144 6.723-2.547a36.016 36.016 0 003.205-2.044c.558-.4.93-.686 1.07-.802.376-.31.765-.577 1.165-.806zM0 8.007A8.01 8.01 0 018.007 0h111.986A8.01 8.01 0 01128 8.007v111.986a8.01 8.01 0 01-8.007 8.007H8.007A8.01 8.01 0 010 119.993V8.007zM95 42a8 8 0 100-16 8 8 0 000 16zM32 76c15.859 4.83 20.035 7.244 20.035 12S32 95.471 32 102.347c0 6.876 1.285 4.99 1.285 9.653H68s-13.685-6.625-13.685-10.8c0-7.665 10.615-8.34 10.615-13.2 0-7.357-14.078-8.833-32.93-12z\"/></svg>"
},
"$:/core/images/plugin-generic-language": {
"title": "$:/core/images/plugin-generic-language",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M61.207 68.137c-4.324 2.795-6.999 6.656-6.999 10.921 0 7.906 9.19 14.424 21.042 15.336 2.162 3.902 8.598 6.785 16.318 7.01-5.126-1.125-9.117-3.742-10.62-7.01C92.805 93.487 102 86.967 102 79.059c0-8.53-10.699-15.445-23.896-15.445-6.599 0-12.572 1.729-16.897 4.524zm12.794-14.158c-4.324 2.795-10.298 4.524-16.897 4.524-2.619 0-5.14-.272-7.497-.775-3.312 2.25-8.383 3.69-14.067 3.69l-.255-.002c4.119-.892 7.511-2.747 9.478-5.13-6.925-2.704-11.555-7.617-11.555-13.228 0-8.53 10.699-15.445 23.896-15.445C70.301 27.613 81 34.528 81 43.058c0 4.265-2.675 8.126-6.999 10.921zM64 0l54.56 32v64L64 128 9.44 96V32L64 0z\"/></svg>"
},
"$:/core/images/plugin-generic-plugin": {
"title": "$:/core/images/plugin-generic-plugin",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M40.397 76.446V95.34h14.12l-.001-.005a6.912 6.912 0 005.364-11.593l.046-.023a6.912 6.912 0 119.979.526l.086.055a6.914 6.914 0 004.408 10.948l-.023.092h21.32V75.568l-.15.038a6.912 6.912 0 00-11.593-5.364l-.022-.046a6.912 6.912 0 11.526-9.979l.055-.086a6.914 6.914 0 0010.948-4.408c.079.018.158.038.236.059v-15.74h-21.32l.023-.094a6.914 6.914 0 01-4.408-10.947 10.23 10.23 0 00-.086-.055 6.912 6.912 0 10-9.979-.526l-.046.023a6.912 6.912 0 01-5.364 11.593l.001.005h-14.12v12.847A6.912 6.912 0 0129.5 59.843l-.054.086a6.912 6.912 0 10-.526 9.979l.023.046a6.912 6.912 0 0111.455 6.492zM64 0l54.56 32v64L64 128 9.44 96V32L64 0z\"/></svg>"
},
"$:/core/images/plugin-generic-theme": {
"title": "$:/core/images/plugin-generic-theme",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M29.408 91.472L51.469 69.41l-.004-.005a2.22 2.22 0 01.004-3.146c.87-.87 2.281-.872 3.147-.005l9.465 9.464a2.22 2.22 0 01-.005 3.147c-.87.87-2.28.871-3.147.005l-.005-.005-22.061 22.062a6.686 6.686 0 11-9.455-9.455zM60.802 66.38c-2.436-2.704-4.465-5.091-5.817-6.869-6.855-9.014-10.313-4.268-14.226 0-3.913 4.268 1.03 7.726-2.683 10.741-3.713 3.015-3.484 4.06-9.752-1.455-6.267-5.516-6.7-7.034-3.823-10.181 2.877-3.147 5.281 1.808 11.159-3.785 5.877-5.593.94-10.55.94-10.55s12.237-25.014 28.588-23.167c16.351 1.848-6.186-2.392-11.792 17.226-2.4 8.4.447 6.42 4.998 9.968 1.394 1.086 6.03 4.401 11.794 8.685l20.677-20.676 1.615-4.766 7.84-4.689 3.151 3.152-4.688 7.84-4.766 1.615-20.224 20.223c12.663 9.547 28.312 22.146 28.312 26.709 0 7.217-3.071 11.526-9.535 9.164-4.693-1.715-18.768-15.192-28.753-25.897l-2.893 2.893-3.151-3.152 3.029-3.029zM63.953 0l54.56 32v64l-54.56 32-54.56-32V32l54.56-32z\"/></svg>"
},
"$:/core/images/preview-closed": {
"title": "$:/core/images/preview-closed",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-preview-closed tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M.088 64a7.144 7.144 0 001.378 5.458C16.246 88.818 39.17 100.414 64 100.414c24.83 0 47.753-11.596 62.534-30.956A7.144 7.144 0 00127.912 64C110.582 78.416 88.304 87.086 64 87.086 39.696 87.086 17.418 78.416.088 64z\"/><rect width=\"4\" height=\"16\" x=\"62\" y=\"96\" rx=\"4\"/><rect width=\"4\" height=\"16\" x=\"78\" y=\"93\" rx=\"4\" transform=\"rotate(-5 80 101)\"/><rect width=\"4\" height=\"16\" x=\"46\" y=\"93\" rx=\"4\" transform=\"rotate(5 48 101)\"/><rect width=\"4\" height=\"16\" x=\"30\" y=\"88\" rx=\"4\" transform=\"rotate(10 32 96)\"/><rect width=\"4\" height=\"16\" x=\"94\" y=\"88\" rx=\"4\" transform=\"rotate(-10 96 96)\"/><rect width=\"4\" height=\"16\" x=\"110\" y=\"80\" rx=\"4\" transform=\"rotate(-20 112 88)\"/><rect width=\"4\" height=\"16\" x=\"14\" y=\"80\" rx=\"4\" transform=\"rotate(20 16 88)\"/></g></svg>"
},
"$:/core/images/preview-open": {
"title": "$:/core/images/preview-open",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-preview-open tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M64.11 99.588c-24.83 0-47.754-11.596-62.534-30.957a7.148 7.148 0 010-8.675C16.356 40.596 39.28 29 64.11 29c24.83 0 47.753 11.596 62.534 30.956a7.148 7.148 0 010 8.675c-14.78 19.36-37.703 30.957-62.534 30.957zm46.104-32.007c1.44-1.524 1.44-3.638 0-5.162C99.326 50.9 82.439 44 64.147 44S28.968 50.9 18.08 62.42c-1.44 1.523-1.44 3.637 0 5.16C28.968 79.1 45.855 86 64.147 86s35.179-6.9 46.067-18.42z\"/><path d=\"M63.5 88C76.479 88 87 77.479 87 64.5S76.479 41 63.5 41 40 51.521 40 64.5 50.521 88 63.5 88z\"/></g></svg>"
},
"$:/core/images/print-button": {
"title": "$:/core/images/print-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-print-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M112 71V30.5h-.032c-.035-2-.816-3.99-2.343-5.516L86.998 2.357A7.978 7.978 0 0081 .02V0H24a8 8 0 00-8 8v63h8V8h57v14.5c0 4.422 3.582 8 8 8h15V71h8z\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"36\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"52\" rx=\"4\"/><rect width=\"40\" height=\"8\" x=\"32\" y=\"20\" rx=\"4\"/><path d=\"M0 80.005C0 71.165 7.156 64 16 64h96c8.836 0 16 7.155 16 16.005v31.99c0 8.84-7.156 16.005-16 16.005H16c-8.836 0-16-7.155-16-16.005v-31.99zM104 96a8 8 0 100-16 8 8 0 000 16z\"/></g></svg>"
},
"$:/core/images/quote": {
"title": "$:/core/images/quote",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-quote tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M51.219 117.713V62.199H27.427c0-8.891 1.683-16.401 5.047-22.53 3.365-6.127 9.613-10.754 18.745-13.878V2c-7.45.961-14.36 3.184-20.728 6.669-6.368 3.484-11.835 7.87-16.401 13.157C9.524 27.113 5.98 33.241 3.456 40.21.933 47.18-.21 54.63.03 62.56v55.153H51.22zm76.781 0V62.199h-23.791c0-8.891 1.682-16.401 5.046-22.53 3.365-6.127 9.613-10.754 18.745-13.878V2c-7.45.961-14.359 3.184-20.727 6.669-6.369 3.484-11.836 7.87-16.402 13.157-4.566 5.287-8.11 11.415-10.634 18.384-2.523 6.97-3.665 14.42-3.424 22.35v55.153H128z\"/></svg>"
},
"$:/core/images/refresh-button": {
"title": "$:/core/images/refresh-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-refresh-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M106.369 39.433c10.16 20.879 6.57 46.764-10.771 64.106-21.87 21.87-57.327 21.87-79.196 0-21.87-21.87-21.87-57.326 0-79.196a8 8 0 1111.314 11.314c-15.621 15.62-15.621 40.947 0 56.568 15.62 15.621 40.947 15.621 56.568 0C97.72 78.79 99.6 58.175 89.924 42.73l-6.44 12.264a8 8 0 11-14.166-7.437L84.435 18.76a8 8 0 0110.838-3.345l28.873 15.345a8 8 0 11-7.51 14.129l-10.267-5.457zm-8.222-12.368c-.167-.19-.336-.38-.506-.57l.96-.296-.454.866z\"/></svg>"
},
"$:/core/images/right-arrow": {
"title": "$:/core/images/right-arrow",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-right-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M99.069 64.173c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l50.382-50.382-50.382-50.382a7.92 7.92 0 010-11.195c3.086-3.085 8.104-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.316 5.595z\"/></svg>"
},
"$:/core/images/rotate-left": {
"title": "$:/core/images/rotate-left",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-rotate-left tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"32\" height=\"80\" rx=\"8\"/><rect width=\"80\" height=\"32\" x=\"48\" y=\"96\" rx=\"8\"/><path d=\"M61.32 36.65c19.743 2.45 35.023 19.287 35.023 39.693a4 4 0 01-8 0c0-15.663-11.254-28.698-26.117-31.46l3.916 3.916a4 4 0 11-5.657 5.657L49.172 43.142a4 4 0 010-5.657l11.313-11.313a4 4 0 115.657 5.656l-4.821 4.822z\"/></g></svg>"
},
"$:/core/images/save-button": {
"title": "$:/core/images/save-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-save-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M120.783 34.33c4.641 8.862 7.266 18.948 7.266 29.646 0 35.347-28.653 64-64 64-35.346 0-64-28.653-64-64 0-35.346 28.654-64 64-64 18.808 0 35.72 8.113 47.43 21.03l2.68-2.68c3.13-3.13 8.197-3.132 11.321-.008 3.118 3.118 3.121 8.193-.007 11.32l-4.69 4.691zm-12.058 12.058a47.876 47.876 0 013.324 17.588c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48c14.39 0 27.3 6.332 36.098 16.362L58.941 73.544 41.976 56.578c-3.127-3.127-8.201-3.123-11.32-.005-3.123 3.124-3.119 8.194.006 11.319l22.617 22.617a7.992 7.992 0 005.659 2.347c2.05 0 4.101-.783 5.667-2.349l44.12-44.12z\"/></svg>"
},
"$:/core/images/size": {
"title": "$:/core/images/size",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-size tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M92.343 26l-9.171 9.172a4 4 0 105.656 5.656l16-16a4 4 0 000-5.656l-16-16a4 4 0 10-5.656 5.656L92.343 18H22a4 4 0 00-4 4v70.343l-9.172-9.171a4 4 0 10-5.656 5.656l16 16a4 4 0 005.656 0l16-16a4 4 0 10-5.656-5.656L26 92.343V22l-4 4h70.343zM112 52v64l4-4H52a4 4 0 100 8h64a4 4 0 004-4V52a4 4 0 10-8 0z\"/></svg>"
},
"$:/core/images/spiral": {
"title": "$:/core/images/spiral",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-spiral tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M64.534 68.348c3.39 0 6.097-2.62 6.476-5.968l-4.755-.538 4.75.583c.377-3.07-1.194-6.054-3.89-7.78-2.757-1.773-6.34-2.01-9.566-.7-3.46 1.403-6.14 4.392-7.35 8.148l-.01.026c-1.3 4.08-.72 8.64 1.58 12.52 2.5 4.2 6.77 7.2 11.76 8.27 5.37 1.15 11.11-.05 15.83-3.31 5.04-3.51 8.46-9.02 9.45-15.3 1.05-6.7-.72-13.63-4.92-19.19l.02.02c-4.42-5.93-11.2-9.82-18.78-10.78-7.96-1.01-16.13 1.31-22.59 6.43-6.81 5.39-11.18 13.41-12.11 22.26-.98 9.27 1.87 18.65 7.93 26.02 6.32 7.69 15.6 12.56 25.74 13.48 10.54.96 21.15-2.42 29.45-9.4l.01-.01c8.58-7.25 13.94-17.78 14.86-29.21.94-11.84-2.96-23.69-10.86-32.9-8.19-9.5-19.95-15.36-32.69-16.27-13.16-.94-26.24 3.49-36.34 12.34l.01-.01c-10.41 9.08-16.78 22.1-17.68 36.15-.93 14.44 4.03 28.77 13.79 39.78 10.03 11.32 24.28 18.2 39.6 19.09 15.73.92 31.31-4.56 43.24-15.234 12.23-10.954 19.61-26.44 20.5-43.074a4.785 4.785 0 00-4.52-5.03 4.778 4.778 0 00-5.03 4.52c-.75 14.1-7 27.2-17.33 36.45-10.03 8.98-23.11 13.58-36.3 12.81-12.79-.75-24.67-6.48-33-15.89-8.07-9.11-12.17-20.94-11.41-32.827.74-11.52 5.942-22.15 14.43-29.54l.01-.01c8.18-7.17 18.74-10.75 29.35-9.998 10.21.726 19.6 5.41 26.11 12.96 6.24 7.273 9.32 16.61 8.573 25.894-.718 8.9-4.88 17.064-11.504 22.66l.01-.007c-6.36 5.342-14.44 7.92-22.425 7.19-7.604-.68-14.52-4.314-19.21-10.027-4.44-5.4-6.517-12.23-5.806-18.94.67-6.3 3.76-11.977 8.54-15.766 4.46-3.54 10.05-5.128 15.44-4.44 5.03.63 9.46 3.18 12.32 7.01l.02.024c2.65 3.5 3.75 7.814 3.1 11.92-.59 3.71-2.58 6.925-5.45 8.924-2.56 1.767-5.61 2.403-8.38 1.81-2.42-.516-4.42-1.92-5.53-3.79-.93-1.56-1.15-3.3-.69-4.75l-4.56-1.446L59.325 65c.36-1.12 1.068-1.905 1.84-2.22.25-.103.48-.14.668-.13.06.006.11.015.14.025.01 0 .01 0-.01-.01a1.047 1.047 0 01-.264-.332c-.15-.29-.23-.678-.18-1.11l-.005.04c.15-1.332 1.38-2.523 3.035-2.523-2.65 0-4.79 2.144-4.79 4.787s2.14 4.785 4.78 4.785z\"/></svg>"
},
"$:/core/images/stamp": {
"title": "$:/core/images/stamp",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-stamp tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M49.733 64H16.01C11.584 64 8 67.583 8 72.003V97h112V72.003A8 8 0 00111.99 64H78.267A22.813 22.813 0 0175.5 53.077c0-6.475 2.687-12.324 7.009-16.497A22.818 22.818 0 0087 22.952C87 10.276 76.703 0 64 0S41 10.276 41 22.952c0 5.103 1.669 9.817 4.491 13.628 4.322 4.173 7.009 10.022 7.009 16.497 0 3.954-1.002 7.675-2.767 10.923zM8 104h112v8H8v-8z\"/></svg>"
},
"$:/core/images/star-filled": {
"title": "$:/core/images/star-filled",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-star-filled tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M61.836 96.823l37.327 27.287c2.72 1.99 6.379-.69 5.343-3.912L90.29 75.988l-1.26 3.91 37.285-27.345c2.718-1.993 1.32-6.327-2.041-6.33l-46.113-.036 3.3 2.416L67.176 4.416c-1.04-3.221-5.563-3.221-6.604 0L46.29 48.603l3.3-2.416-46.113.036c-3.362.003-4.759 4.337-2.04 6.33L38.72 79.898l-1.26-3.91-14.216 44.21c-1.036 3.223 2.622 5.901 5.343 3.912l37.326-27.287h-4.078z\"/></svg>"
},
"$:/core/images/storyview-classic": {
"title": "$:/core/images/storyview-classic",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-storyview-classic tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16C19.581 16 16 19.578 16 23.992v16.016C16 44.422 19.588 48 24 48h80c4.419 0 8-3.578 8-7.992V23.992c0-4.414-3.588-7.992-8-7.992H24zm0 48C19.581 64 16 67.59 16 72c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24zm0 32C19.581 96 16 99.59 16 104c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24z\"/></svg>"
},
"$:/core/images/storyview-pop": {
"title": "$:/core/images/storyview-pop",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-storyview-pop tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16C19.581 16 16 19.578 16 23.992v16.016C16 44.422 19.588 48 24 48h80c4.419 0 8-3.578 8-7.992V23.992c0-4.414-3.588-7.992-8-7.992H24zm-7.99 40C11.587 56 8 59.578 8 63.992v16.016C8 84.422 11.584 88 16.01 88h95.98c4.424 0 8.01-3.578 8.01-7.992V63.992c0-4.414-3.584-7.992-8.01-7.992H16.01zM24 96C19.581 96 16 99.59 16 104c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24zm0-32C19.581 64 16 67.59 16 72c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24z\"/></svg>"
},
"$:/core/images/storyview-zoomin": {
"title": "$:/core/images/storyview-zoomin",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-storyview-zoomin tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16A8 8 0 0016 24.009V71.99C16 76.414 19.588 80 24 80h80a8 8 0 008-8.009V24.01c0-4.423-3.588-8.009-8-8.009H24z\"/></svg>"
},
"$:/core/images/strikethrough": {
"title": "$:/core/images/strikethrough",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-strikethrough tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M92.794 38.726h15.422c-.229-6.74-1.514-12.538-3.856-17.393-2.342-4.855-5.54-8.881-9.596-12.08-4.055-3.199-8.767-5.54-14.136-7.025C75.258.743 69.433 0 63.15 0a62.76 62.76 0 00-16.364 2.142C41.474 3.57 36.733 5.74 32.564 8.653c-4.17 2.913-7.511 6.626-10.025 11.138-2.513 4.512-3.77 9.853-3.77 16.022 0 5.597 1.115 10.252 3.342 13.965 2.228 3.712 5.198 6.74 8.91 9.081 3.713 2.342 7.911 4.227 12.595 5.655a194.641 194.641 0 0014.308 3.77c4.855 1.085 9.624 2.142 14.308 3.17 4.683 1.028 8.881 2.37 12.594 4.027 3.713 1.656 6.683 3.798 8.91 6.425 2.228 2.628 3.342 6.055 3.342 10.281 0 4.456-.914 8.111-2.742 10.967a19.953 19.953 0 01-7.197 6.768c-2.97 1.657-6.311 2.828-10.024 3.513a60.771 60.771 0 01-11.052 1.028c-4.57 0-9.025-.571-13.366-1.713-4.34-1.143-8.139-2.913-11.394-5.312-3.256-2.4-5.884-5.455-7.883-9.168-1.999-3.712-2.998-8.139-2.998-13.28H15c0 7.426 1.342 13.852 4.027 19.278 2.684 5.426 6.34 9.881 10.966 13.365 4.627 3.484 9.996 6.083 16.107 7.797 6.112 1.713 12.595 2.57 19.449 2.57 5.597 0 11.223-.657 16.878-1.97 5.655-1.314 10.767-3.428 15.336-6.34 4.57-2.914 8.31-6.683 11.224-11.31 2.913-4.626 4.37-10.195 4.37-16.707 0-6.054-1.115-11.08-3.342-15.079-2.228-3.998-5.198-7.31-8.91-9.938-3.713-2.627-7.911-4.712-12.595-6.254a170.83 170.83 0 00-14.308-4.027 549.669 549.669 0 00-14.308-3.17c-4.683-.971-8.881-2.2-12.594-3.684-3.713-1.485-6.683-3.399-8.91-5.74-2.228-2.342-3.342-5.398-3.342-9.168 0-3.998.771-7.34 2.313-10.024 1.543-2.685 3.599-4.826 6.17-6.426 2.57-1.599 5.51-2.741 8.824-3.427a49.767 49.767 0 0110.11-1.028c8.453 0 15.393 1.97 20.819 5.912 5.426 3.94 8.596 10.31 9.51 19.106z\"/><path d=\"M5 54h118v16H5z\"/></g></svg>"
},
"$:/core/images/subscript": {
"title": "$:/core/images/subscript",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-subscript tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M2.272 16h19.91l21.649 33.675L66.414 16h18.708L53.585 61.969l33.809 49.443H67.082L43.296 74.93l-24.187 36.48H0L33.808 61.97 2.272 16zM127.91 128.412H85.328c.059-5.168 1.306-9.681 3.741-13.542 2.435-3.86 5.761-7.216 9.978-10.066a112.388 112.388 0 016.325-4.321 50.09 50.09 0 006.058-4.499c1.841-1.603 3.356-3.34 4.543-5.211 1.188-1.871 1.812-4.024 1.871-6.46 0-1.128-.133-2.33-.4-3.607a9.545 9.545 0 00-1.56-3.564c-.772-1.098-1.84-2.019-3.207-2.761-1.366-.743-3.148-1.114-5.345-1.114-2.02 0-3.697.4-5.033 1.203-1.337.801-2.406 1.9-3.208 3.296-.801 1.396-1.395 3.044-1.781 4.944-.386 1.9-.609 3.95-.668 6.147H86.486c0-3.445.46-6.637 1.38-9.577.921-2.94 2.302-5.478 4.143-7.617 1.841-2.138 4.083-3.815 6.726-5.033 2.643-1.217 5.716-1.826 9.22-1.826 3.802 0 6.979.623 9.533 1.87 2.554 1.248 4.617 2.822 6.191 4.722 1.574 1.9 2.688 3.965 3.341 6.192.653 2.227.98 4.35.98 6.37 0 2.494-.386 4.75-1.158 6.77a21.803 21.803 0 01-3.118 5.568 31.516 31.516 0 01-4.454 4.677 66.788 66.788 0 01-5.167 4.009 139.198 139.198 0 01-5.346 3.563 79.237 79.237 0 00-4.944 3.386c-1.514 1.128-2.836 2.3-3.964 3.518-1.129 1.218-1.9 2.51-2.317 3.876h30.379v9.087z\"/></svg>"
},
"$:/core/images/superscript": {
"title": "$:/core/images/superscript",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-superscript tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M2.272 16h19.91l21.649 33.675L66.414 16h18.708L53.585 61.969l33.809 49.443H67.082L43.296 74.93l-24.187 36.48H0L33.808 61.97 2.272 16zM127.91 63.412H85.328c.059-5.168 1.306-9.681 3.741-13.542 2.435-3.86 5.761-7.216 9.978-10.066a112.388 112.388 0 016.325-4.321 50.09 50.09 0 006.058-4.499c1.841-1.603 3.356-3.34 4.543-5.211 1.188-1.871 1.812-4.024 1.871-6.46 0-1.128-.133-2.33-.4-3.607a9.545 9.545 0 00-1.56-3.564c-.772-1.098-1.84-2.019-3.207-2.761-1.366-.743-3.148-1.114-5.345-1.114-2.02 0-3.697.4-5.033 1.203-1.337.801-2.406 1.9-3.208 3.296-.801 1.396-1.395 3.044-1.781 4.944-.386 1.9-.609 3.95-.668 6.147H86.486c0-3.445.46-6.637 1.38-9.577.921-2.94 2.302-5.478 4.143-7.617 1.841-2.138 4.083-3.815 6.726-5.033 2.643-1.217 5.716-1.826 9.22-1.826 3.802 0 6.979.623 9.533 1.87 2.554 1.248 4.617 2.822 6.191 4.722 1.574 1.9 2.688 3.965 3.341 6.192.653 2.227.98 4.35.98 6.37 0 2.494-.386 4.75-1.158 6.77a21.803 21.803 0 01-3.118 5.568 31.516 31.516 0 01-4.454 4.677 66.788 66.788 0 01-5.167 4.009 139.198 139.198 0 01-5.346 3.563 79.237 79.237 0 00-4.944 3.386c-1.514 1.128-2.836 2.3-3.964 3.518-1.129 1.218-1.9 2.51-2.317 3.876h30.379v9.087z\"/></svg>"
},
"$:/core/images/tag-button": {
"title": "$:/core/images/tag-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-tag-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M18.164 47.66l.004 4.105c.003 3.823 2.19 9.097 4.885 11.792l61.85 61.85c2.697 2.697 7.068 2.69 9.769-.01L125.767 94.3a6.903 6.903 0 00.01-9.77L63.928 22.683c-2.697-2.697-7.976-4.88-11.796-4.881l-27.076-.007a6.902 6.902 0 00-6.91 6.91l.008 9.96.287.033c3.73.411 8.489-.044 13.365-1.153a9.702 9.702 0 0111.14-3.662l.291-.13.128.285a9.7 9.7 0 013.3 2.17c3.796 3.796 3.801 9.945.012 13.734-3.618 3.618-9.386 3.777-13.204.482-5.365 1.122-10.674 1.596-15.309 1.237z\"/><path d=\"M47.633 39.532l.023.051c-9.689 4.356-21.584 6.799-30.396 5.828C5.273 44.089-1.028 36.43 2.443 24.078 5.562 12.976 14.3 4.361 24.047 1.548c10.68-3.083 19.749 1.968 19.749 13.225h-8.623c0-4.859-3.078-6.573-8.735-4.94-6.91 1.995-13.392 8.383-15.694 16.577-1.915 6.818.417 9.653 7.46 10.43 7.126.785 17.531-1.352 25.917-5.121l.027.06.036-.017c1.76-.758 6.266 6.549 3.524 7.74a2.8 2.8 0 01-.075.03z\"/></g></svg>"
},
"$:/core/images/theme-button": {
"title": "$:/core/images/theme-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-theme-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M55.854 66.945a122.626 122.626 0 01-3.9-4.819c-11.064-14.548-16.645-6.888-22.96 0-6.315 6.888 1.664 12.47-4.33 17.335-5.993 4.866-5.623 6.552-15.737-2.35-10.115-8.9-10.815-11.351-6.172-16.43 4.644-5.08 8.524 2.918 18.01-6.108 9.485-9.026 1.517-17.026 1.517-17.026S42.03-2.824 68.42.157c26.39 2.982-9.984-3.86-19.031 27.801-3.874 13.556.72 10.362 8.066 16.087 1.707 1.33 6.428 4.732 12.671 9.318-6.129 5.879-11.157 10.669-14.273 13.582zm11.641 12.947c16.013 17.036 37.742 37.726 45.117 40.42 10.432 3.813 15.388-3.141 15.388-14.79 0-7.151-23.83-26.542-43.924-41.769-7.408 7.156-13.376 12.953-16.58 16.139z\"/><path d=\"M11.069 109.828L46.31 74.587a3.56 3.56 0 115.037-5.032l15.098 15.098a3.56 3.56 0 11-5.032 5.037l-35.24 35.241c-4.171 4.17-10.933 4.17-15.104 0-4.17-4.17-4.17-10.933 0-15.103zM124.344 6.622l5.034 5.034-7.49 12.524-7.613 2.58L61.413 79.62l-5.034-5.034 52.861-52.862 2.58-7.614 12.524-7.49z\"/></g></svg>"
},
"$:/core/images/timestamp-off": {
"title": "$:/core/images/timestamp-off",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-timestamp-off tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M58.25 11C26.08 11 0 37.082 0 69.25s26.08 58.25 58.25 58.25c32.175 0 58.25-26.082 58.25-58.25S90.425 11 58.25 11zm0 100.5C34.914 111.5 16 92.586 16 69.25 16 45.92 34.914 27 58.25 27s42.25 18.92 42.25 42.25c0 23.336-18.914 42.25-42.25 42.25zM49.704 10a5 5 0 010-10H66.69a5 5 0 015 5c.006 2.757-2.238 5-5 5H49.705z\"/><path d=\"M58.25 35.88c-18.777 0-33.998 15.224-33.998 33.998 0 18.773 15.22 34.002 33.998 34.002 18.784 0 34.002-15.23 34.002-34.002 0-18.774-15.218-33.998-34.002-33.998zm-3.03 50.123H44.196v-34H55.22v34zm16.976 0H61.17v-34h11.025v34z\"/></g></svg>"
},
"$:/core/images/timestamp-on": {
"title": "$:/core/images/timestamp-on",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-timestamp-on tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M58.25 11C26.08 11 0 37.082 0 69.25s26.08 58.25 58.25 58.25c32.175 0 58.25-26.082 58.25-58.25S90.425 11 58.25 11zm0 100.5C34.914 111.5 16 92.586 16 69.25 16 45.92 34.914 27 58.25 27s42.25 18.92 42.25 42.25c0 23.336-18.914 42.25-42.25 42.25zM49.704 10a5 5 0 010-10H66.69a5 5 0 015 5c.006 2.757-2.238 5-5 5H49.705z\"/><path d=\"M13.41 27.178a5.005 5.005 0 01-7.045-.613 5.008 5.008 0 01.616-7.047l9.95-8.348a5 5 0 016.429 7.661l-9.95 8.348zm89.573 0a5.005 5.005 0 007.045-.613 5.008 5.008 0 00-.616-7.047l-9.95-8.348a5 5 0 00-6.428 7.661l9.95 8.348zM65.097 71.072c0 3.826-3.09 6.928-6.897 6.928-3.804.006-6.9-3.102-6.903-6.928 0 0 4.76-39.072 6.903-39.072s6.897 39.072 6.897 39.072z\"/></g></svg>"
},
"$:/core/images/tip": {
"title": "$:/core/images/tip",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-tip tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 128.242c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64 0 35.346 28.654 64 64 64zm11.936-36.789c-.624 4.129-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349C54.33 94.05 58.824 95.82 64 95.82c5.175 0 9.67-1.769 11.936-4.366zm0 4.492c-.624 4.13-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zm0 4.456c-.624 4.129-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zm0 4.492c-.624 4.13-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zM64.3 24.242c11.618 0 23.699 7.82 23.699 24.2S75.92 71.754 75.92 83.576c0 5.873-5.868 9.26-11.92 9.26s-12.027-3.006-12.027-9.26C51.973 71.147 40 65.47 40 48.442s12.683-24.2 24.301-24.2z\"/></svg>"
},
"$:/core/images/transcludify": {
"title": "$:/core/images/transcludify",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-transcludify-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M0 59.482c.591 0 1.36-.089 2.306-.266a10.417 10.417 0 002.75-.932 6.762 6.762 0 002.306-1.907c.651-.828.976-1.863.976-3.104V35.709c0-2.01.414-3.74 1.242-5.19.828-1.448 1.833-2.66 3.016-3.636s2.425-1.7 3.726-2.173c1.3-.473 2.424-.71 3.37-.71h8.073v7.451h-4.88c-1.241 0-2.232.207-2.97.621-.74.414-1.302.932-1.686 1.552a4.909 4.909 0 00-.71 1.996c-.089.71-.133 1.39-.133 2.04v16.677c0 1.715-.325 3.134-.976 4.258-.65 1.123-1.434 2.025-2.35 2.705-.917.68-1.863 1.168-2.839 1.464-.976.296-1.818.473-2.528.532v.178c.71.059 1.552.207 2.528.443.976.237 1.922.68 2.839 1.33.916.651 1.7 1.583 2.35 2.795.65 1.212.976 2.853.976 4.923v16.144c0 .65.044 1.33.133 2.04.089.71.325 1.375.71 1.996.384.621.946 1.139 1.685 1.553.74.414 1.73.62 2.972.62h4.879v7.452h-8.073c-.946 0-2.07-.237-3.37-.71-1.301-.473-2.543-1.197-3.726-2.173-1.183-.976-2.188-2.188-3.016-3.637-.828-1.449-1.242-3.179-1.242-5.19V74.119c0-1.42-.325-2.572-.976-3.46-.65-.886-1.419-1.581-2.306-2.084a8.868 8.868 0 00-2.75-1.02C1.36 67.377.591 67.288 0 67.288v-7.806zm24.66 0c.591 0 1.36-.089 2.306-.266a10.417 10.417 0 002.75-.932 6.762 6.762 0 002.306-1.907c.65-.828.976-1.863.976-3.104V35.709c0-2.01.414-3.74 1.242-5.19.828-1.448 1.833-2.66 3.016-3.636s2.425-1.7 3.726-2.173c1.3-.473 2.424-.71 3.37-.71h8.073v7.451h-4.88c-1.241 0-2.232.207-2.97.621-.74.414-1.302.932-1.686 1.552a4.909 4.909 0 00-.71 1.996c-.089.71-.133 1.39-.133 2.04v16.677c0 1.715-.325 3.134-.976 4.258-.65 1.123-1.434 2.025-2.35 2.705-.917.68-1.863 1.168-2.839 1.464-.976.296-1.818.473-2.528.532v.178c.71.059 1.552.207 2.528.443.976.237 1.922.68 2.839 1.33.916.651 1.7 1.583 2.35 2.795.65 1.212.976 2.853.976 4.923v16.144c0 .65.044 1.33.133 2.04.089.71.325 1.375.71 1.996.384.621.946 1.139 1.685 1.553.74.414 1.73.62 2.972.62h4.879v7.452h-8.073c-.946 0-2.07-.237-3.37-.71-1.301-.473-2.543-1.197-3.726-2.173-1.183-.976-2.188-2.188-3.016-3.637-.828-1.449-1.242-3.179-1.242-5.19V74.119c0-1.42-.325-2.572-.976-3.46-.65-.886-1.419-1.581-2.306-2.084a8.868 8.868 0 00-2.75-1.02c-.946-.177-1.715-.266-2.306-.266v-7.806zm43.965-3.538L80.6 52.041l2.306 7.097-12.063 3.903 7.628 10.378-6.12 4.435-7.63-10.467-7.45 10.201-5.943-4.524 7.628-10.023-12.152-4.17 2.306-7.096 12.064 4.17V43.347h7.451v12.596zm34.425 11.344c-.65 0-1.449.089-2.395.266-.946.177-1.863.488-2.75.931a6.356 6.356 0 00-2.262 1.908c-.62.828-.931 1.862-.931 3.104v17.564c0 2.01-.414 3.74-1.242 5.189-.828 1.449-1.833 2.661-3.016 3.637s-2.425 1.7-3.726 2.173c-1.3.473-2.424.71-3.37.71h-8.073v-7.451h4.88c1.241 0 2.232-.207 2.97-.621.74-.414 1.302-.932 1.686-1.553a4.9 4.9 0 00.71-1.995c.089-.71.133-1.39.133-2.04V72.432c0-1.715.325-3.134.976-4.258.65-1.124 1.434-2.01 2.35-2.661.917-.65 1.863-1.124 2.839-1.42.976-.295 1.818-.502 2.528-.62v-.178c-.71-.059-1.552-.207-2.528-.443-.976-.237-1.922-.68-2.839-1.33-.916-.651-1.7-1.583-2.35-2.795-.65-1.212-.976-2.853-.976-4.923V37.66c0-.651-.044-1.331-.133-2.04a4.909 4.909 0 00-.71-1.997c-.384-.62-.946-1.138-1.685-1.552-.74-.414-1.73-.62-2.972-.62h-4.879V24h8.073c.946 0 2.07.237 3.37.71 1.301.473 2.543 1.197 3.726 2.173 1.183.976 2.188 2.188 3.016 3.637.828 1.449 1.242 3.178 1.242 5.189v16.943c0 1.419.31 2.572.931 3.46a6.897 6.897 0 002.262 2.084 8.868 8.868 0 002.75 1.02c.946.177 1.745.266 2.395.266v7.806zm24.66 0c-.65 0-1.449.089-2.395.266-.946.177-1.863.488-2.75.931a6.356 6.356 0 00-2.262 1.908c-.62.828-.931 1.862-.931 3.104v17.564c0 2.01-.414 3.74-1.242 5.189-.828 1.449-1.833 2.661-3.016 3.637s-2.425 1.7-3.726 2.173c-1.3.473-2.424.71-3.37.71h-8.073v-7.451h4.88c1.241 0 2.232-.207 2.97-.621.74-.414 1.302-.932 1.686-1.553a4.9 4.9 0 00.71-1.995c.089-.71.133-1.39.133-2.04V72.432c0-1.715.325-3.134.976-4.258.65-1.124 1.434-2.01 2.35-2.661.917-.65 1.863-1.124 2.839-1.42.976-.295 1.818-.502 2.528-.62v-.178c-.71-.059-1.552-.207-2.528-.443-.976-.237-1.922-.68-2.839-1.33-.916-.651-1.7-1.583-2.35-2.795-.65-1.212-.976-2.853-.976-4.923V37.66c0-.651-.044-1.331-.133-2.04a4.909 4.909 0 00-.71-1.997c-.384-.62-.946-1.138-1.685-1.552-.74-.414-1.73-.62-2.972-.62h-4.879V24h8.073c.946 0 2.07.237 3.37.71 1.301.473 2.543 1.197 3.726 2.173 1.183.976 2.188 2.188 3.016 3.637.828 1.449 1.242 3.178 1.242 5.189v16.943c0 1.419.31 2.572.931 3.46a6.897 6.897 0 002.262 2.084 8.868 8.868 0 002.75 1.02c.946.177 1.745.266 2.395.266v7.806z\"/></svg>"
},
"$:/core/images/twitter": {
"title": "$:/core/images/twitter",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-twitter tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M41.626 115.803A73.376 73.376 0 012 104.235c2.022.238 4.08.36 6.166.36 12.111 0 23.258-4.117 32.105-11.023-11.312-.208-20.859-7.653-24.148-17.883a25.98 25.98 0 0011.674-.441C15.971 72.881 7.061 62.474 7.061 49.997c0-.108 0-.216.002-.323a25.824 25.824 0 0011.709 3.22c-6.936-4.617-11.5-12.5-11.5-21.433 0-4.719 1.274-9.142 3.5-12.945 12.75 15.579 31.797 25.83 53.281 26.904-.44-1.884-.67-3.85-.67-5.868 0-14.22 11.575-25.75 25.852-25.75a25.865 25.865 0 0118.869 8.132 51.892 51.892 0 0016.415-6.248c-1.93 6.012-6.029 11.059-11.366 14.246A51.844 51.844 0 00128 25.878a52.428 52.428 0 01-12.9 13.33c.05 1.104.075 2.214.075 3.33 0 34.028-26 73.265-73.549 73.265\"/></svg>"
},
"$:/core/images/underline": {
"title": "$:/core/images/underline",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-underline tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M7 117.421h114.248V128H7v-10.579zm97.871-18.525V0h-16.26v55.856c0 4.463-.605 8.576-1.816 12.338-1.212 3.762-3.03 7.046-5.452 9.851-2.423 2.806-5.452 4.974-9.086 6.504-3.635 1.53-7.939 2.296-12.912 2.296-6.25 0-11.159-1.786-14.73-5.356-3.57-3.571-5.356-8.417-5.356-14.538V0H23v65.038c0 5.356.542 10.234 1.626 14.633 1.084 4.4 2.965 8.194 5.643 11.382 2.678 3.188 6.185 5.643 10.52 7.365 4.337 1.721 9.756 2.582 16.26 2.582 7.27 0 13.582-1.435 18.938-4.304 5.356-2.87 9.755-7.365 13.199-13.486h.382v15.686h15.303z\"/></svg>"
},
"$:/core/images/unfold-all-button": {
"title": "$:/core/images/unfold-all-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-unfold-all tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"64\" rx=\"8\"/><path d=\"M63.945 60.624c-2.05 0-4.101-.78-5.666-2.345L35.662 35.662c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L63.94 41.314l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.603 58.279a7.986 7.986 0 01-5.663 2.346zM64.004 124.565c-2.05 0-4.102-.78-5.666-2.345L35.721 99.603c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.191-3.122 11.318.005L64 105.255l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.662 122.22a7.986 7.986 0 01-5.663 2.346z\"/></g></svg>"
},
"$:/core/images/unfold-button": {
"title": "$:/core/images/unfold-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-unfold tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><path d=\"M63.945 63.624c-2.05 0-4.101-.78-5.666-2.345L35.662 38.662c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L63.94 44.314l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.603 61.279a7.986 7.986 0 01-5.663 2.346zM64.004 105.682c-2.05.001-4.102-.78-5.666-2.344L35.721 80.721c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.191-3.122 11.318.005L64 86.373l16.966-16.966c3.124-3.125 8.194-3.13 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319l-22.617 22.617a7.986 7.986 0 01-5.663 2.346z\"/></g></svg>"
},
"$:/core/images/unlocked-padlock": {
"title": "$:/core/images/unlocked-padlock",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-unlocked-padlock tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M48.627 64H105v32.01C105 113.674 90.674 128 73.001 128H56C38.318 128 24 113.677 24 96.01V64h6.136c-10.455-12.651-27.364-35.788-4.3-55.142 24.636-20.672 45.835 4.353 55.777 16.201 9.943 11.85-2.676 22.437-12.457 9.892-9.78-12.545-21.167-24.146-33.207-14.043-12.041 10.104-1.757 22.36 8.813 34.958 2.467 2.94 3.641 5.732 3.865 8.134zm19.105 28.364A8.503 8.503 0 0064.5 76a8.5 8.5 0 00-3.498 16.25l-5.095 22.77H72.8l-5.07-22.656z\"/></svg>"
},
"$:/core/images/up-arrow": {
"title": "$:/core/images/up-arrow",
"created": "20150316000544368",
"modified": "20150316000831867",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-up-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M63.892.281c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.104 3.092-11.196 0L63.894 19.393 13.513 69.774a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l55.98-55.98A7.892 7.892 0 0163.893.28z\"/></svg>"
},
"$:/core/images/video": {
"title": "$:/core/images/video",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-video tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 12c-34.91 0-55.273 2.917-58.182 5.833C2.91 20.75 0 41.167 0 64.5c0 23.333 2.91 43.75 5.818 46.667C8.728 114.083 29.091 117 64 117c34.91 0 55.273-2.917 58.182-5.833C125.09 108.25 128 87.833 128 64.5c0-23.333-2.91-43.75-5.818-46.667C119.272 14.917 98.909 12 64 12zm-9.084 32.618c-3.813-2.542-6.905-.879-6.905 3.698v31.368c0 4.585 3.099 6.235 6.905 3.698l22.168-14.779c3.813-2.542 3.806-6.669 0-9.206L54.916 44.618z\"/></svg>"
},
"$:/core/images/warning": {
"title": "$:/core/images/warning",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-warning tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M57.072 11c3.079-5.333 10.777-5.333 13.856 0l55.426 96c3.079 5.333-.77 12-6.928 12H8.574c-6.158 0-10.007-6.667-6.928-12l55.426-96zM64 37c-4.418 0-8 3.582-8 7.994v28.012C56 77.421 59.59 81 64 81c4.418 0 8-3.582 8-7.994V44.994C72 40.579 68.41 37 64 37zm0 67a8 8 0 100-16 8 8 0 000 16z\"/></svg>"
},
"$:/language/Buttons/AdvancedSearch/Caption": {
"title": "$:/language/Buttons/AdvancedSearch/Caption",
"text": "advanced search"
},
"$:/language/Buttons/AdvancedSearch/Hint": {
"title": "$:/language/Buttons/AdvancedSearch/Hint",
"text": "Advanced search"
},
"$:/language/Buttons/Cancel/Caption": {
"title": "$:/language/Buttons/Cancel/Caption",
"text": "cancel"
},
"$:/language/Buttons/Cancel/Hint": {
"title": "$:/language/Buttons/Cancel/Hint",
"text": "Discard changes to this tiddler"
},
"$:/language/Buttons/Clone/Caption": {
"title": "$:/language/Buttons/Clone/Caption",
"text": "clone"
},
"$:/language/Buttons/Clone/Hint": {
"title": "$:/language/Buttons/Clone/Hint",
"text": "Clone this tiddler"
},
"$:/language/Buttons/Close/Caption": {
"title": "$:/language/Buttons/Close/Caption",
"text": "close"
},
"$:/language/Buttons/Close/Hint": {
"title": "$:/language/Buttons/Close/Hint",
"text": "Close this tiddler"
},
"$:/language/Buttons/CloseAll/Caption": {
"title": "$:/language/Buttons/CloseAll/Caption",
"text": "close all"
},
"$:/language/Buttons/CloseAll/Hint": {
"title": "$:/language/Buttons/CloseAll/Hint",
"text": "Close all tiddlers"
},
"$:/language/Buttons/CloseOthers/Caption": {
"title": "$:/language/Buttons/CloseOthers/Caption",
"text": "close others"
},
"$:/language/Buttons/CloseOthers/Hint": {
"title": "$:/language/Buttons/CloseOthers/Hint",
"text": "Close other tiddlers"
},
"$:/language/Buttons/ControlPanel/Caption": {
"title": "$:/language/Buttons/ControlPanel/Caption",
"text": "control panel"
},
"$:/language/Buttons/ControlPanel/Hint": {
"title": "$:/language/Buttons/ControlPanel/Hint",
"text": "Open control panel"
},
"$:/language/Buttons/CopyToClipboard/Caption": {
"title": "$:/language/Buttons/CopyToClipboard/Caption",
"text": "copy to clipboard"
},
"$:/language/Buttons/CopyToClipboard/Hint": {
"title": "$:/language/Buttons/CopyToClipboard/Hint",
"text": "Copy this text to the clipboard"
},
"$:/language/Buttons/Delete/Caption": {
"title": "$:/language/Buttons/Delete/Caption",
"text": "delete"
},
"$:/language/Buttons/Delete/Hint": {
"title": "$:/language/Buttons/Delete/Hint",
"text": "Delete this tiddler"
},
"$:/language/Buttons/Edit/Caption": {
"title": "$:/language/Buttons/Edit/Caption",
"text": "edit"
},
"$:/language/Buttons/Edit/Hint": {
"title": "$:/language/Buttons/Edit/Hint",
"text": "Edit this tiddler"
},
"$:/language/Buttons/Encryption/Caption": {
"title": "$:/language/Buttons/Encryption/Caption",
"text": "encryption"
},
"$:/language/Buttons/Encryption/Hint": {
"title": "$:/language/Buttons/Encryption/Hint",
"text": "Set or clear a password for saving this wiki"
},
"$:/language/Buttons/Encryption/ClearPassword/Caption": {
"title": "$:/language/Buttons/Encryption/ClearPassword/Caption",
"text": "clear password"
},
"$:/language/Buttons/Encryption/ClearPassword/Hint": {
"title": "$:/language/Buttons/Encryption/ClearPassword/Hint",
"text": "Clear the password and save this wiki without encryption"
},
"$:/language/Buttons/Encryption/SetPassword/Caption": {
"title": "$:/language/Buttons/Encryption/SetPassword/Caption",
"text": "set password"
},
"$:/language/Buttons/Encryption/SetPassword/Hint": {
"title": "$:/language/Buttons/Encryption/SetPassword/Hint",
"text": "Set a password for saving this wiki with encryption"
},
"$:/language/Buttons/ExportPage/Caption": {
"title": "$:/language/Buttons/ExportPage/Caption",
"text": "export all"
},
"$:/language/Buttons/ExportPage/Hint": {
"title": "$:/language/Buttons/ExportPage/Hint",
"text": "Export all tiddlers"
},
"$:/language/Buttons/ExportTiddler/Caption": {
"title": "$:/language/Buttons/ExportTiddler/Caption",
"text": "export tiddler"
},
"$:/language/Buttons/ExportTiddler/Hint": {
"title": "$:/language/Buttons/ExportTiddler/Hint",
"text": "Export tiddler"
},
"$:/language/Buttons/ExportTiddlers/Caption": {
"title": "$:/language/Buttons/ExportTiddlers/Caption",
"text": "export tiddlers"
},
"$:/language/Buttons/ExportTiddlers/Hint": {
"title": "$:/language/Buttons/ExportTiddlers/Hint",
"text": "Export tiddlers"
},
"$:/language/Buttons/SidebarSearch/Hint": {
"title": "$:/language/Buttons/SidebarSearch/Hint",
"text": "Select the sidebar search field"
},
"$:/language/Buttons/Fold/Caption": {
"title": "$:/language/Buttons/Fold/Caption",
"text": "fold tiddler"
},
"$:/language/Buttons/Fold/Hint": {
"title": "$:/language/Buttons/Fold/Hint",
"text": "Fold the body of this tiddler"
},
"$:/language/Buttons/Fold/FoldBar/Caption": {
"title": "$:/language/Buttons/Fold/FoldBar/Caption",
"text": "fold-bar"
},
"$:/language/Buttons/Fold/FoldBar/Hint": {
"title": "$:/language/Buttons/Fold/FoldBar/Hint",
"text": "Optional bars to fold and unfold tiddlers"
},
"$:/language/Buttons/Unfold/Caption": {
"title": "$:/language/Buttons/Unfold/Caption",
"text": "unfold tiddler"
},
"$:/language/Buttons/Unfold/Hint": {
"title": "$:/language/Buttons/Unfold/Hint",
"text": "Unfold the body of this tiddler"
},
"$:/language/Buttons/FoldOthers/Caption": {
"title": "$:/language/Buttons/FoldOthers/Caption",
"text": "fold other tiddlers"
},
"$:/language/Buttons/FoldOthers/Hint": {
"title": "$:/language/Buttons/FoldOthers/Hint",
"text": "Fold the bodies of other opened tiddlers"
},
"$:/language/Buttons/FoldAll/Caption": {
"title": "$:/language/Buttons/FoldAll/Caption",
"text": "fold all tiddlers"
},
"$:/language/Buttons/FoldAll/Hint": {
"title": "$:/language/Buttons/FoldAll/Hint",
"text": "Fold the bodies of all opened tiddlers"
},
"$:/language/Buttons/UnfoldAll/Caption": {
"title": "$:/language/Buttons/UnfoldAll/Caption",
"text": "unfold all tiddlers"
},
"$:/language/Buttons/UnfoldAll/Hint": {
"title": "$:/language/Buttons/UnfoldAll/Hint",
"text": "Unfold the bodies of all opened tiddlers"
},
"$:/language/Buttons/FullScreen/Caption": {
"title": "$:/language/Buttons/FullScreen/Caption",
"text": "full-screen"
},
"$:/language/Buttons/FullScreen/Hint": {
"title": "$:/language/Buttons/FullScreen/Hint",
"text": "Enter or leave full-screen mode"
},
"$:/language/Buttons/Help/Caption": {
"title": "$:/language/Buttons/Help/Caption",
"text": "help"
},
"$:/language/Buttons/Help/Hint": {
"title": "$:/language/Buttons/Help/Hint",
"text": "Show help panel"
},
"$:/language/Buttons/Import/Caption": {
"title": "$:/language/Buttons/Import/Caption",
"text": "import"
},
"$:/language/Buttons/Import/Hint": {
"title": "$:/language/Buttons/Import/Hint",
"text": "Import many types of file including text, image, TiddlyWiki or JSON"
},
"$:/language/Buttons/Info/Caption": {
"title": "$:/language/Buttons/Info/Caption",
"text": "info"
},
"$:/language/Buttons/Info/Hint": {
"title": "$:/language/Buttons/Info/Hint",
"text": "Show information for this tiddler"
},
"$:/language/Buttons/Home/Caption": {
"title": "$:/language/Buttons/Home/Caption",
"text": "home"
},
"$:/language/Buttons/Home/Hint": {
"title": "$:/language/Buttons/Home/Hint",
"text": "Open the default tiddlers"
},
"$:/language/Buttons/Language/Caption": {
"title": "$:/language/Buttons/Language/Caption",
"text": "language"
},
"$:/language/Buttons/Language/Hint": {
"title": "$:/language/Buttons/Language/Hint",
"text": "Choose the user interface language"
},
"$:/language/Buttons/Manager/Caption": {
"title": "$:/language/Buttons/Manager/Caption",
"text": "tiddler manager"
},
"$:/language/Buttons/Manager/Hint": {
"title": "$:/language/Buttons/Manager/Hint",
"text": "Open tiddler manager"
},
"$:/language/Buttons/More/Caption": {
"title": "$:/language/Buttons/More/Caption",
"text": "more"
},
"$:/language/Buttons/More/Hint": {
"title": "$:/language/Buttons/More/Hint",
"text": "More actions"
},
"$:/language/Buttons/NewHere/Caption": {
"title": "$:/language/Buttons/NewHere/Caption",
"text": "new here"
},
"$:/language/Buttons/NewHere/Hint": {
"title": "$:/language/Buttons/NewHere/Hint",
"text": "Create a new tiddler tagged with this one"
},
"$:/language/Buttons/NewJournal/Caption": {
"title": "$:/language/Buttons/NewJournal/Caption",
"text": "new journal"
},
"$:/language/Buttons/NewJournal/Hint": {
"title": "$:/language/Buttons/NewJournal/Hint",
"text": "Create a new journal tiddler"
},
"$:/language/Buttons/NewJournalHere/Caption": {
"title": "$:/language/Buttons/NewJournalHere/Caption",
"text": "new journal here"
},
"$:/language/Buttons/NewJournalHere/Hint": {
"title": "$:/language/Buttons/NewJournalHere/Hint",
"text": "Create a new journal tiddler tagged with this one"
},
"$:/language/Buttons/NewImage/Caption": {
"title": "$:/language/Buttons/NewImage/Caption",
"text": "new image"
},
"$:/language/Buttons/NewImage/Hint": {
"title": "$:/language/Buttons/NewImage/Hint",
"text": "Create a new image tiddler"
},
"$:/language/Buttons/NewMarkdown/Caption": {
"title": "$:/language/Buttons/NewMarkdown/Caption",
"text": "new Markdown tiddler"
},
"$:/language/Buttons/NewMarkdown/Hint": {
"title": "$:/language/Buttons/NewMarkdown/Hint",
"text": "Create a new Markdown tiddler"
},
"$:/language/Buttons/NewTiddler/Caption": {
"title": "$:/language/Buttons/NewTiddler/Caption",
"text": "new tiddler"
},
"$:/language/Buttons/NewTiddler/Hint": {
"title": "$:/language/Buttons/NewTiddler/Hint",
"text": "Create a new tiddler"
},
"$:/language/Buttons/OpenWindow/Caption": {
"title": "$:/language/Buttons/OpenWindow/Caption",
"text": "open in new window"
},
"$:/language/Buttons/OpenWindow/Hint": {
"title": "$:/language/Buttons/OpenWindow/Hint",
"text": "Open tiddler in new window"
},
"$:/language/Buttons/Palette/Caption": {
"title": "$:/language/Buttons/Palette/Caption",
"text": "palette"
},
"$:/language/Buttons/Palette/Hint": {
"title": "$:/language/Buttons/Palette/Hint",
"text": "Choose the colour palette"
},
"$:/language/Buttons/Permalink/Caption": {
"title": "$:/language/Buttons/Permalink/Caption",
"text": "permalink"
},
"$:/language/Buttons/Permalink/Hint": {
"title": "$:/language/Buttons/Permalink/Hint",
"text": "Set browser address bar to a direct link to this tiddler"
},
"$:/language/Buttons/Permaview/Caption": {
"title": "$:/language/Buttons/Permaview/Caption",
"text": "permaview"
},
"$:/language/Buttons/Permaview/Hint": {
"title": "$:/language/Buttons/Permaview/Hint",
"text": "Set browser address bar to a direct link to all the tiddlers in this story"
},
"$:/language/Buttons/Print/Caption": {
"title": "$:/language/Buttons/Print/Caption",
"text": "print page"
},
"$:/language/Buttons/Print/Hint": {
"title": "$:/language/Buttons/Print/Hint",
"text": "Print the current page"
},
"$:/language/Buttons/Refresh/Caption": {
"title": "$:/language/Buttons/Refresh/Caption",
"text": "refresh"
},
"$:/language/Buttons/Refresh/Hint": {
"title": "$:/language/Buttons/Refresh/Hint",
"text": "Perform a full refresh of the wiki"
},
"$:/language/Buttons/Save/Caption": {
"title": "$:/language/Buttons/Save/Caption",
"text": "ok"
},
"$:/language/Buttons/Save/Hint": {
"title": "$:/language/Buttons/Save/Hint",
"text": "Confirm changes to this tiddler"
},
"$:/language/Buttons/SaveWiki/Caption": {
"title": "$:/language/Buttons/SaveWiki/Caption",
"text": "save changes"
},
"$:/language/Buttons/SaveWiki/Hint": {
"title": "$:/language/Buttons/SaveWiki/Hint",
"text": "Save changes"
},
"$:/language/Buttons/StoryView/Caption": {
"title": "$:/language/Buttons/StoryView/Caption",
"text": "storyview"
},
"$:/language/Buttons/StoryView/Hint": {
"title": "$:/language/Buttons/StoryView/Hint",
"text": "Choose the story visualisation"
},
"$:/language/Buttons/HideSideBar/Caption": {
"title": "$:/language/Buttons/HideSideBar/Caption",
"text": "hide sidebar"
},
"$:/language/Buttons/HideSideBar/Hint": {
"title": "$:/language/Buttons/HideSideBar/Hint",
"text": "Hide sidebar"
},
"$:/language/Buttons/ShowSideBar/Caption": {
"title": "$:/language/Buttons/ShowSideBar/Caption",
"text": "show sidebar"
},
"$:/language/Buttons/ShowSideBar/Hint": {
"title": "$:/language/Buttons/ShowSideBar/Hint",
"text": "Show sidebar"
},
"$:/language/Buttons/TagManager/Caption": {
"title": "$:/language/Buttons/TagManager/Caption",
"text": "tag manager"
},
"$:/language/Buttons/TagManager/Hint": {
"title": "$:/language/Buttons/TagManager/Hint",
"text": "Open tag manager"
},
"$:/language/Buttons/Timestamp/Caption": {
"title": "$:/language/Buttons/Timestamp/Caption",
"text": "timestamps"
},
"$:/language/Buttons/Timestamp/Hint": {
"title": "$:/language/Buttons/Timestamp/Hint",
"text": "Choose whether modifications update timestamps"
},
"$:/language/Buttons/Timestamp/On/Caption": {
"title": "$:/language/Buttons/Timestamp/On/Caption",
"text": "timestamps are on"
},
"$:/language/Buttons/Timestamp/On/Hint": {
"title": "$:/language/Buttons/Timestamp/On/Hint",
"text": "Update timestamps when tiddlers are modified"
},
"$:/language/Buttons/Timestamp/Off/Caption": {
"title": "$:/language/Buttons/Timestamp/Off/Caption",
"text": "timestamps are off"
},
"$:/language/Buttons/Timestamp/Off/Hint": {
"title": "$:/language/Buttons/Timestamp/Off/Hint",
"text": "Don't update timestamps when tiddlers are modified"
},
"$:/language/Buttons/Theme/Caption": {
"title": "$:/language/Buttons/Theme/Caption",
"text": "theme"
},
"$:/language/Buttons/Theme/Hint": {
"title": "$:/language/Buttons/Theme/Hint",
"text": "Choose the display theme"
},
"$:/language/Buttons/Bold/Caption": {
"title": "$:/language/Buttons/Bold/Caption",
"text": "bold"
},
"$:/language/Buttons/Bold/Hint": {
"title": "$:/language/Buttons/Bold/Hint",
"text": "Apply bold formatting to selection"
},
"$:/language/Buttons/Clear/Caption": {
"title": "$:/language/Buttons/Clear/Caption",
"text": "clear"
},
"$:/language/Buttons/Clear/Hint": {
"title": "$:/language/Buttons/Clear/Hint",
"text": "Clear image to solid colour"
},
"$:/language/Buttons/EditorHeight/Caption": {
"title": "$:/language/Buttons/EditorHeight/Caption",
"text": "editor height"
},
"$:/language/Buttons/EditorHeight/Caption/Auto": {
"title": "$:/language/Buttons/EditorHeight/Caption/Auto",
"text": "Automatically adjust height to fit content"
},
"$:/language/Buttons/EditorHeight/Caption/Fixed": {
"title": "$:/language/Buttons/EditorHeight/Caption/Fixed",
"text": "Fixed height:"
},
"$:/language/Buttons/EditorHeight/Hint": {
"title": "$:/language/Buttons/EditorHeight/Hint",
"text": "Choose the height of the text editor"
},
"$:/language/Buttons/Excise/Caption": {
"title": "$:/language/Buttons/Excise/Caption",
"text": "excise"
},
"$:/language/Buttons/Excise/Caption/Excise": {
"title": "$:/language/Buttons/Excise/Caption/Excise",
"text": "Perform excision"
},
"$:/language/Buttons/Excise/Caption/MacroName": {
"title": "$:/language/Buttons/Excise/Caption/MacroName",
"text": "Macro name:"
},
"$:/language/Buttons/Excise/Caption/NewTitle": {
"title": "$:/language/Buttons/Excise/Caption/NewTitle",
"text": "Title of new tiddler:"
},
"$:/language/Buttons/Excise/Caption/Replace": {
"title": "$:/language/Buttons/Excise/Caption/Replace",
"text": "Replace excised text with:"
},
"$:/language/Buttons/Excise/Caption/Replace/Macro": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Macro",
"text": "macro"
},
"$:/language/Buttons/Excise/Caption/Replace/Link": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Link",
"text": "link"
},
"$:/language/Buttons/Excise/Caption/Replace/Transclusion": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Transclusion",
"text": "transclusion"
},
"$:/language/Buttons/Excise/Caption/Tag": {
"title": "$:/language/Buttons/Excise/Caption/Tag",
"text": "Tag new tiddler with the title of this tiddler"
},
"$:/language/Buttons/Excise/Caption/TiddlerExists": {
"title": "$:/language/Buttons/Excise/Caption/TiddlerExists",
"text": "Warning: tiddler already exists"
},
"$:/language/Buttons/Excise/Hint": {
"title": "$:/language/Buttons/Excise/Hint",
"text": "Excise the selected text into a new tiddler"
},
"$:/language/Buttons/Heading1/Caption": {
"title": "$:/language/Buttons/Heading1/Caption",
"text": "heading 1"
},
"$:/language/Buttons/Heading1/Hint": {
"title": "$:/language/Buttons/Heading1/Hint",
"text": "Apply heading level 1 formatting to lines containing selection"
},
"$:/language/Buttons/Heading2/Caption": {
"title": "$:/language/Buttons/Heading2/Caption",
"text": "heading 2"
},
"$:/language/Buttons/Heading2/Hint": {
"title": "$:/language/Buttons/Heading2/Hint",
"text": "Apply heading level 2 formatting to lines containing selection"
},
"$:/language/Buttons/Heading3/Caption": {
"title": "$:/language/Buttons/Heading3/Caption",
"text": "heading 3"
},
"$:/language/Buttons/Heading3/Hint": {
"title": "$:/language/Buttons/Heading3/Hint",
"text": "Apply heading level 3 formatting to lines containing selection"
},
"$:/language/Buttons/Heading4/Caption": {
"title": "$:/language/Buttons/Heading4/Caption",
"text": "heading 4"
},
"$:/language/Buttons/Heading4/Hint": {
"title": "$:/language/Buttons/Heading4/Hint",
"text": "Apply heading level 4 formatting to lines containing selection"
},
"$:/language/Buttons/Heading5/Caption": {
"title": "$:/language/Buttons/Heading5/Caption",
"text": "heading 5"
},
"$:/language/Buttons/Heading5/Hint": {
"title": "$:/language/Buttons/Heading5/Hint",
"text": "Apply heading level 5 formatting to lines containing selection"
},
"$:/language/Buttons/Heading6/Caption": {
"title": "$:/language/Buttons/Heading6/Caption",
"text": "heading 6"
},
"$:/language/Buttons/Heading6/Hint": {
"title": "$:/language/Buttons/Heading6/Hint",
"text": "Apply heading level 6 formatting to lines containing selection"
},
"$:/language/Buttons/Italic/Caption": {
"title": "$:/language/Buttons/Italic/Caption",
"text": "italic"
},
"$:/language/Buttons/Italic/Hint": {
"title": "$:/language/Buttons/Italic/Hint",
"text": "Apply italic formatting to selection"
},
"$:/language/Buttons/LineWidth/Caption": {
"title": "$:/language/Buttons/LineWidth/Caption",
"text": "line width"
},
"$:/language/Buttons/LineWidth/Hint": {
"title": "$:/language/Buttons/LineWidth/Hint",
"text": "Set line width for painting"
},
"$:/language/Buttons/Link/Caption": {
"title": "$:/language/Buttons/Link/Caption",
"text": "link"
},
"$:/language/Buttons/Link/Hint": {
"title": "$:/language/Buttons/Link/Hint",
"text": "Create wikitext link"
},
"$:/language/Buttons/Linkify/Caption": {
"title": "$:/language/Buttons/Linkify/Caption",
"text": "wikilink"
},
"$:/language/Buttons/Linkify/Hint": {
"title": "$:/language/Buttons/Linkify/Hint",
"text": "Wrap selection in square brackets"
},
"$:/language/Buttons/ListBullet/Caption": {
"title": "$:/language/Buttons/ListBullet/Caption",
"text": "bulleted list"
},
"$:/language/Buttons/ListBullet/Hint": {
"title": "$:/language/Buttons/ListBullet/Hint",
"text": "Apply bulleted list formatting to lines containing selection"
},
"$:/language/Buttons/ListNumber/Caption": {
"title": "$:/language/Buttons/ListNumber/Caption",
"text": "numbered list"
},
"$:/language/Buttons/ListNumber/Hint": {
"title": "$:/language/Buttons/ListNumber/Hint",
"text": "Apply numbered list formatting to lines containing selection"
},
"$:/language/Buttons/MonoBlock/Caption": {
"title": "$:/language/Buttons/MonoBlock/Caption",
"text": "monospaced block"
},
"$:/language/Buttons/MonoBlock/Hint": {
"title": "$:/language/Buttons/MonoBlock/Hint",
"text": "Apply monospaced block formatting to lines containing selection"
},
"$:/language/Buttons/MonoLine/Caption": {
"title": "$:/language/Buttons/MonoLine/Caption",
"text": "monospaced"
},
"$:/language/Buttons/MonoLine/Hint": {
"title": "$:/language/Buttons/MonoLine/Hint",
"text": "Apply monospaced character formatting to selection"
},
"$:/language/Buttons/Opacity/Caption": {
"title": "$:/language/Buttons/Opacity/Caption",
"text": "opacity"
},
"$:/language/Buttons/Opacity/Hint": {
"title": "$:/language/Buttons/Opacity/Hint",
"text": "Set painting opacity"
},
"$:/language/Buttons/Paint/Caption": {
"title": "$:/language/Buttons/Paint/Caption",
"text": "paint colour"
},
"$:/language/Buttons/Paint/Hint": {
"title": "$:/language/Buttons/Paint/Hint",
"text": "Set painting colour"
},
"$:/language/Buttons/Picture/Caption": {
"title": "$:/language/Buttons/Picture/Caption",
"text": "picture"
},
"$:/language/Buttons/Picture/Hint": {
"title": "$:/language/Buttons/Picture/Hint",
"text": "Insert picture"
},
"$:/language/Buttons/Preview/Caption": {
"title": "$:/language/Buttons/Preview/Caption",
"text": "preview"
},
"$:/language/Buttons/Preview/Hint": {
"title": "$:/language/Buttons/Preview/Hint",
"text": "Show preview pane"
},
"$:/language/Buttons/PreviewType/Caption": {
"title": "$:/language/Buttons/PreviewType/Caption",
"text": "preview type"
},
"$:/language/Buttons/PreviewType/Hint": {
"title": "$:/language/Buttons/PreviewType/Hint",
"text": "Choose preview type"
},
"$:/language/Buttons/Quote/Caption": {
"title": "$:/language/Buttons/Quote/Caption",
"text": "quote"
},
"$:/language/Buttons/Quote/Hint": {
"title": "$:/language/Buttons/Quote/Hint",
"text": "Apply quoted text formatting to lines containing selection"
},
"$:/language/Buttons/RotateLeft/Caption": {
"title": "$:/language/Buttons/RotateLeft/Caption",
"text": "rotate left"
},
"$:/language/Buttons/RotateLeft/Hint": {
"title": "$:/language/Buttons/RotateLeft/Hint",
"text": "Rotate image left by 90 degrees"
},
"$:/language/Buttons/Size/Caption": {
"title": "$:/language/Buttons/Size/Caption",
"text": "image size"
},
"$:/language/Buttons/Size/Caption/Height": {
"title": "$:/language/Buttons/Size/Caption/Height",
"text": "Height:"
},
"$:/language/Buttons/Size/Caption/Resize": {
"title": "$:/language/Buttons/Size/Caption/Resize",
"text": "Resize image"
},
"$:/language/Buttons/Size/Caption/Width": {
"title": "$:/language/Buttons/Size/Caption/Width",
"text": "Width:"
},
"$:/language/Buttons/Size/Hint": {
"title": "$:/language/Buttons/Size/Hint",
"text": "Set image size"
},
"$:/language/Buttons/Stamp/Caption": {
"title": "$:/language/Buttons/Stamp/Caption",
"text": "stamp"
},
"$:/language/Buttons/Stamp/Caption/New": {
"title": "$:/language/Buttons/Stamp/Caption/New",
"text": "Add your own"
},
"$:/language/Buttons/Stamp/Hint": {
"title": "$:/language/Buttons/Stamp/Hint",
"text": "Insert a preconfigured snippet of text"
},
"$:/language/Buttons/Stamp/New/Title": {
"title": "$:/language/Buttons/Stamp/New/Title",
"text": "Name as shown in menu"
},
"$:/language/Buttons/Stamp/New/Text": {
"title": "$:/language/Buttons/Stamp/New/Text",
"text": "Text of snippet. (Remember to add a descriptive title in the caption field)."
},
"$:/language/Buttons/Strikethrough/Caption": {
"title": "$:/language/Buttons/Strikethrough/Caption",
"text": "strikethrough"
},
"$:/language/Buttons/Strikethrough/Hint": {
"title": "$:/language/Buttons/Strikethrough/Hint",
"text": "Apply strikethrough formatting to selection"
},
"$:/language/Buttons/Subscript/Caption": {
"title": "$:/language/Buttons/Subscript/Caption",
"text": "subscript"
},
"$:/language/Buttons/Subscript/Hint": {
"title": "$:/language/Buttons/Subscript/Hint",
"text": "Apply subscript formatting to selection"
},
"$:/language/Buttons/Superscript/Caption": {
"title": "$:/language/Buttons/Superscript/Caption",
"text": "superscript"
},
"$:/language/Buttons/Superscript/Hint": {
"title": "$:/language/Buttons/Superscript/Hint",
"text": "Apply superscript formatting to selection"
},
"$:/language/Buttons/ToggleSidebar/Hint": {
"title": "$:/language/Buttons/ToggleSidebar/Hint",
"text": "Toggle the sidebar visibility"
},
"$:/language/Buttons/Transcludify/Caption": {
"title": "$:/language/Buttons/Transcludify/Caption",
"text": "transclusion"
},
"$:/language/Buttons/Transcludify/Hint": {
"title": "$:/language/Buttons/Transcludify/Hint",
"text": "Wrap selection in curly brackets"
},
"$:/language/Buttons/Underline/Caption": {
"title": "$:/language/Buttons/Underline/Caption",
"text": "underline"
},
"$:/language/Buttons/Underline/Hint": {
"title": "$:/language/Buttons/Underline/Hint",
"text": "Apply underline formatting to selection"
},
"$:/language/ControlPanel/Advanced/Caption": {
"title": "$:/language/ControlPanel/Advanced/Caption",
"text": "Advanced"
},
"$:/language/ControlPanel/Advanced/Hint": {
"title": "$:/language/ControlPanel/Advanced/Hint",
"text": "Internal information about this TiddlyWiki"
},
"$:/language/ControlPanel/Appearance/Caption": {
"title": "$:/language/ControlPanel/Appearance/Caption",
"text": "Appearance"
},
"$:/language/ControlPanel/Appearance/Hint": {
"title": "$:/language/ControlPanel/Appearance/Hint",
"text": "Ways to customise the appearance of your TiddlyWiki."
},
"$:/language/ControlPanel/Basics/AnimDuration/Prompt": {
"title": "$:/language/ControlPanel/Basics/AnimDuration/Prompt",
"text": "Animation duration"
},
"$:/language/ControlPanel/Basics/AutoFocus/Prompt": {
"title": "$:/language/ControlPanel/Basics/AutoFocus/Prompt",
"text": "Default focus field for new tiddlers"
},
"$:/language/ControlPanel/Basics/Caption": {
"title": "$:/language/ControlPanel/Basics/Caption",
"text": "Basics"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint",
"text": "Use [[double square brackets]] for titles with spaces. Or you can choose to <$button set=\"$:/DefaultTiddlers\" setTo=\"[list[$:/StoryList]]\">retain story ordering</$button>"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt",
"text": "Default tiddlers"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint",
"text": "Choose which tiddlers are displayed at startup"
},
"$:/language/ControlPanel/Basics/Language/Prompt": {
"title": "$:/language/ControlPanel/Basics/Language/Prompt",
"text": "Hello! Current language:"
},
"$:/language/ControlPanel/Basics/NewJournal/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt",
"text": "Title of new journal tiddlers"
},
"$:/language/ControlPanel/Basics/NewJournal/Text/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Text/Prompt",
"text": "Text for new journal tiddlers"
},
"$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt",
"text": "Tags for new journal tiddlers"
},
"$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt",
"text": "Title of new tiddlers"
},
"$:/language/ControlPanel/Basics/NewTiddler/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewTiddler/Tags/Prompt",
"text": "Tags for new tiddlers"
},
"$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt",
"text": "Number of overridden shadow tiddlers"
},
"$:/language/ControlPanel/Basics/RemoveTags": {
"title": "$:/language/ControlPanel/Basics/RemoveTags",
"text": "Update to current format"
},
"$:/language/ControlPanel/Basics/RemoveTags/Hint": {
"title": "$:/language/ControlPanel/Basics/RemoveTags/Hint",
"text": "Update the tags configuration to the latest format"
},
"$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt",
"text": "Number of shadow tiddlers"
},
"$:/language/ControlPanel/Basics/Subtitle/Prompt": {
"title": "$:/language/ControlPanel/Basics/Subtitle/Prompt",
"text": "Subtitle"
},
"$:/language/ControlPanel/Basics/SystemTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt",
"text": "Number of system tiddlers"
},
"$:/language/ControlPanel/Basics/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/Tags/Prompt",
"text": "Number of tags"
},
"$:/language/ControlPanel/Basics/Tiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/Tiddlers/Prompt",
"text": "Number of tiddlers"
},
"$:/language/ControlPanel/Basics/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/Title/Prompt",
"text": "Title of this ~TiddlyWiki"
},
"$:/language/ControlPanel/Basics/Username/Prompt": {
"title": "$:/language/ControlPanel/Basics/Username/Prompt",
"text": "Username for signing edits"
},
"$:/language/ControlPanel/Basics/Version/Prompt": {
"title": "$:/language/ControlPanel/Basics/Version/Prompt",
"text": "~TiddlyWiki version"
},
"$:/language/ControlPanel/EditorTypes/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Caption",
"text": "Editor Types"
},
"$:/language/ControlPanel/EditorTypes/Editor/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Editor/Caption",
"text": "Editor"
},
"$:/language/ControlPanel/EditorTypes/Hint": {
"title": "$:/language/ControlPanel/EditorTypes/Hint",
"text": "These tiddlers determine which editor is used to edit specific tiddler types."
},
"$:/language/ControlPanel/EditorTypes/Type/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Type/Caption",
"text": "Type"
},
"$:/language/ControlPanel/Info/Caption": {
"title": "$:/language/ControlPanel/Info/Caption",
"text": "Info"
},
"$:/language/ControlPanel/Info/Hint": {
"title": "$:/language/ControlPanel/Info/Hint",
"text": "Information about this TiddlyWiki"
},
"$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt",
"text": "Type shortcut here"
},
"$:/language/ControlPanel/KeyboardShortcuts/Add/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Caption",
"text": "add shortcut"
},
"$:/language/ControlPanel/KeyboardShortcuts/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Caption",
"text": "Keyboard Shortcuts"
},
"$:/language/ControlPanel/KeyboardShortcuts/Hint": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Hint",
"text": "Manage keyboard shortcut assignments"
},
"$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption",
"text": "No keyboard shortcuts assigned"
},
"$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint",
"text": "remove keyboard shortcut"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/All": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/All",
"text": "All platforms"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac",
"text": "Macintosh platform only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac",
"text": "Non-Macintosh platforms only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux",
"text": "Linux platform only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux",
"text": "Non-Linux platforms only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows",
"text": "Windows platform only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows",
"text": "Non-Windows platforms only"
},
"$:/language/ControlPanel/LayoutSwitcher/Caption": {
"title": "$:/language/ControlPanel/LayoutSwitcher/Caption",
"text": "Layout"
},
"$:/language/ControlPanel/LoadedModules/Caption": {
"title": "$:/language/ControlPanel/LoadedModules/Caption",
"text": "Loaded Modules"
},
"$:/language/ControlPanel/LoadedModules/Hint": {
"title": "$:/language/ControlPanel/LoadedModules/Hint",
"text": "These are the currently loaded tiddler modules linked to their source tiddlers. Any italicised modules lack a source tiddler, typically because they were setup during the boot process."
},
"$:/language/ControlPanel/Palette/Caption": {
"title": "$:/language/ControlPanel/Palette/Caption",
"text": "Palette"
},
"$:/language/ControlPanel/Palette/Editor/Clone/Caption": {
"title": "$:/language/ControlPanel/Palette/Editor/Clone/Caption",
"text": "clone"
},
"$:/language/ControlPanel/Palette/Editor/Clone/Prompt": {
"title": "$:/language/ControlPanel/Palette/Editor/Clone/Prompt",
"text": "It is recommended that you clone this shadow palette before editing it"
},
"$:/language/ControlPanel/Palette/Editor/Delete/Hint": {
"title": "$:/language/ControlPanel/Palette/Editor/Delete/Hint",
"text": "delete this entry from the current palette"
},
"$:/language/ControlPanel/Palette/Editor/Names/External/Show": {
"title": "$:/language/ControlPanel/Palette/Editor/Names/External/Show",
"text": "Show color names that are not part of the current palette"
},
"$:/language/ControlPanel/Palette/Editor/Prompt/Modified": {
"title": "$:/language/ControlPanel/Palette/Editor/Prompt/Modified",
"text": "This shadow palette has been modified"
},
"$:/language/ControlPanel/Palette/Editor/Prompt": {
"title": "$:/language/ControlPanel/Palette/Editor/Prompt",
"text": "Editing"
},
"$:/language/ControlPanel/Palette/Editor/Reset/Caption": {
"title": "$:/language/ControlPanel/Palette/Editor/Reset/Caption",
"text": "reset"
},
"$:/language/ControlPanel/Palette/HideEditor/Caption": {
"title": "$:/language/ControlPanel/Palette/HideEditor/Caption",
"text": "hide editor"
},
"$:/language/ControlPanel/Palette/Prompt": {
"title": "$:/language/ControlPanel/Palette/Prompt",
"text": "Current palette:"
},
"$:/language/ControlPanel/Palette/ShowEditor/Caption": {
"title": "$:/language/ControlPanel/Palette/ShowEditor/Caption",
"text": "show editor"
},
"$:/language/ControlPanel/Parsing/Caption": {
"title": "$:/language/ControlPanel/Parsing/Caption",
"text": "Parsing"
},
"$:/language/ControlPanel/Parsing/Hint": {
"title": "$:/language/ControlPanel/Parsing/Hint",
"text": "Here you can globally disable/enable wiki parser rules. For changes to take effect, save and reload your wiki. Disabling certain parser rules can prevent <$text text=\"TiddlyWiki\"/> from functioning correctly. Use [[safe mode|https://tiddlywiki.com/#SafeMode]] to restore normal operation."
},
"$:/language/ControlPanel/Parsing/Block/Caption": {
"title": "$:/language/ControlPanel/Parsing/Block/Caption",
"text": "Block Parse Rules"
},
"$:/language/ControlPanel/Parsing/Inline/Caption": {
"title": "$:/language/ControlPanel/Parsing/Inline/Caption",
"text": "Inline Parse Rules"
},
"$:/language/ControlPanel/Parsing/Pragma/Caption": {
"title": "$:/language/ControlPanel/Parsing/Pragma/Caption",
"text": "Pragma Parse Rules"
},
"$:/language/ControlPanel/Plugins/Add/Caption": {
"title": "$:/language/ControlPanel/Plugins/Add/Caption",
"text": "Get more plugins"
},
"$:/language/ControlPanel/Plugins/Add/Hint": {
"title": "$:/language/ControlPanel/Plugins/Add/Hint",
"text": "Install plugins from the official library"
},
"$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint": {
"title": "$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint",
"text": "This plugin is already installed at version <$text text=<<installedVersion>>/>"
},
"$:/language/ControlPanel/Plugins/AlsoRequires": {
"title": "$:/language/ControlPanel/Plugins/AlsoRequires",
"text": "Also requires:"
},
"$:/language/ControlPanel/Plugins/Caption": {
"title": "$:/language/ControlPanel/Plugins/Caption",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Disable/Caption": {
"title": "$:/language/ControlPanel/Plugins/Disable/Caption",
"text": "disable"
},
"$:/language/ControlPanel/Plugins/Disable/Hint": {
"title": "$:/language/ControlPanel/Plugins/Disable/Hint",
"text": "Disable this plugin when reloading page"
},
"$:/language/ControlPanel/Plugins/Disabled/Status": {
"title": "$:/language/ControlPanel/Plugins/Disabled/Status",
"text": "(disabled)"
},
"$:/language/ControlPanel/Plugins/Downgrade/Caption": {
"title": "$:/language/ControlPanel/Plugins/Downgrade/Caption",
"text": "downgrade"
},
"$:/language/ControlPanel/Plugins/Empty/Hint": {
"title": "$:/language/ControlPanel/Plugins/Empty/Hint",
"text": "None"
},
"$:/language/ControlPanel/Plugins/Enable/Caption": {
"title": "$:/language/ControlPanel/Plugins/Enable/Caption",
"text": "enable"
},
"$:/language/ControlPanel/Plugins/Enable/Hint": {
"title": "$:/language/ControlPanel/Plugins/Enable/Hint",
"text": "Enable this plugin when reloading page"
},
"$:/language/ControlPanel/Plugins/Install/Caption": {
"title": "$:/language/ControlPanel/Plugins/Install/Caption",
"text": "install"
},
"$:/language/ControlPanel/Plugins/Installed/Hint": {
"title": "$:/language/ControlPanel/Plugins/Installed/Hint",
"text": "Currently installed plugins:"
},
"$:/language/ControlPanel/Plugins/Languages/Caption": {
"title": "$:/language/ControlPanel/Plugins/Languages/Caption",
"text": "Languages"
},
"$:/language/ControlPanel/Plugins/Languages/Hint": {
"title": "$:/language/ControlPanel/Plugins/Languages/Hint",
"text": "Language pack plugins"
},
"$:/language/ControlPanel/Plugins/NoInfoFound/Hint": {
"title": "$:/language/ControlPanel/Plugins/NoInfoFound/Hint",
"text": "No ''\"<$text text=<<currentTab>>/>\"'' found"
},
"$:/language/ControlPanel/Plugins/NotInstalled/Hint": {
"title": "$:/language/ControlPanel/Plugins/NotInstalled/Hint",
"text": "This plugin is not currently installed"
},
"$:/language/ControlPanel/Plugins/OpenPluginLibrary": {
"title": "$:/language/ControlPanel/Plugins/OpenPluginLibrary",
"text": "open plugin library"
},
"$:/language/ControlPanel/Plugins/ClosePluginLibrary": {
"title": "$:/language/ControlPanel/Plugins/ClosePluginLibrary",
"text": "close plugin library"
},
"$:/language/ControlPanel/Plugins/PluginWillRequireReload": {
"title": "$:/language/ControlPanel/Plugins/PluginWillRequireReload",
"text": "(requires reload)"
},
"$:/language/ControlPanel/Plugins/Plugins/Caption": {
"title": "$:/language/ControlPanel/Plugins/Plugins/Caption",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Plugins/Hint": {
"title": "$:/language/ControlPanel/Plugins/Plugins/Hint",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Reinstall/Caption": {
"title": "$:/language/ControlPanel/Plugins/Reinstall/Caption",
"text": "reinstall"
},
"$:/language/ControlPanel/Plugins/Themes/Caption": {
"title": "$:/language/ControlPanel/Plugins/Themes/Caption",
"text": "Themes"
},
"$:/language/ControlPanel/Plugins/Themes/Hint": {
"title": "$:/language/ControlPanel/Plugins/Themes/Hint",
"text": "Theme plugins"
},
"$:/language/ControlPanel/Plugins/Update/Caption": {
"title": "$:/language/ControlPanel/Plugins/Update/Caption",
"text": "update"
},
"$:/language/ControlPanel/Plugins/Updates/Caption": {
"title": "$:/language/ControlPanel/Plugins/Updates/Caption",
"text": "Updates"
},
"$:/language/ControlPanel/Plugins/Updates/Hint": {
"title": "$:/language/ControlPanel/Plugins/Updates/Hint",
"text": "Available updates to installed plugins"
},
"$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption": {
"title": "$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption",
"text": "Update <<update-count>> plugins"
},
"$:/language/ControlPanel/Plugins/SubPluginPrompt": {
"title": "$:/language/ControlPanel/Plugins/SubPluginPrompt",
"text": "With <<count>> sub-plugins available"
},
"$:/language/ControlPanel/Saving/Caption": {
"title": "$:/language/ControlPanel/Saving/Caption",
"text": "Saving"
},
"$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description",
"text": "Permit automatic saving for the download saver"
},
"$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint",
"text": "Enable Autosave for Download Saver"
},
"$:/language/ControlPanel/Saving/DownloadSaver/Caption": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/Caption",
"text": "Download Saver"
},
"$:/language/ControlPanel/Saving/DownloadSaver/Hint": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/Hint",
"text": "These settings apply to the HTML5-compatible download saver"
},
"$:/language/ControlPanel/Saving/General/Caption": {
"title": "$:/language/ControlPanel/Saving/General/Caption",
"text": "General"
},
"$:/language/ControlPanel/Saving/General/Hint": {
"title": "$:/language/ControlPanel/Saving/General/Hint",
"text": "These settings apply to all the loaded savers"
},
"$:/language/ControlPanel/Saving/Hint": {
"title": "$:/language/ControlPanel/Saving/Hint",
"text": "Settings used for saving the entire TiddlyWiki as a single file via a saver module"
},
"$:/language/ControlPanel/Saving/GitService/Branch": {
"title": "$:/language/ControlPanel/Saving/GitService/Branch",
"text": "Target branch for saving"
},
"$:/language/ControlPanel/Saving/GitService/CommitMessage": {
"title": "$:/language/ControlPanel/Saving/GitService/CommitMessage",
"text": "Saved by TiddlyWiki"
},
"$:/language/ControlPanel/Saving/GitService/Description": {
"title": "$:/language/ControlPanel/Saving/GitService/Description",
"text": "These settings are only used when saving to <<service-name>>"
},
"$:/language/ControlPanel/Saving/GitService/Filename": {
"title": "$:/language/ControlPanel/Saving/GitService/Filename",
"text": "Filename of target file (e.g. `index.html`)"
},
"$:/language/ControlPanel/Saving/GitService/Path": {
"title": "$:/language/ControlPanel/Saving/GitService/Path",
"text": "Path to target file (e.g. `/wiki/`)"
},
"$:/language/ControlPanel/Saving/GitService/Repo": {
"title": "$:/language/ControlPanel/Saving/GitService/Repo",
"text": "Target repository (e.g. `Jermolene/TiddlyWiki5`)"
},
"$:/language/ControlPanel/Saving/GitService/ServerURL": {
"title": "$:/language/ControlPanel/Saving/GitService/ServerURL",
"text": "Server API URL"
},
"$:/language/ControlPanel/Saving/GitService/UserName": {
"title": "$:/language/ControlPanel/Saving/GitService/UserName",
"text": "Username"
},
"$:/language/ControlPanel/Saving/GitService/GitHub/Caption": {
"title": "$:/language/ControlPanel/Saving/GitService/GitHub/Caption",
"text": "~GitHub Saver"
},
"$:/language/ControlPanel/Saving/GitService/GitHub/Password": {
"title": "$:/language/ControlPanel/Saving/GitService/GitHub/Password",
"text": "Password, OAUTH token, or personal access token (see [[GitHub help page|https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line]] for details)"
},
"$:/language/ControlPanel/Saving/GitService/GitLab/Caption": {
"title": "$:/language/ControlPanel/Saving/GitService/GitLab/Caption",
"text": "~GitLab Saver"
},
"$:/language/ControlPanel/Saving/GitService/GitLab/Password": {
"title": "$:/language/ControlPanel/Saving/GitService/GitLab/Password",
"text": "Personal access token for API (see [[GitLab help page|https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html]] for details)"
},
"$:/language/ControlPanel/Saving/GitService/Gitea/Caption": {
"title": "$:/language/ControlPanel/Saving/GitService/Gitea/Caption",
"text": "Gitea Saver"
},
"$:/language/ControlPanel/Saving/GitService/Gitea/Password": {
"title": "$:/language/ControlPanel/Saving/GitService/Gitea/Password",
"text": "Personal access token for API (via Gitea’s web interface: `Settings | Applications | Generate New Token`)"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading",
"text": "Advanced Settings"
},
"$:/language/ControlPanel/Saving/TiddlySpot/BackupDir": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir",
"text": "Backup Directory"
},
"$:/language/ControlPanel/Saving/TiddlySpot/ControlPanel": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/ControlPanel",
"text": "~TiddlySpot Control Panel"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Backups": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Backups",
"text": "Backups"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Caption": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Caption",
"text": "~TiddlySpot Saver"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Description": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Description",
"text": "These settings are only used when saving to http://tiddlyspot.com or a compatible remote server"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Filename": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Filename",
"text": "Upload Filename"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Heading": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Heading",
"text": "~TiddlySpot"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Hint": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Hint",
"text": "//The server URL defaults to `http://<wikiname>.tiddlyspot.com/store.cgi` and can be changed to use a custom server address, e.g. `http://example.com/store.php`.//"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Password": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Password",
"text": "Password"
},
"$:/language/ControlPanel/Saving/TiddlySpot/ReadOnly": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/ReadOnly",
"text": "The ~TiddlySpot service is currently only available in read-only form. Please see http://tiddlyspot.com/ for the latest details. The ~TiddlySpot saver can still be used to save to compatible servers."
},
"$:/language/ControlPanel/Saving/TiddlySpot/ServerURL": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL",
"text": "Server URL"
},
"$:/language/ControlPanel/Saving/TiddlySpot/UploadDir": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir",
"text": "Upload Directory"
},
"$:/language/ControlPanel/Saving/TiddlySpot/UserName": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/UserName",
"text": "Wiki Name"
},
"$:/language/ControlPanel/Settings/AutoSave/Caption": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Caption",
"text": "Autosave"
},
"$:/language/ControlPanel/Settings/AutoSave/Disabled/Description": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description",
"text": "Do not save changes automatically"
},
"$:/language/ControlPanel/Settings/AutoSave/Enabled/Description": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description",
"text": "Save changes automatically"
},
"$:/language/ControlPanel/Settings/AutoSave/Hint": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Hint",
"text": "Attempt to automatically save changes during editing when using a supporting saver"
},
"$:/language/ControlPanel/Settings/CamelCase/Caption": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Caption",
"text": "Camel Case Wiki Links"
},
"$:/language/ControlPanel/Settings/CamelCase/Hint": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Hint",
"text": "You can globally disable automatic linking of ~CamelCase phrases. Requires reload to take effect"
},
"$:/language/ControlPanel/Settings/CamelCase/Description": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Description",
"text": "Enable automatic ~CamelCase linking"
},
"$:/language/ControlPanel/Settings/Caption": {
"title": "$:/language/ControlPanel/Settings/Caption",
"text": "Settings"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Caption": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Caption",
"text": "Editor Toolbar"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Hint": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Hint",
"text": "Enable or disable the editor toolbar:"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Description": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Description",
"text": "Show editor toolbar"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Caption": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Caption",
"text": "Tiddler Info Panel Mode"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Hint": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Hint",
"text": "Control when the tiddler info panel closes:"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description",
"text": "Tiddler info panel closes automatically"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description",
"text": "Tiddler info panel stays open until explicitly closed"
},
"$:/language/ControlPanel/Settings/Hint": {
"title": "$:/language/ControlPanel/Settings/Hint",
"text": "These settings let you customise the behaviour of TiddlyWiki."
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption",
"text": "Navigation Address Bar"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint",
"text": "Behaviour of the browser address bar when navigating to a tiddler:"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description",
"text": "Do not update the address bar"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description",
"text": "Include the target tiddler"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description",
"text": "Include the target tiddler and the current story sequence"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Caption",
"text": "Navigation History"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Hint",
"text": "Update browser history when navigating to a tiddler:"
},
"$:/language/ControlPanel/Settings/NavigationHistory/No/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/No/Description",
"text": "Do not update history"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description",
"text": "Update history"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption",
"text": "Permalink/permaview Mode"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint",
"text": "Choose how permalink/permaview is handled:"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description",
"text": "Copy permalink/permaview URL to clipboard"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description",
"text": "Update address bar with permalink/permaview URL"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption",
"text": "Performance Instrumentation"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint",
"text": "Displays performance statistics in the browser developer console. Requires reload to take effect"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description",
"text": "Enable performance instrumentation"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption",
"text": "Toolbar Button Style"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint",
"text": "Choose the style for toolbar buttons:"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless",
"text": "Borderless"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed",
"text": "Boxed"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded",
"text": "Rounded"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Caption": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Caption",
"text": "Toolbar Buttons"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Hint": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Hint",
"text": "Default toolbar button appearance:"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description",
"text": "Include icon"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description",
"text": "Include text"
},
"$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption": {
"title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption",
"text": "Default Sidebar Tab"
},
"$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint": {
"title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint",
"text": "Specify which sidebar tab is displayed by default"
},
"$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption": {
"title": "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption",
"text": "Default More Sidebar Tab"
},
"$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint": {
"title": "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint",
"text": "Specify which More sidebar tab is displayed by default"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/Caption": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption",
"text": "Tiddler Opening Behaviour"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint",
"text": "Navigation from //within// the story river"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint",
"text": "Navigation from //outside// the story river"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove",
"text": "Open above the current tiddler"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow",
"text": "Open below the current tiddler"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop",
"text": "Open at the top of the story river"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom",
"text": "Open at the bottom of the story river"
},
"$:/language/ControlPanel/Settings/TitleLinks/Caption": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Caption",
"text": "Tiddler Titles"
},
"$:/language/ControlPanel/Settings/TitleLinks/Hint": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Hint",
"text": "Optionally display tiddler titles as links"
},
"$:/language/ControlPanel/Settings/TitleLinks/No/Description": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/No/Description",
"text": "Do not display tiddler titles as links"
},
"$:/language/ControlPanel/Settings/TitleLinks/Yes/Description": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description",
"text": "Display tiddler titles as links"
},
"$:/language/ControlPanel/Settings/MissingLinks/Caption": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Caption",
"text": "Wiki Links"
},
"$:/language/ControlPanel/Settings/MissingLinks/Hint": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Hint",
"text": "Choose whether to link to tiddlers that do not exist yet"
},
"$:/language/ControlPanel/Settings/MissingLinks/Description": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Description",
"text": "Enable links to missing tiddlers"
},
"$:/language/ControlPanel/StoryView/Caption": {
"title": "$:/language/ControlPanel/StoryView/Caption",
"text": "Story View"
},
"$:/language/ControlPanel/StoryView/Prompt": {
"title": "$:/language/ControlPanel/StoryView/Prompt",
"text": "Current view:"
},
"$:/language/ControlPanel/Stylesheets/Caption": {
"title": "$:/language/ControlPanel/Stylesheets/Caption",
"text": "Stylesheets"
},
"$:/language/ControlPanel/Stylesheets/Expand/Caption": {
"title": "$:/language/ControlPanel/Stylesheets/Expand/Caption",
"text": "Expand All"
},
"$:/language/ControlPanel/Stylesheets/Hint": {
"title": "$:/language/ControlPanel/Stylesheets/Hint",
"text": "This is the rendered CSS of the current stylesheet tiddlers tagged with <<tag \"$:/tags/Stylesheet\">>"
},
"$:/language/ControlPanel/Stylesheets/Restore/Caption": {
"title": "$:/language/ControlPanel/Stylesheets/Restore/Caption",
"text": "Restore"
},
"$:/language/ControlPanel/Theme/Caption": {
"title": "$:/language/ControlPanel/Theme/Caption",
"text": "Theme"
},
"$:/language/ControlPanel/Theme/Prompt": {
"title": "$:/language/ControlPanel/Theme/Prompt",
"text": "Current theme:"
},
"$:/language/ControlPanel/TiddlerFields/Caption": {
"title": "$:/language/ControlPanel/TiddlerFields/Caption",
"text": "Tiddler Fields"
},
"$:/language/ControlPanel/TiddlerFields/Hint": {
"title": "$:/language/ControlPanel/TiddlerFields/Hint",
"text": "This is the full set of TiddlerFields in use in this wiki (including system tiddlers but excluding shadow tiddlers)."
},
"$:/language/ControlPanel/Toolbars/Caption": {
"title": "$:/language/ControlPanel/Toolbars/Caption",
"text": "Toolbars"
},
"$:/language/ControlPanel/Toolbars/EditToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/EditToolbar/Caption",
"text": "Edit Toolbar"
},
"$:/language/ControlPanel/Toolbars/EditToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/EditToolbar/Hint",
"text": "Choose which buttons are displayed for tiddlers in edit mode. Drag and drop to change the ordering"
},
"$:/language/ControlPanel/Toolbars/Hint": {
"title": "$:/language/ControlPanel/Toolbars/Hint",
"text": "Select which toolbar buttons are displayed"
},
"$:/language/ControlPanel/Toolbars/PageControls/Caption": {
"title": "$:/language/ControlPanel/Toolbars/PageControls/Caption",
"text": "Page Toolbar"
},
"$:/language/ControlPanel/Toolbars/PageControls/Hint": {
"title": "$:/language/ControlPanel/Toolbars/PageControls/Hint",
"text": "Choose which buttons are displayed on the main page toolbar. Drag and drop to change the ordering"
},
"$:/language/ControlPanel/Toolbars/EditorToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Caption",
"text": "Editor Toolbar"
},
"$:/language/ControlPanel/Toolbars/EditorToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Hint",
"text": "Choose which buttons are displayed in the editor toolbar. Note that some buttons will only appear when editing tiddlers of a certain type. Drag and drop to change the ordering"
},
"$:/language/ControlPanel/Toolbars/ViewToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption",
"text": "View Toolbar"
},
"$:/language/ControlPanel/Toolbars/ViewToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint",
"text": "Choose which buttons are displayed for tiddlers in view mode. Drag and drop to change the ordering"
},
"$:/language/ControlPanel/Tools/Download/Full/Caption": {
"title": "$:/language/ControlPanel/Tools/Download/Full/Caption",
"text": "Download full wiki"
},
"$:/language/Date/DaySuffix/1": {
"title": "$:/language/Date/DaySuffix/1",
"text": "st"
},
"$:/language/Date/DaySuffix/2": {
"title": "$:/language/Date/DaySuffix/2",
"text": "nd"
},
"$:/language/Date/DaySuffix/3": {
"title": "$:/language/Date/DaySuffix/3",
"text": "rd"
},
"$:/language/Date/DaySuffix/4": {
"title": "$:/language/Date/DaySuffix/4",
"text": "th"
},
"$:/language/Date/DaySuffix/5": {
"title": "$:/language/Date/DaySuffix/5",
"text": "th"
},
"$:/language/Date/DaySuffix/6": {
"title": "$:/language/Date/DaySuffix/6",
"text": "th"
},
"$:/language/Date/DaySuffix/7": {
"title": "$:/language/Date/DaySuffix/7",
"text": "th"
},
"$:/language/Date/DaySuffix/8": {
"title": "$:/language/Date/DaySuffix/8",
"text": "th"
},
"$:/language/Date/DaySuffix/9": {
"title": "$:/language/Date/DaySuffix/9",
"text": "th"
},
"$:/language/Date/DaySuffix/10": {
"title": "$:/language/Date/DaySuffix/10",
"text": "th"
},
"$:/language/Date/DaySuffix/11": {
"title": "$:/language/Date/DaySuffix/11",
"text": "th"
},
"$:/language/Date/DaySuffix/12": {
"title": "$:/language/Date/DaySuffix/12",
"text": "th"
},
"$:/language/Date/DaySuffix/13": {
"title": "$:/language/Date/DaySuffix/13",
"text": "th"
},
"$:/language/Date/DaySuffix/14": {
"title": "$:/language/Date/DaySuffix/14",
"text": "th"
},
"$:/language/Date/DaySuffix/15": {
"title": "$:/language/Date/DaySuffix/15",
"text": "th"
},
"$:/language/Date/DaySuffix/16": {
"title": "$:/language/Date/DaySuffix/16",
"text": "th"
},
"$:/language/Date/DaySuffix/17": {
"title": "$:/language/Date/DaySuffix/17",
"text": "th"
},
"$:/language/Date/DaySuffix/18": {
"title": "$:/language/Date/DaySuffix/18",
"text": "th"
},
"$:/language/Date/DaySuffix/19": {
"title": "$:/language/Date/DaySuffix/19",
"text": "th"
},
"$:/language/Date/DaySuffix/20": {
"title": "$:/language/Date/DaySuffix/20",
"text": "th"
},
"$:/language/Date/DaySuffix/21": {
"title": "$:/language/Date/DaySuffix/21",
"text": "st"
},
"$:/language/Date/DaySuffix/22": {
"title": "$:/language/Date/DaySuffix/22",
"text": "nd"
},
"$:/language/Date/DaySuffix/23": {
"title": "$:/language/Date/DaySuffix/23",
"text": "rd"
},
"$:/language/Date/DaySuffix/24": {
"title": "$:/language/Date/DaySuffix/24",
"text": "th"
},
"$:/language/Date/DaySuffix/25": {
"title": "$:/language/Date/DaySuffix/25",
"text": "th"
},
"$:/language/Date/DaySuffix/26": {
"title": "$:/language/Date/DaySuffix/26",
"text": "th"
},
"$:/language/Date/DaySuffix/27": {
"title": "$:/language/Date/DaySuffix/27",
"text": "th"
},
"$:/language/Date/DaySuffix/28": {
"title": "$:/language/Date/DaySuffix/28",
"text": "th"
},
"$:/language/Date/DaySuffix/29": {
"title": "$:/language/Date/DaySuffix/29",
"text": "th"
},
"$:/language/Date/DaySuffix/30": {
"title": "$:/language/Date/DaySuffix/30",
"text": "th"
},
"$:/language/Date/DaySuffix/31": {
"title": "$:/language/Date/DaySuffix/31",
"text": "st"
},
"$:/language/Date/Long/Day/0": {
"title": "$:/language/Date/Long/Day/0",
"text": "Sunday"
},
"$:/language/Date/Long/Day/1": {
"title": "$:/language/Date/Long/Day/1",
"text": "Monday"
},
"$:/language/Date/Long/Day/2": {
"title": "$:/language/Date/Long/Day/2",
"text": "Tuesday"
},
"$:/language/Date/Long/Day/3": {
"title": "$:/language/Date/Long/Day/3",
"text": "Wednesday"
},
"$:/language/Date/Long/Day/4": {
"title": "$:/language/Date/Long/Day/4",
"text": "Thursday"
},
"$:/language/Date/Long/Day/5": {
"title": "$:/language/Date/Long/Day/5",
"text": "Friday"
},
"$:/language/Date/Long/Day/6": {
"title": "$:/language/Date/Long/Day/6",
"text": "Saturday"
},
"$:/language/Date/Long/Month/1": {
"title": "$:/language/Date/Long/Month/1",
"text": "January"
},
"$:/language/Date/Long/Month/2": {
"title": "$:/language/Date/Long/Month/2",
"text": "February"
},
"$:/language/Date/Long/Month/3": {
"title": "$:/language/Date/Long/Month/3",
"text": "March"
},
"$:/language/Date/Long/Month/4": {
"title": "$:/language/Date/Long/Month/4",
"text": "April"
},
"$:/language/Date/Long/Month/5": {
"title": "$:/language/Date/Long/Month/5",
"text": "May"
},
"$:/language/Date/Long/Month/6": {
"title": "$:/language/Date/Long/Month/6",
"text": "June"
},
"$:/language/Date/Long/Month/7": {
"title": "$:/language/Date/Long/Month/7",
"text": "July"
},
"$:/language/Date/Long/Month/8": {
"title": "$:/language/Date/Long/Month/8",
"text": "August"
},
"$:/language/Date/Long/Month/9": {
"title": "$:/language/Date/Long/Month/9",
"text": "September"
},
"$:/language/Date/Long/Month/10": {
"title": "$:/language/Date/Long/Month/10",
"text": "October"
},
"$:/language/Date/Long/Month/11": {
"title": "$:/language/Date/Long/Month/11",
"text": "November"
},
"$:/language/Date/Long/Month/12": {
"title": "$:/language/Date/Long/Month/12",
"text": "December"
},
"$:/language/Date/Period/am": {
"title": "$:/language/Date/Period/am",
"text": "am"
},
"$:/language/Date/Period/pm": {
"title": "$:/language/Date/Period/pm",
"text": "pm"
},
"$:/language/Date/Short/Day/0": {
"title": "$:/language/Date/Short/Day/0",
"text": "Sun"
},
"$:/language/Date/Short/Day/1": {
"title": "$:/language/Date/Short/Day/1",
"text": "Mon"
},
"$:/language/Date/Short/Day/2": {
"title": "$:/language/Date/Short/Day/2",
"text": "Tue"
},
"$:/language/Date/Short/Day/3": {
"title": "$:/language/Date/Short/Day/3",
"text": "Wed"
},
"$:/language/Date/Short/Day/4": {
"title": "$:/language/Date/Short/Day/4",
"text": "Thu"
},
"$:/language/Date/Short/Day/5": {
"title": "$:/language/Date/Short/Day/5",
"text": "Fri"
},
"$:/language/Date/Short/Day/6": {
"title": "$:/language/Date/Short/Day/6",
"text": "Sat"
},
"$:/language/Date/Short/Month/1": {
"title": "$:/language/Date/Short/Month/1",
"text": "Jan"
},
"$:/language/Date/Short/Month/2": {
"title": "$:/language/Date/Short/Month/2",
"text": "Feb"
},
"$:/language/Date/Short/Month/3": {
"title": "$:/language/Date/Short/Month/3",
"text": "Mar"
},
"$:/language/Date/Short/Month/4": {
"title": "$:/language/Date/Short/Month/4",
"text": "Apr"
},
"$:/language/Date/Short/Month/5": {
"title": "$:/language/Date/Short/Month/5",
"text": "May"
},
"$:/language/Date/Short/Month/6": {
"title": "$:/language/Date/Short/Month/6",
"text": "Jun"
},
"$:/language/Date/Short/Month/7": {
"title": "$:/language/Date/Short/Month/7",
"text": "Jul"
},
"$:/language/Date/Short/Month/8": {
"title": "$:/language/Date/Short/Month/8",
"text": "Aug"
},
"$:/language/Date/Short/Month/9": {
"title": "$:/language/Date/Short/Month/9",
"text": "Sep"
},
"$:/language/Date/Short/Month/10": {
"title": "$:/language/Date/Short/Month/10",
"text": "Oct"
},
"$:/language/Date/Short/Month/11": {
"title": "$:/language/Date/Short/Month/11",
"text": "Nov"
},
"$:/language/Date/Short/Month/12": {
"title": "$:/language/Date/Short/Month/12",
"text": "Dec"
},
"$:/language/RelativeDate/Future/Days": {
"title": "$:/language/RelativeDate/Future/Days",
"text": "<<period>> days from now"
},
"$:/language/RelativeDate/Future/Hours": {
"title": "$:/language/RelativeDate/Future/Hours",
"text": "<<period>> hours from now"
},
"$:/language/RelativeDate/Future/Minutes": {
"title": "$:/language/RelativeDate/Future/Minutes",
"text": "<<period>> minutes from now"
},
"$:/language/RelativeDate/Future/Months": {
"title": "$:/language/RelativeDate/Future/Months",
"text": "<<period>> months from now"
},
"$:/language/RelativeDate/Future/Second": {
"title": "$:/language/RelativeDate/Future/Second",
"text": "1 second from now"
},
"$:/language/RelativeDate/Future/Seconds": {
"title": "$:/language/RelativeDate/Future/Seconds",
"text": "<<period>> seconds from now"
},
"$:/language/RelativeDate/Future/Years": {
"title": "$:/language/RelativeDate/Future/Years",
"text": "<<period>> years from now"
},
"$:/language/RelativeDate/Past/Days": {
"title": "$:/language/RelativeDate/Past/Days",
"text": "<<period>> days ago"
},
"$:/language/RelativeDate/Past/Hours": {
"title": "$:/language/RelativeDate/Past/Hours",
"text": "<<period>> hours ago"
},
"$:/language/RelativeDate/Past/Minutes": {
"title": "$:/language/RelativeDate/Past/Minutes",
"text": "<<period>> minutes ago"
},
"$:/language/RelativeDate/Past/Months": {
"title": "$:/language/RelativeDate/Past/Months",
"text": "<<period>> months ago"
},
"$:/language/RelativeDate/Past/Second": {
"title": "$:/language/RelativeDate/Past/Second",
"text": "1 second ago"
},
"$:/language/RelativeDate/Past/Seconds": {
"title": "$:/language/RelativeDate/Past/Seconds",
"text": "<<period>> seconds ago"
},
"$:/language/RelativeDate/Past/Years": {
"title": "$:/language/RelativeDate/Past/Years",
"text": "<<period>> years ago"
},
"$:/language/Docs/ModuleTypes/allfilteroperator": {
"title": "$:/language/Docs/ModuleTypes/allfilteroperator",
"text": "A sub-operator for the ''all'' filter operator."
},
"$:/language/Docs/ModuleTypes/animation": {
"title": "$:/language/Docs/ModuleTypes/animation",
"text": "Animations that may be used with the RevealWidget."
},
"$:/language/Docs/ModuleTypes/authenticator": {
"title": "$:/language/Docs/ModuleTypes/authenticator",
"text": "Defines how requests are authenticated by the built-in HTTP server."
},
"$:/language/Docs/ModuleTypes/bitmapeditoroperation": {
"title": "$:/language/Docs/ModuleTypes/bitmapeditoroperation",
"text": "A bitmap editor toolbar operation."
},
"$:/language/Docs/ModuleTypes/command": {
"title": "$:/language/Docs/ModuleTypes/command",
"text": "Commands that can be executed under Node.js."
},
"$:/language/Docs/ModuleTypes/config": {
"title": "$:/language/Docs/ModuleTypes/config",
"text": "Data to be inserted into `$tw.config`."
},
"$:/language/Docs/ModuleTypes/filteroperator": {
"title": "$:/language/Docs/ModuleTypes/filteroperator",
"text": "Individual filter operator methods."
},
"$:/language/Docs/ModuleTypes/global": {
"title": "$:/language/Docs/ModuleTypes/global",
"text": "Global data to be inserted into `$tw`."
},
"$:/language/Docs/ModuleTypes/info": {
"title": "$:/language/Docs/ModuleTypes/info",
"text": "Publishes system information via the [[$:/temp/info-plugin]] pseudo-plugin."
},
"$:/language/Docs/ModuleTypes/isfilteroperator": {
"title": "$:/language/Docs/ModuleTypes/isfilteroperator",
"text": "Operands for the ''is'' filter operator."
},
"$:/language/Docs/ModuleTypes/library": {
"title": "$:/language/Docs/ModuleTypes/library",
"text": "Generic module type for general purpose JavaScript modules."
},
"$:/language/Docs/ModuleTypes/macro": {
"title": "$:/language/Docs/ModuleTypes/macro",
"text": "JavaScript macro definitions."
},
"$:/language/Docs/ModuleTypes/parser": {
"title": "$:/language/Docs/ModuleTypes/parser",
"text": "Parsers for different content types."
},
"$:/language/Docs/ModuleTypes/route": {
"title": "$:/language/Docs/ModuleTypes/route",
"text": "Defines how individual URL patterns are handled by the built-in HTTP server."
},
"$:/language/Docs/ModuleTypes/saver": {
"title": "$:/language/Docs/ModuleTypes/saver",
"text": "Savers handle different methods for saving files from the browser."
},
"$:/language/Docs/ModuleTypes/startup": {
"title": "$:/language/Docs/ModuleTypes/startup",
"text": "Startup functions."
},
"$:/language/Docs/ModuleTypes/storyview": {
"title": "$:/language/Docs/ModuleTypes/storyview",
"text": "Story views customise the animation and behaviour of list widgets."
},
"$:/language/Docs/ModuleTypes/texteditoroperation": {
"title": "$:/language/Docs/ModuleTypes/texteditoroperation",
"text": "A text editor toolbar operation."
},
"$:/language/Docs/ModuleTypes/tiddlerdeserializer": {
"title": "$:/language/Docs/ModuleTypes/tiddlerdeserializer",
"text": "Converts different content types into tiddlers."
},
"$:/language/Docs/ModuleTypes/tiddlerfield": {
"title": "$:/language/Docs/ModuleTypes/tiddlerfield",
"text": "Defines the behaviour of an individual tiddler field."
},
"$:/language/Docs/ModuleTypes/tiddlermethod": {
"title": "$:/language/Docs/ModuleTypes/tiddlermethod",
"text": "Adds methods to the `$tw.Tiddler` prototype."
},
"$:/language/Docs/ModuleTypes/upgrader": {
"title": "$:/language/Docs/ModuleTypes/upgrader",
"text": "Applies upgrade processing to tiddlers during an upgrade/import."
},
"$:/language/Docs/ModuleTypes/utils": {
"title": "$:/language/Docs/ModuleTypes/utils",
"text": "Adds methods to `$tw.utils`."
},
"$:/language/Docs/ModuleTypes/utils-node": {
"title": "$:/language/Docs/ModuleTypes/utils-node",
"text": "Adds Node.js-specific methods to `$tw.utils`."
},
"$:/language/Docs/ModuleTypes/widget": {
"title": "$:/language/Docs/ModuleTypes/widget",
"text": "Widgets encapsulate DOM rendering and refreshing."
},
"$:/language/Docs/ModuleTypes/wikimethod": {
"title": "$:/language/Docs/ModuleTypes/wikimethod",
"text": "Adds methods to `$tw.Wiki`."
},
"$:/language/Docs/ModuleTypes/wikirule": {
"title": "$:/language/Docs/ModuleTypes/wikirule",
"text": "Individual parser rules for the main WikiText parser."
},
"$:/language/Docs/PaletteColours/alert-background": {
"title": "$:/language/Docs/PaletteColours/alert-background",
"text": "Alert background"
},
"$:/language/Docs/PaletteColours/alert-border": {
"title": "$:/language/Docs/PaletteColours/alert-border",
"text": "Alert border"
},
"$:/language/Docs/PaletteColours/alert-highlight": {
"title": "$:/language/Docs/PaletteColours/alert-highlight",
"text": "Alert highlight"
},
"$:/language/Docs/PaletteColours/alert-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/alert-muted-foreground",
"text": "Alert muted foreground"
},
"$:/language/Docs/PaletteColours/background": {
"title": "$:/language/Docs/PaletteColours/background",
"text": "General background"
},
"$:/language/Docs/PaletteColours/blockquote-bar": {
"title": "$:/language/Docs/PaletteColours/blockquote-bar",
"text": "Blockquote bar"
},
"$:/language/Docs/PaletteColours/button-background": {
"title": "$:/language/Docs/PaletteColours/button-background",
"text": "Default button background"
},
"$:/language/Docs/PaletteColours/button-border": {
"title": "$:/language/Docs/PaletteColours/button-border",
"text": "Default button border"
},
"$:/language/Docs/PaletteColours/button-foreground": {
"title": "$:/language/Docs/PaletteColours/button-foreground",
"text": "Default button foreground"
},
"$:/language/Docs/PaletteColours/dirty-indicator": {
"title": "$:/language/Docs/PaletteColours/dirty-indicator",
"text": "Unsaved changes indicator"
},
"$:/language/Docs/PaletteColours/code-background": {
"title": "$:/language/Docs/PaletteColours/code-background",
"text": "Code background"
},
"$:/language/Docs/PaletteColours/code-border": {
"title": "$:/language/Docs/PaletteColours/code-border",
"text": "Code border"
},
"$:/language/Docs/PaletteColours/code-foreground": {
"title": "$:/language/Docs/PaletteColours/code-foreground",
"text": "Code foreground"
},
"$:/language/Docs/PaletteColours/download-background": {
"title": "$:/language/Docs/PaletteColours/download-background",
"text": "Download button background"
},
"$:/language/Docs/PaletteColours/download-foreground": {
"title": "$:/language/Docs/PaletteColours/download-foreground",
"text": "Download button foreground"
},
"$:/language/Docs/PaletteColours/dragger-background": {
"title": "$:/language/Docs/PaletteColours/dragger-background",
"text": "Dragger background"
},
"$:/language/Docs/PaletteColours/dragger-foreground": {
"title": "$:/language/Docs/PaletteColours/dragger-foreground",
"text": "Dragger foreground"
},
"$:/language/Docs/PaletteColours/dropdown-background": {
"title": "$:/language/Docs/PaletteColours/dropdown-background",
"text": "Dropdown background"
},
"$:/language/Docs/PaletteColours/dropdown-border": {
"title": "$:/language/Docs/PaletteColours/dropdown-border",
"text": "Dropdown border"
},
"$:/language/Docs/PaletteColours/dropdown-tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/dropdown-tab-background-selected",
"text": "Dropdown tab background for selected tabs"
},
"$:/language/Docs/PaletteColours/dropdown-tab-background": {
"title": "$:/language/Docs/PaletteColours/dropdown-tab-background",
"text": "Dropdown tab background"
},
"$:/language/Docs/PaletteColours/dropzone-background": {
"title": "$:/language/Docs/PaletteColours/dropzone-background",
"text": "Dropzone background"
},
"$:/language/Docs/PaletteColours/external-link-background-hover": {
"title": "$:/language/Docs/PaletteColours/external-link-background-hover",
"text": "External link background hover"
},
"$:/language/Docs/PaletteColours/external-link-background-visited": {
"title": "$:/language/Docs/PaletteColours/external-link-background-visited",
"text": "External link background visited"
},
"$:/language/Docs/PaletteColours/external-link-background": {
"title": "$:/language/Docs/PaletteColours/external-link-background",
"text": "External link background"
},
"$:/language/Docs/PaletteColours/external-link-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground-hover",
"text": "External link foreground hover"
},
"$:/language/Docs/PaletteColours/external-link-foreground-visited": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground-visited",
"text": "External link foreground visited"
},
"$:/language/Docs/PaletteColours/external-link-foreground": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground",
"text": "External link foreground"
},
"$:/language/Docs/PaletteColours/foreground": {
"title": "$:/language/Docs/PaletteColours/foreground",
"text": "General foreground"
},
"$:/language/Docs/PaletteColours/menubar-background": {
"title": "$:/language/Docs/PaletteColours/menubar-background",
"text": "Menu bar background"
},
"$:/language/Docs/PaletteColours/menubar-foreground": {
"title": "$:/language/Docs/PaletteColours/menubar-foreground",
"text": "Menu bar foreground"
},
"$:/language/Docs/PaletteColours/message-background": {
"title": "$:/language/Docs/PaletteColours/message-background",
"text": "Message box background"
},
"$:/language/Docs/PaletteColours/message-border": {
"title": "$:/language/Docs/PaletteColours/message-border",
"text": "Message box border"
},
"$:/language/Docs/PaletteColours/message-foreground": {
"title": "$:/language/Docs/PaletteColours/message-foreground",
"text": "Message box foreground"
},
"$:/language/Docs/PaletteColours/modal-backdrop": {
"title": "$:/language/Docs/PaletteColours/modal-backdrop",
"text": "Modal backdrop"
},
"$:/language/Docs/PaletteColours/modal-background": {
"title": "$:/language/Docs/PaletteColours/modal-background",
"text": "Modal background"
},
"$:/language/Docs/PaletteColours/modal-border": {
"title": "$:/language/Docs/PaletteColours/modal-border",
"text": "Modal border"
},
"$:/language/Docs/PaletteColours/modal-footer-background": {
"title": "$:/language/Docs/PaletteColours/modal-footer-background",
"text": "Modal footer background"
},
"$:/language/Docs/PaletteColours/modal-footer-border": {
"title": "$:/language/Docs/PaletteColours/modal-footer-border",
"text": "Modal footer border"
},
"$:/language/Docs/PaletteColours/modal-header-border": {
"title": "$:/language/Docs/PaletteColours/modal-header-border",
"text": "Modal header border"
},
"$:/language/Docs/PaletteColours/muted-foreground": {
"title": "$:/language/Docs/PaletteColours/muted-foreground",
"text": "General muted foreground"
},
"$:/language/Docs/PaletteColours/notification-background": {
"title": "$:/language/Docs/PaletteColours/notification-background",
"text": "Notification background"
},
"$:/language/Docs/PaletteColours/notification-border": {
"title": "$:/language/Docs/PaletteColours/notification-border",
"text": "Notification border"
},
"$:/language/Docs/PaletteColours/page-background": {
"title": "$:/language/Docs/PaletteColours/page-background",
"text": "Page background"
},
"$:/language/Docs/PaletteColours/pre-background": {
"title": "$:/language/Docs/PaletteColours/pre-background",
"text": "Preformatted code background"
},
"$:/language/Docs/PaletteColours/pre-border": {
"title": "$:/language/Docs/PaletteColours/pre-border",
"text": "Preformatted code border"
},
"$:/language/Docs/PaletteColours/primary": {
"title": "$:/language/Docs/PaletteColours/primary",
"text": "General primary"
},
"$:/language/Docs/PaletteColours/select-tag-background": {
"title": "$:/language/Docs/PaletteColours/select-tag-background",
"text": "`<select>` element background"
},
"$:/language/Docs/PaletteColours/select-tag-foreground": {
"title": "$:/language/Docs/PaletteColours/select-tag-foreground",
"text": "`<select>` element text"
},
"$:/language/Docs/PaletteColours/sidebar-button-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-button-foreground",
"text": "Sidebar button foreground"
},
"$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover",
"text": "Sidebar controls foreground hover"
},
"$:/language/Docs/PaletteColours/sidebar-controls-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground",
"text": "Sidebar controls foreground"
},
"$:/language/Docs/PaletteColours/sidebar-foreground-shadow": {
"title": "$:/language/Docs/PaletteColours/sidebar-foreground-shadow",
"text": "Sidebar foreground shadow"
},
"$:/language/Docs/PaletteColours/sidebar-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-foreground",
"text": "Sidebar foreground"
},
"$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover",
"text": "Sidebar muted foreground hover"
},
"$:/language/Docs/PaletteColours/sidebar-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground",
"text": "Sidebar muted foreground"
},
"$:/language/Docs/PaletteColours/sidebar-tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-background-selected",
"text": "Sidebar tab background for selected tabs"
},
"$:/language/Docs/PaletteColours/sidebar-tab-background": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-background",
"text": "Sidebar tab background"
},
"$:/language/Docs/PaletteColours/sidebar-tab-border-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-border-selected",
"text": "Sidebar tab border for selected tabs"
},
"$:/language/Docs/PaletteColours/sidebar-tab-border": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-border",
"text": "Sidebar tab border"
},
"$:/language/Docs/PaletteColours/sidebar-tab-divider": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-divider",
"text": "Sidebar tab divider"
},
"$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected",
"text": "Sidebar tab foreground for selected tabs"
},
"$:/language/Docs/PaletteColours/sidebar-tab-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground",
"text": "Sidebar tab foreground"
},
"$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover",
"text": "Sidebar tiddler link foreground hover"
},
"$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground",
"text": "Sidebar tiddler link foreground"
},
"$:/language/Docs/PaletteColours/site-title-foreground": {
"title": "$:/language/Docs/PaletteColours/site-title-foreground",
"text": "Site title foreground"
},
"$:/language/Docs/PaletteColours/static-alert-foreground": {
"title": "$:/language/Docs/PaletteColours/static-alert-foreground",
"text": "Static alert foreground"
},
"$:/language/Docs/PaletteColours/tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/tab-background-selected",
"text": "Tab background for selected tabs"
},
"$:/language/Docs/PaletteColours/tab-background": {
"title": "$:/language/Docs/PaletteColours/tab-background",
"text": "Tab background"
},
"$:/language/Docs/PaletteColours/tab-border-selected": {
"title": "$:/language/Docs/PaletteColours/tab-border-selected",
"text": "Tab border for selected tabs"
},
"$:/language/Docs/PaletteColours/tab-border": {
"title": "$:/language/Docs/PaletteColours/tab-border",
"text": "Tab border"
},
"$:/language/Docs/PaletteColours/tab-divider": {
"title": "$:/language/Docs/PaletteColours/tab-divider",
"text": "Tab divider"
},
"$:/language/Docs/PaletteColours/tab-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/tab-foreground-selected",
"text": "Tab foreground for selected tabs"
},
"$:/language/Docs/PaletteColours/tab-foreground": {
"title": "$:/language/Docs/PaletteColours/tab-foreground",
"text": "Tab foreground"
},
"$:/language/Docs/PaletteColours/table-border": {
"title": "$:/language/Docs/PaletteColours/table-border",
"text": "Table border"
},
"$:/language/Docs/PaletteColours/table-footer-background": {
"title": "$:/language/Docs/PaletteColours/table-footer-background",
"text": "Table footer background"
},
"$:/language/Docs/PaletteColours/table-header-background": {
"title": "$:/language/Docs/PaletteColours/table-header-background",
"text": "Table header background"
},
"$:/language/Docs/PaletteColours/tag-background": {
"title": "$:/language/Docs/PaletteColours/tag-background",
"text": "Tag background"
},
"$:/language/Docs/PaletteColours/tag-foreground": {
"title": "$:/language/Docs/PaletteColours/tag-foreground",
"text": "Tag foreground"
},
"$:/language/Docs/PaletteColours/tiddler-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-background",
"text": "Tiddler background"
},
"$:/language/Docs/PaletteColours/tiddler-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-border",
"text": "Tiddler border"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover",
"text": "Tiddler controls foreground hover"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected",
"text": "Tiddler controls foreground for selected controls"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground",
"text": "Tiddler controls foreground"
},
"$:/language/Docs/PaletteColours/tiddler-editor-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-background",
"text": "Tiddler editor background"
},
"$:/language/Docs/PaletteColours/tiddler-editor-border-image": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-border-image",
"text": "Tiddler editor border image"
},
"$:/language/Docs/PaletteColours/tiddler-editor-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-border",
"text": "Tiddler editor border"
},
"$:/language/Docs/PaletteColours/tiddler-editor-fields-even": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-even",
"text": "Tiddler editor background for even fields"
},
"$:/language/Docs/PaletteColours/tiddler-editor-fields-odd": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd",
"text": "Tiddler editor background for odd fields"
},
"$:/language/Docs/PaletteColours/tiddler-info-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-background",
"text": "Tiddler info panel background"
},
"$:/language/Docs/PaletteColours/tiddler-info-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-border",
"text": "Tiddler info panel border"
},
"$:/language/Docs/PaletteColours/tiddler-info-tab-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-tab-background",
"text": "Tiddler info panel tab background"
},
"$:/language/Docs/PaletteColours/tiddler-link-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-link-background",
"text": "Tiddler link background"
},
"$:/language/Docs/PaletteColours/tiddler-link-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-link-foreground",
"text": "Tiddler link foreground"
},
"$:/language/Docs/PaletteColours/tiddler-subtitle-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground",
"text": "Tiddler subtitle foreground"
},
"$:/language/Docs/PaletteColours/tiddler-title-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-title-foreground",
"text": "Tiddler title foreground"
},
"$:/language/Docs/PaletteColours/toolbar-new-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-new-button",
"text": "Toolbar 'new tiddler' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-options-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-options-button",
"text": "Toolbar 'options' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-save-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-save-button",
"text": "Toolbar 'save' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-info-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-info-button",
"text": "Toolbar 'info' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-edit-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-edit-button",
"text": "Toolbar 'edit' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-close-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-close-button",
"text": "Toolbar 'close' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-delete-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-delete-button",
"text": "Toolbar 'delete' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-cancel-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-cancel-button",
"text": "Toolbar 'cancel' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-done-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-done-button",
"text": "Toolbar 'done' button foreground"
},
"$:/language/Docs/PaletteColours/untagged-background": {
"title": "$:/language/Docs/PaletteColours/untagged-background",
"text": "Untagged pill background"
},
"$:/language/Docs/PaletteColours/very-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/very-muted-foreground",
"text": "Very muted foreground"
},
"$:/language/EditTemplate/Body/External/Hint": {
"title": "$:/language/EditTemplate/Body/External/Hint",
"text": "This tiddler shows content stored outside of the main TiddlyWiki file. You can edit the tags and fields but cannot directly edit the content itself"
},
"$:/language/EditTemplate/Body/Placeholder": {
"title": "$:/language/EditTemplate/Body/Placeholder",
"text": "Type the text for this tiddler"
},
"$:/language/EditTemplate/Body/Preview/Type/Output": {
"title": "$:/language/EditTemplate/Body/Preview/Type/Output",
"text": "output"
},
"$:/language/EditTemplate/Field/Remove/Caption": {
"title": "$:/language/EditTemplate/Field/Remove/Caption",
"text": "remove field"
},
"$:/language/EditTemplate/Field/Remove/Hint": {
"title": "$:/language/EditTemplate/Field/Remove/Hint",
"text": "Remove field"
},
"$:/language/EditTemplate/Field/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Field/Dropdown/Caption",
"text": "field list"
},
"$:/language/EditTemplate/Field/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Field/Dropdown/Hint",
"text": "Show field list"
},
"$:/language/EditTemplate/Fields/Add/Button": {
"title": "$:/language/EditTemplate/Fields/Add/Button",
"text": "add"
},
"$:/language/EditTemplate/Fields/Add/Button/Hint": {
"title": "$:/language/EditTemplate/Fields/Add/Button/Hint",
"text": "Add the new field to the tiddler"
},
"$:/language/EditTemplate/Fields/Add/Name/Placeholder": {
"title": "$:/language/EditTemplate/Fields/Add/Name/Placeholder",
"text": "field name"
},
"$:/language/EditTemplate/Fields/Add/Prompt": {
"title": "$:/language/EditTemplate/Fields/Add/Prompt",
"text": "Add a new field:"
},
"$:/language/EditTemplate/Fields/Add/Value/Placeholder": {
"title": "$:/language/EditTemplate/Fields/Add/Value/Placeholder",
"text": "field value"
},
"$:/language/EditTemplate/Fields/Add/Dropdown/System": {
"title": "$:/language/EditTemplate/Fields/Add/Dropdown/System",
"text": "System fields"
},
"$:/language/EditTemplate/Fields/Add/Dropdown/User": {
"title": "$:/language/EditTemplate/Fields/Add/Dropdown/User",
"text": "User fields"
},
"$:/language/EditTemplate/Shadow/Warning": {
"title": "$:/language/EditTemplate/Shadow/Warning",
"text": "This is a shadow tiddler. Any changes you make will override the default version from the plugin <<pluginLink>>"
},
"$:/language/EditTemplate/Shadow/OverriddenWarning": {
"title": "$:/language/EditTemplate/Shadow/OverriddenWarning",
"text": "This is a modified shadow tiddler. You can revert to the default version in the plugin <<pluginLink>> by deleting this tiddler"
},
"$:/language/EditTemplate/Tags/Add/Button": {
"title": "$:/language/EditTemplate/Tags/Add/Button",
"text": "add"
},
"$:/language/EditTemplate/Tags/Add/Button/Hint": {
"title": "$:/language/EditTemplate/Tags/Add/Button/Hint",
"text": "add tag"
},
"$:/language/EditTemplate/Tags/Add/Placeholder": {
"title": "$:/language/EditTemplate/Tags/Add/Placeholder",
"text": "tag name"
},
"$:/language/EditTemplate/Tags/ClearInput/Caption": {
"title": "$:/language/EditTemplate/Tags/ClearInput/Caption",
"text": "clear input"
},
"$:/language/EditTemplate/Tags/ClearInput/Hint": {
"title": "$:/language/EditTemplate/Tags/ClearInput/Hint",
"text": "Clear tag input"
},
"$:/language/EditTemplate/Tags/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Tags/Dropdown/Caption",
"text": "tag list"
},
"$:/language/EditTemplate/Tags/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Tags/Dropdown/Hint",
"text": "Show tag list"
},
"$:/language/EditTemplate/Title/BadCharacterWarning": {
"title": "$:/language/EditTemplate/Title/BadCharacterWarning",
"text": "Warning: avoid using any of the characters <<bad-chars>> in tiddler titles"
},
"$:/language/EditTemplate/Title/Exists/Prompt": {
"title": "$:/language/EditTemplate/Title/Exists/Prompt",
"text": "Target tiddler already exists"
},
"$:/language/EditTemplate/Title/Relink/Prompt": {
"title": "$:/language/EditTemplate/Title/Relink/Prompt",
"text": "Update ''<$text text=<<fromTitle>>/>'' to ''<$text text=<<toTitle>>/>'' in the //tags// and //list// fields of other tiddlers"
},
"$:/language/EditTemplate/Title/References/Prompt": {
"title": "$:/language/EditTemplate/Title/References/Prompt",
"text": "The following references to this tiddler will not be automatically updated:"
},
"$:/language/EditTemplate/Type/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Type/Dropdown/Caption",
"text": "content type list"
},
"$:/language/EditTemplate/Type/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Type/Dropdown/Hint",
"text": "Show content type list"
},
"$:/language/EditTemplate/Type/Delete/Caption": {
"title": "$:/language/EditTemplate/Type/Delete/Caption",
"text": "delete content type"
},
"$:/language/EditTemplate/Type/Delete/Hint": {
"title": "$:/language/EditTemplate/Type/Delete/Hint",
"text": "Delete content type"
},
"$:/language/EditTemplate/Type/Placeholder": {
"title": "$:/language/EditTemplate/Type/Placeholder",
"text": "content type"
},
"$:/language/EditTemplate/Type/Prompt": {
"title": "$:/language/EditTemplate/Type/Prompt",
"text": "Type:"
},
"$:/language/Exporters/StaticRiver": {
"title": "$:/language/Exporters/StaticRiver",
"text": "Static HTML"
},
"$:/language/Exporters/JsonFile": {
"title": "$:/language/Exporters/JsonFile",
"text": "JSON file"
},
"$:/language/Exporters/CsvFile": {
"title": "$:/language/Exporters/CsvFile",
"text": "CSV file"
},
"$:/language/Exporters/TidFile": {
"title": "$:/language/Exporters/TidFile",
"text": "\".tid\" file"
},
"$:/language/Docs/Fields/_canonical_uri": {
"title": "$:/language/Docs/Fields/_canonical_uri",
"text": "The full URI of an external image tiddler"
},
"$:/language/Docs/Fields/bag": {
"title": "$:/language/Docs/Fields/bag",
"text": "The name of the bag from which a tiddler came"
},
"$:/language/Docs/Fields/caption": {
"title": "$:/language/Docs/Fields/caption",
"text": "The text to be displayed on a tab or button"
},
"$:/language/Docs/Fields/color": {
"title": "$:/language/Docs/Fields/color",
"text": "The CSS color value associated with a tiddler"
},
"$:/language/Docs/Fields/component": {
"title": "$:/language/Docs/Fields/component",
"text": "The name of the component responsible for an [[alert tiddler|AlertMechanism]]"
},
"$:/language/Docs/Fields/current-tiddler": {
"title": "$:/language/Docs/Fields/current-tiddler",
"text": "Used to cache the top tiddler in a [[history list|HistoryMechanism]]"
},
"$:/language/Docs/Fields/created": {
"title": "$:/language/Docs/Fields/created",
"text": "The date a tiddler was created"
},
"$:/language/Docs/Fields/creator": {
"title": "$:/language/Docs/Fields/creator",
"text": "The name of the person who created a tiddler"
},
"$:/language/Docs/Fields/dependents": {
"title": "$:/language/Docs/Fields/dependents",
"text": "For a plugin, lists the dependent plugin titles"
},
"$:/language/Docs/Fields/description": {
"title": "$:/language/Docs/Fields/description",
"text": "The descriptive text for a plugin, or a modal dialogue"
},
"$:/language/Docs/Fields/draft.of": {
"title": "$:/language/Docs/Fields/draft.of",
"text": "For draft tiddlers, contains the title of the tiddler of which this is a draft"
},
"$:/language/Docs/Fields/draft.title": {
"title": "$:/language/Docs/Fields/draft.title",
"text": "For draft tiddlers, contains the proposed new title of the tiddler"
},
"$:/language/Docs/Fields/footer": {
"title": "$:/language/Docs/Fields/footer",
"text": "The footer text for a wizard"
},
"$:/language/Docs/Fields/hide-body": {
"title": "$:/language/Docs/Fields/hide-body",
"text": "The view template will hide bodies of tiddlers if set to: ''yes''"
},
"$:/language/Docs/Fields/icon": {
"title": "$:/language/Docs/Fields/icon",
"text": "The title of the tiddler containing the icon associated with a tiddler"
},
"$:/language/Docs/Fields/library": {
"title": "$:/language/Docs/Fields/library",
"text": "Indicates that a tiddler should be saved as a JavaScript library if set to: ''yes''"
},
"$:/language/Docs/Fields/list": {
"title": "$:/language/Docs/Fields/list",
"text": "An ordered list of tiddler titles associated with a tiddler"
},
"$:/language/Docs/Fields/list-before": {
"title": "$:/language/Docs/Fields/list-before",
"text": "If set, the title of a tiddler before which this tiddler should be added to the ordered list of tiddler titles, or at the start of the list if this field is present but empty"
},
"$:/language/Docs/Fields/list-after": {
"title": "$:/language/Docs/Fields/list-after",
"text": "If set, the title of the tiddler after which this tiddler should be added to the ordered list of tiddler titles, or at the end of the list if this field is present but empty"
},
"$:/language/Docs/Fields/modified": {
"title": "$:/language/Docs/Fields/modified",
"text": "The date and time at which a tiddler was last modified"
},
"$:/language/Docs/Fields/modifier": {
"title": "$:/language/Docs/Fields/modifier",
"text": "The tiddler title associated with the person who last modified a tiddler"
},
"$:/language/Docs/Fields/name": {
"title": "$:/language/Docs/Fields/name",
"text": "The human readable name associated with a plugin tiddler"
},
"$:/language/Docs/Fields/plugin-priority": {
"title": "$:/language/Docs/Fields/plugin-priority",
"text": "A numerical value indicating the priority of a plugin tiddler"
},
"$:/language/Docs/Fields/plugin-type": {
"title": "$:/language/Docs/Fields/plugin-type",
"text": "The type of plugin in a plugin tiddler"
},
"$:/language/Docs/Fields/revision": {
"title": "$:/language/Docs/Fields/revision",
"text": "The revision of the tiddler held at the server"
},
"$:/language/Docs/Fields/released": {
"title": "$:/language/Docs/Fields/released",
"text": "Date of a TiddlyWiki release"
},
"$:/language/Docs/Fields/source": {
"title": "$:/language/Docs/Fields/source",
"text": "The source URL associated with a tiddler"
},
"$:/language/Docs/Fields/subtitle": {
"title": "$:/language/Docs/Fields/subtitle",
"text": "The subtitle text for a wizard"
},
"$:/language/Docs/Fields/tags": {
"title": "$:/language/Docs/Fields/tags",
"text": "A list of tags associated with a tiddler"
},
"$:/language/Docs/Fields/text": {
"title": "$:/language/Docs/Fields/text",
"text": "The body text of a tiddler"
},
"$:/language/Docs/Fields/throttle.refresh": {
"title": "$:/language/Docs/Fields/throttle.refresh",
"text": "If present, throttles refreshes of this tiddler"
},
"$:/language/Docs/Fields/title": {
"title": "$:/language/Docs/Fields/title",
"text": "The unique name of a tiddler"
},
"$:/language/Docs/Fields/toc-link": {
"title": "$:/language/Docs/Fields/toc-link",
"text": "Suppresses the tiddler's link in a Table of Contents tree if set to: ''no''"
},
"$:/language/Docs/Fields/type": {
"title": "$:/language/Docs/Fields/type",
"text": "The content type of a tiddler"
},
"$:/language/Docs/Fields/version": {
"title": "$:/language/Docs/Fields/version",
"text": "Version information for a plugin"
},
"$:/language/Docs/Fields/_is_skinny": {
"title": "$:/language/Docs/Fields/_is_skinny",
"text": "If present, indicates that the tiddler text field must be loaded from the server"
},
"$:/language/Filters/AllTiddlers": {
"title": "$:/language/Filters/AllTiddlers",
"text": "All tiddlers except system tiddlers"
},
"$:/language/Filters/RecentSystemTiddlers": {
"title": "$:/language/Filters/RecentSystemTiddlers",
"text": "Recently modified tiddlers, including system tiddlers"
},
"$:/language/Filters/RecentTiddlers": {
"title": "$:/language/Filters/RecentTiddlers",
"text": "Recently modified tiddlers"
},
"$:/language/Filters/AllTags": {
"title": "$:/language/Filters/AllTags",
"text": "All tags except system tags"
},
"$:/language/Filters/Missing": {
"title": "$:/language/Filters/Missing",
"text": "Missing tiddlers"
},
"$:/language/Filters/Drafts": {
"title": "$:/language/Filters/Drafts",
"text": "Draft tiddlers"
},
"$:/language/Filters/Orphans": {
"title": "$:/language/Filters/Orphans",
"text": "Orphan tiddlers"
},
"$:/language/Filters/SystemTiddlers": {
"title": "$:/language/Filters/SystemTiddlers",
"text": "System tiddlers"
},
"$:/language/Filters/ShadowTiddlers": {
"title": "$:/language/Filters/ShadowTiddlers",
"text": "Shadow tiddlers"
},
"$:/language/Filters/OverriddenShadowTiddlers": {
"title": "$:/language/Filters/OverriddenShadowTiddlers",
"text": "Overridden shadow tiddlers"
},
"$:/language/Filters/SessionTiddlers": {
"title": "$:/language/Filters/SessionTiddlers",
"text": "Tiddlers modified since the wiki was loaded"
},
"$:/language/Filters/SystemTags": {
"title": "$:/language/Filters/SystemTags",
"text": "System tags"
},
"$:/language/Filters/StoryList": {
"title": "$:/language/Filters/StoryList",
"text": "Tiddlers in the story river, excluding <$text text=\"$:/AdvancedSearch\"/>"
},
"$:/language/Filters/TypedTiddlers": {
"title": "$:/language/Filters/TypedTiddlers",
"text": "Non wiki-text tiddlers"
},
"GettingStarted": {
"title": "GettingStarted",
"text": "\\define lingo-base() $:/language/ControlPanel/Basics/\nWelcome to ~TiddlyWiki and the ~TiddlyWiki community\n\nBefore you start storing important information in ~TiddlyWiki it is vital to make sure that you can reliably save changes. See https://tiddlywiki.com/#GettingStarted for details\n\n!! Set up this ~TiddlyWiki\n\n<div class=\"tc-control-panel\">\n\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n</div>\n\nSee the [[control panel|$:/ControlPanel]] for more options.\n"
},
"$:/language/Help/build": {
"title": "$:/language/Help/build",
"description": "Automatically run configured commands",
"text": "Build the specified build targets for the current wiki. If no build targets are specified then all available targets will be built.\n\n```\n--build <target> [<target> ...]\n```\n\nBuild targets are defined in the `tiddlywiki.info` file of a wiki folder.\n\n"
},
"$:/language/Help/clearpassword": {
"title": "$:/language/Help/clearpassword",
"description": "Clear a password for subsequent crypto operations",
"text": "Clear the password for subsequent crypto operations\n\n```\n--clearpassword\n```\n"
},
"$:/language/Help/default": {
"title": "$:/language/Help/default",
"text": "\\define commandTitle()\n$:/language/Help/$(command)$\n\\end\n```\nusage: tiddlywiki [<wikifolder>] [--<command> [<args>...]...]\n```\n\nAvailable commands:\n\n<ul>\n<$list filter=\"[commands[]sort[title]]\" variable=\"command\">\n<li><$link to=<<commandTitle>>><$macrocall $name=\"command\" $type=\"text/plain\" $output=\"text/plain\"/></$link>: <$transclude tiddler=<<commandTitle>> field=\"description\"/></li>\n</$list>\n</ul>\n\nTo get detailed help on a command:\n\n```\ntiddlywiki --help <command>\n```\n"
},
"$:/language/Help/deletetiddlers": {
"title": "$:/language/Help/deletetiddlers",
"description": "Deletes a group of tiddlers",
"text": "<<.from-version \"5.1.20\">> Deletes a group of tiddlers identified by a filter.\n\n```\n--deletetiddlers <filter>\n```\n"
},
"$:/language/Help/editions": {
"title": "$:/language/Help/editions",
"description": "Lists the available editions of TiddlyWiki",
"text": "Lists the names and descriptions of the available editions. You can create a new wiki of a specified edition with the `--init` command.\n\n```\n--editions\n```\n"
},
"$:/language/Help/fetch": {
"title": "$:/language/Help/fetch",
"description": "Fetch tiddlers from wiki by URL",
"text": "Fetch one or more files over HTTP/HTTPS, and import the tiddlers matching a filter, optionally transforming the incoming titles.\n\n```\n--fetch file <url> <import-filter> <transform-filter>\n--fetch files <url-filter> <import-filter> <transform-filter>\n--fetch raw-file <url> <transform-filter>\n--fetch raw-files <url-filter> <transform-filter>\n```\n\nThe \"file\" and \"files\" variants fetch the specified files and attempt to import the tiddlers within them (the same processing as if the files were dragged into the browser window). The \"raw-file\" and \"raw-files\" variants fetch the specified files and then store the raw file data in tiddlers, without applying the import logic.\n\nWith the \"file\" and \"raw-file\" variants only a single file is fetched and the first parameter is the URL of the file to read.\n\nWith the \"files\" and \"raw-files\" variants, multiple files are fetched and the first parameter is a filter yielding a list of URLs of the files to read. For example, given a set of tiddlers tagged \"remote-server\" that have a field \"url\" the filter `[tag[remote-server]get[url]]` will retrieve all the available URLs.\n\nFor the \"file\" and \"files\" variants, the `<import-filter>` parameter specifies a filter determining which tiddlers are imported. It defaults to `[all[tiddlers]]` if not provided.\n\nFor all variants, the `<transform-filter>` parameter specifies an optional filter that transforms the titles of the imported tiddlers. For example, `[addprefix[$:/myimports/]]` would add the prefix `$:/myimports/` to each title.\n\nPreceding the `--fetch` command with `--verbose` will output progress information during the import.\n\nNote that TiddlyWiki will not fetch an older version of an already loaded plugin.\n\nThe following example retrieves all the non-system tiddlers from https://tiddlywiki.com and saves them to a JSON file:\n\n```\ntiddlywiki --verbose --fetch file \"https://tiddlywiki.com/\" \"[!is[system]]\" \"\" --rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[!is[system]]\"\n```\n\nThe following example retrieves the \"favicon\" file from tiddlywiki.com and saves it in a file called \"output.ico\". Note that the intermediate tiddler \"Icon Tiddler\" is quoted in the \"--fetch\" command because it is being used as a transformation filter to replace the default title, while there are no quotes for the \"--savetiddler\" command because it is being used directly as a title.\n\n```\ntiddlywiki --verbose --fetch raw-file \"https://tiddlywiki.com/favicon.ico\" \"[[Icon Tiddler]]\" --savetiddler \"Icon Tiddler\" output.ico\n```\n\n"
},
"$:/language/Help/help": {
"title": "$:/language/Help/help",
"description": "Display help for TiddlyWiki commands",
"text": "Displays help text for a command:\n\n```\n--help [<command>]\n```\n\nIf the command name is omitted then a list of available commands is displayed.\n"
},
"$:/language/Help/import": {
"title": "$:/language/Help/import",
"description": "Import tiddlers from a file",
"text": "Import tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The deserializer must be explicitly specified, unlike the `load` command which infers the deserializer from the file extension.\n\n```\n--import <filepath> <deserializer> [<title>] [<encoding>]\n```\n\nThe deserializers in the core include:\n\n* application/javascript\n* application/json\n* application/x-tiddler\n* application/x-tiddler-html-div\n* application/x-tiddlers\n* text/html\n* text/plain\n\nThe title of the imported tiddler defaults to the filename.\n\nThe encoding defaults to \"utf8\", but can be \"base64\" for importing binary files.\n\nNote that TiddlyWiki will not import an older version of an already loaded plugin.\n"
},
"$:/language/Help/init": {
"title": "$:/language/Help/init",
"description": "Initialise a new wiki folder",
"text": "Initialise an empty [[WikiFolder|WikiFolders]] with a copy of the specified edition.\n\n```\n--init <edition> [<edition> ...]\n```\n\nFor example:\n\n```\ntiddlywiki ./MyWikiFolder --init empty\n```\n\nNote:\n\n* The wiki folder directory will be created if necessary\n* The \"edition\" defaults to ''empty''\n* The init command will fail if the wiki folder is not empty\n* The init command removes any `includeWikis` definitions in the edition's `tiddlywiki.info` file\n* When multiple editions are specified, editions initialised later will overwrite any files shared with earlier editions (so, the final `tiddlywiki.info` file will be copied from the last edition)\n* `--editions` returns a list of available editions\n"
},
"$:/language/Help/listen": {
"title": "$:/language/Help/listen",
"description": "Provides an HTTP server interface to TiddlyWiki",
"text": "Serves a wiki over HTTP.\n\nThe listen command uses NamedCommandParameters:\n\n```\n--listen [<name>=<value>]...\n```\n\nAll parameters are optional with safe defaults, and can be specified in any order. The recognised parameters are:\n\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n* ''path-prefix'' - optional prefix for paths\n* ''port'' - port number on which to listen; non-numeric values are interpreted as a system environment variable from which the port number is extracted (defaults to \"8080\")\n* ''credentials'' - pathname of credentials CSV file (relative to wiki folder)\n* ''anon-username'' - the username for signing edits for anonymous users\n* ''username'' - optional username for basic authentication\n* ''password'' - optional password for basic authentication\n* ''authenticated-user-header'' - optional name of header to be used for trusted authentication\n* ''readers'' - comma separated list of principals allowed to read from this wiki\n* ''writers'' - comma separated list of principals allowed to write to this wiki\n* ''csrf-disable'' - set to \"yes\" to disable CSRF checks (defaults to \"no\")\n* ''root-tiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\")\n* ''root-render-type'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''root-serve-type'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''tls-cert'' - pathname of TLS certificate file (relative to wiki folder)\n* ''tls-key'' - pathname of TLS key file (relative to wiki folder)\n* ''debug-level'' - optional debug level; set to \"debug\" to view request details (defaults to \"none\")\n* ''gzip'' - set to \"yes\" to enable gzip compression for some http endpoints (defaults to \"no\")\n\nFor information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com.\n\n"
},
"$:/language/Help/load": {
"title": "$:/language/Help/load",
"description": "Load tiddlers from a file",
"text": "Load tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The processing applied to incoming files is determined by the file extension. Use the alternative `import` command if you need to specify the deserializer and encoding explicitly.\n\n```\n--load <filepath> [noerror]\n--load <dirpath> [noerror]\n```\n\nBy default, the load command raises an error if no tiddlers are found. The error can be suppressed by providing the optional \"noerror\" parameter.\n\nTo load tiddlers from an encrypted TiddlyWiki file you should first specify the password with the PasswordCommand. For example:\n\n```\ntiddlywiki ./MyWiki --password pa55w0rd --load my_encrypted_wiki.html\n```\n\nNote that TiddlyWiki will not load an older version of an already loaded plugin.\n"
},
"$:/language/Help/makelibrary": {
"title": "$:/language/Help/makelibrary",
"description": "Construct library plugin required by upgrade process",
"text": "Constructs the `$:/UpgradeLibrary` tiddler for the upgrade process.\n\nThe upgrade library is formatted as an ordinary plugin tiddler with the plugin type `library`. It contains a copy of each of the plugins, themes and language packs available within the TiddlyWiki5 repository.\n\nThis command is intended for internal use; it is only relevant to users constructing a custom upgrade procedure.\n\n```\n--makelibrary <title>\n```\n\nThe title argument defaults to `$:/UpgradeLibrary`.\n"
},
"$:/language/Help/notfound": {
"title": "$:/language/Help/notfound",
"text": "No such help item"
},
"$:/language/Help/output": {
"title": "$:/language/Help/output",
"description": "Set the base output directory for subsequent commands",
"text": "Sets the base output directory for subsequent commands. The default output directory is the `output` subdirectory of the edition directory.\n\n```\n--output <pathname>\n```\n\nIf the specified pathname is relative then it is resolved relative to the current working directory. For example `--output .` sets the output directory to the current working directory.\n\n"
},
"$:/language/Help/password": {
"title": "$:/language/Help/password",
"description": "Set a password for subsequent crypto operations",
"text": "Set a password for subsequent crypto operations\n\n```\n--password <password>\n```\n\n''Note'': This should not be used for serving TiddlyWiki with password protection. Instead, see the password option under the [[ServerCommand]].\n"
},
"$:/language/Help/render": {
"title": "$:/language/Help/render",
"description": "Renders individual tiddlers to files",
"text": "Render individual tiddlers identified by a filter and save the results to the specified files.\n\nOptionally, the title of a template tiddler can be specified. In this case, instead of directly rendering each tiddler, the template tiddler is rendered with the \"currentTiddler\" variable set to the title of the tiddler that is being rendered.\n\nA name and value for an additional variable may optionally also be specified.\n\n```\n--render <tiddler-filter> [<filename-filter>] [<render-type>] [<template>] [<name>] [<value>]\n```\n\n* ''tiddler-filter'': A filter identifying the tiddler(s) to be rendered\n* ''filename-filter'': Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `[is[tiddler]addsuffix[.html]]`, which uses the unchanged tiddler title as the filename\n* ''render-type'': Optional render type: `text/html` (the default) returns the full HTML text and `text/plain` just returns the text content (ie it ignores HTML tags and other unprintable material)\n* ''template'': Optional template through which each tiddler is rendered\n* ''name'': Name of optional variable\n* ''value'': Value of optional variable\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nNotes:\n\n* The output directory is not cleared of any existing files\n* Any missing directories in the path to the filename are automatically created.\n* When referring to a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWiki's double square brackets : `--render \"[[Motovun Jack.jpg]]\"`\n* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being rendered, allowing the title to be used as the basis for computing the filename. For example `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`\n* The `--render` command is a more flexible replacement for both the `--rendertiddler` and `--rendertiddlers` commands, which are deprecated\n\nExamples:\n\n* `--render \"[!is[system]]\" \"[encodeuricomponent[]addprefix[tiddlers/]addsuffix[.html]]\"` -- renders all non-system tiddlers as files in the subdirectory \"tiddlers\" with URL-encoded titles and the extension HTML\n\n"
},
"$:/language/Help/rendertiddler": {
"title": "$:/language/Help/rendertiddler",
"description": "Render an individual tiddler as a specified ContentType",
"text": "(Note: The `--rendertiddler` command is deprecated in favour of the new, more flexible `--render` command)\n\nRender an individual tiddler as a specified ContentType, defaulting to `text/html` and save it to the specified filename.\n\nOptionally the title of a template tiddler can be specified, in which case the template tiddler is rendered with the \"currentTiddler\" variable set to the tiddler that is being rendered (the first parameter value).\n\nA name and value for an additional variable may optionally also be specified.\n\n```\n--rendertiddler <title> <filename> [<type>] [<template>] [<name>] [<value>]\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n\nFor example, the following command saves all tiddlers matching the filter `[tag[done]]` to a JSON file titled `output.json` by employing the core template `$:/core/templates/exporters/JsonFile`.\n\n```\n--rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[tag[done]]\"\n```\n"
},
"$:/language/Help/rendertiddlers": {
"title": "$:/language/Help/rendertiddlers",
"description": "Render tiddlers matching a filter to a specified ContentType",
"text": "(Note: The `--rendertiddlers` command is deprecated in favour of the new, more flexible `--render` command)\n\nRender a set of tiddlers matching a filter to separate files of a specified ContentType (defaults to `text/html`) and extension (defaults to `.html`).\n\n```\n--rendertiddlers '<filter>' <template> <pathname> [<type>] [<extension>] [\"noclean\"]\n```\n\nFor example:\n\n```\n--rendertiddlers '[!is[system]]' $:/core/templates/static.tiddler.html ./static text/plain\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny files in the target directory are deleted unless the ''noclean'' flag is specified. The target directory is recursively created if it is missing.\n"
},
"$:/language/Help/save": {
"title": "$:/language/Help/save",
"description": "Saves individual raw tiddlers to files",
"text": "Saves individual tiddlers identified by a filter in their raw text or binary format to the specified files.\n\n```\n--save <tiddler-filter> <filename-filter>\n```\n\n* ''tiddler-filter'': A filter identifying the tiddler(s) to be saved\n* ''filename-filter'': Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `[is[tiddler]]`, which uses the unchanged tiddler title as the filename\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nNotes:\n\n* The output directory is not cleared of any existing files\n* Any missing directories in the path to the filename are automatically created.\n* When saving a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWiki's double square brackets : `--save \"[[Motovun Jack.jpg]]\"`\n* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being saved, allowing the title to be used as the basis for computing the filename. For example `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`\n* The `--save` command is a more flexible replacement for both the `--savetiddler` and `--savetiddlers` commands, which are deprecated\n\nExamples:\n\n* `--save \"[!is[system]is[image]]\" \"[encodeuricomponent[]addprefix[tiddlers/]]\"` -- saves all non-system image tiddlers as files in the subdirectory \"tiddlers\" with URL-encoded titles\n"
},
"$:/language/Help/savetiddler": {
"title": "$:/language/Help/savetiddler",
"description": "Saves a raw tiddler to a file",
"text": "(Note: The `--savetiddler` command is deprecated in favour of the new, more flexible `--save` command)\n\nSaves an individual tiddler in its raw text or binary format to the specified filename.\n\n```\n--savetiddler <title> <filename>\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n"
},
"$:/language/Help/savetiddlers": {
"title": "$:/language/Help/savetiddlers",
"description": "Saves a group of raw tiddlers to a directory",
"text": "(Note: The `--savetiddlers` command is deprecated in favour of the new, more flexible `--save` command)\n\nSaves a group of tiddlers in their raw text or binary format to the specified directory.\n\n```\n--savetiddlers <filter> <pathname> [\"noclean\"]\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nThe output directory is cleared of existing files before saving the specified files. The deletion can be disabled by specifying the ''noclean'' flag.\n\nAny missing directories in the pathname are automatically created.\n"
},
"$:/language/Help/savewikifolder": {
"title": "$:/language/Help/savewikifolder",
"description": "Saves a wiki to a new wiki folder",
"text": "<<.from-version \"5.1.20\">> Saves the current wiki as a wiki folder, including tiddlers, plugins and configuration:\n\n```\n--savewikifolder <wikifolderpath> [<filter>]\n```\n\n* The target wiki folder must be empty or non-existent\n* The filter specifies which tiddlers should be included. It is optional, defaulting to `[all[tiddlers]]`\n* Plugins from the official plugin library are replaced with references to those plugins in the `tiddlywiki.info` file\n* Custom plugins are unpacked into their own folder\n\nA common usage is to convert a TiddlyWiki HTML file into a wiki folder:\n\n```\ntiddlywiki --load ./mywiki.html --savewikifolder ./mywikifolder\n```\n"
},
"$:/language/Help/server": {
"title": "$:/language/Help/server",
"description": "Provides an HTTP server interface to TiddlyWiki (deprecated in favour of the new listen command)",
"text": "Legacy command to serve a wiki over HTTP.\n\n```\n--server <port> <root-tiddler> <root-render-type> <root-serve-type> <username> <password> <host> <path-prefix> <debug-level>\n```\n\nThe parameters are:\n\n* ''port'' - port number on which to listen; non-numeric values are interpreted as a system environment variable from which the port number is extracted (defaults to \"8080\")\n* ''root-tiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\")\n* ''root-render-type'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''root-serve-type'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''username'' - the default username for signing edits\n* ''password'' - optional password for basic authentication\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n* ''path-prefix'' - optional prefix for paths\n* ''debug-level'' - optional debug level; set to \"debug\" to view request details (defaults to \"none\")\n\nIf the password parameter is specified then the browser will prompt the user for the username and password. Note that the password is transmitted in plain text so this implementation should only be used on a trusted network or over HTTPS.\n\nFor example:\n\n```\n--server 8080 $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n\nThe username and password can be specified as empty strings if you need to set the hostname or pathprefix and don't want to require a password.\n\n\n```\n--server 8080 $:/core/save/all text/plain text/html \"\" \"\" 192.168.0.245\n```\n\nUsing an address like this exposes your system to the local network. For information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com.\n\nTo run multiple TiddlyWiki servers at the same time you'll need to put each one on a different port. It can be useful to use an environment variable to pass the port number to the Node.js process. This example references an environment variable called \"MY_PORT_NUMBER\":\n\n```\n--server MY_PORT_NUMBER $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n"
},
"$:/language/Help/setfield": {
"title": "$:/language/Help/setfield",
"description": "Prepares external tiddlers for use",
"text": "//Note that this command is experimental and may change or be replaced before being finalised//\n\nSets the specified field of a group of tiddlers to the result of wikifying a template tiddler with the `currentTiddler` variable set to the tiddler.\n\n```\n--setfield <filter> <fieldname> <templatetitle> <rendertype>\n```\n\nThe parameters are:\n\n* ''filter'' - filter identifying the tiddlers to be affected\n* ''fieldname'' - the field to modify (defaults to \"text\")\n* ''templatetitle'' - the tiddler to wikify into the specified field. If blank or missing then the specified field is deleted\n* ''rendertype'' - the text type to render (defaults to \"text/plain\"; \"text/html\" can be used to include HTML tags)\n"
},
"$:/language/Help/unpackplugin": {
"title": "$:/language/Help/unpackplugin",
"description": "Unpack the payload tiddlers from a plugin",
"text": "Extract the payload tiddlers from a plugin, creating them as ordinary tiddlers:\n\n```\n--unpackplugin <title>\n```\n"
},
"$:/language/Help/verbose": {
"title": "$:/language/Help/verbose",
"description": "Triggers verbose output mode",
"text": "Triggers verbose output, useful for debugging\n\n```\n--verbose\n```\n"
},
"$:/language/Help/version": {
"title": "$:/language/Help/version",
"description": "Displays the version number of TiddlyWiki",
"text": "Displays the version number of TiddlyWiki.\n\n```\n--version\n```\n"
},
"$:/language/Import/Imported/Hint": {
"title": "$:/language/Import/Imported/Hint",
"text": "The following tiddlers were imported:"
},
"$:/language/Import/Listing/Cancel/Caption": {
"title": "$:/language/Import/Listing/Cancel/Caption",
"text": "Cancel"
},
"$:/language/Import/Listing/Hint": {
"title": "$:/language/Import/Listing/Hint",
"text": "These tiddlers are ready to import:"
},
"$:/language/Import/Listing/Import/Caption": {
"title": "$:/language/Import/Listing/Import/Caption",
"text": "Import"
},
"$:/language/Import/Listing/Select/Caption": {
"title": "$:/language/Import/Listing/Select/Caption",
"text": "Select"
},
"$:/language/Import/Listing/Status/Caption": {
"title": "$:/language/Import/Listing/Status/Caption",
"text": "Status"
},
"$:/language/Import/Listing/Title/Caption": {
"title": "$:/language/Import/Listing/Title/Caption",
"text": "Title"
},
"$:/language/Import/Listing/Preview": {
"title": "$:/language/Import/Listing/Preview",
"text": "Preview:"
},
"$:/language/Import/Listing/Preview/Text": {
"title": "$:/language/Import/Listing/Preview/Text",
"text": "Text"
},
"$:/language/Import/Listing/Preview/TextRaw": {
"title": "$:/language/Import/Listing/Preview/TextRaw",
"text": "Text (Raw)"
},
"$:/language/Import/Listing/Preview/Fields": {
"title": "$:/language/Import/Listing/Preview/Fields",
"text": "Fields"
},
"$:/language/Import/Listing/Preview/Diff": {
"title": "$:/language/Import/Listing/Preview/Diff",
"text": "Diff"
},
"$:/language/Import/Listing/Preview/DiffFields": {
"title": "$:/language/Import/Listing/Preview/DiffFields",
"text": "Diff (Fields)"
},
"$:/language/Import/Listing/Rename/Tooltip": {
"title": "$:/language/Import/Listing/Rename/Tooltip",
"text": "Rename tiddler before importing"
},
"$:/language/Import/Listing/Rename/Prompt": {
"title": "$:/language/Import/Listing/Rename/Prompt",
"text": "Rename to:"
},
"$:/language/Import/Listing/Rename/ConfirmRename": {
"title": "$:/language/Import/Listing/Rename/ConfirmRename",
"text": "Rename tiddler"
},
"$:/language/Import/Listing/Rename/CancelRename": {
"title": "$:/language/Import/Listing/Rename/CancelRename",
"text": "Cancel"
},
"$:/language/Import/Listing/Rename/OverwriteWarning": {
"title": "$:/language/Import/Listing/Rename/OverwriteWarning",
"text": "A tiddler with this title already exists."
},
"$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible": {
"title": "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible",
"text": "Blocked incompatible or obsolete plugin."
},
"$:/language/Import/Upgrader/Plugins/Suppressed/Version": {
"title": "$:/language/Import/Upgrader/Plugins/Suppressed/Version",
"text": "Blocked plugin (due to incoming <<incoming>> not being newer than existing <<existing>>)."
},
"$:/language/Import/Upgrader/Plugins/Upgraded": {
"title": "$:/language/Import/Upgrader/Plugins/Upgraded",
"text": "Upgraded plugin from <<incoming>> to <<upgraded>>."
},
"$:/language/Import/Upgrader/State/Suppressed": {
"title": "$:/language/Import/Upgrader/State/Suppressed",
"text": "Blocked temporary state tiddler."
},
"$:/language/Import/Upgrader/System/Suppressed": {
"title": "$:/language/Import/Upgrader/System/Suppressed",
"text": "Blocked system tiddler."
},
"$:/language/Import/Upgrader/System/Warning": {
"title": "$:/language/Import/Upgrader/System/Warning",
"text": "Core module tiddler."
},
"$:/language/Import/Upgrader/System/Alert": {
"title": "$:/language/Import/Upgrader/System/Alert",
"text": "You are about to import a tiddler that will overwrite a core module tiddler. This is not recommended as it may make the system unstable."
},
"$:/language/Import/Upgrader/ThemeTweaks/Created": {
"title": "$:/language/Import/Upgrader/ThemeTweaks/Created",
"text": "Migrated theme tweak from <$text text=<<from>>/>."
},
"$:/language/AboveStory/ClassicPlugin/Warning": {
"title": "$:/language/AboveStory/ClassicPlugin/Warning",
"text": "It looks like you are trying to load a plugin designed for ~TiddlyWiki Classic. Please note that [[these plugins do not work with TiddlyWiki version 5.x.x|https://tiddlywiki.com/#TiddlyWikiClassic]]. ~TiddlyWiki Classic plugins detected:"
},
"$:/language/BinaryWarning/Prompt": {
"title": "$:/language/BinaryWarning/Prompt",
"text": "This tiddler contains binary data"
},
"$:/language/ClassicWarning/Hint": {
"title": "$:/language/ClassicWarning/Hint",
"text": "This tiddler is written in TiddlyWiki Classic wiki text format, which is not fully compatible with TiddlyWiki version 5. See https://tiddlywiki.com/static/Upgrading.html for more details."
},
"$:/language/ClassicWarning/Upgrade/Caption": {
"title": "$:/language/ClassicWarning/Upgrade/Caption",
"text": "upgrade"
},
"$:/language/CloseAll/Button": {
"title": "$:/language/CloseAll/Button",
"text": "close all"
},
"$:/language/ColourPicker/Recent": {
"title": "$:/language/ColourPicker/Recent",
"text": "Recent:"
},
"$:/language/ConfirmCancelTiddler": {
"title": "$:/language/ConfirmCancelTiddler",
"text": "Do you wish to discard changes to the tiddler \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmDeleteTiddler": {
"title": "$:/language/ConfirmDeleteTiddler",
"text": "Do you wish to delete the tiddler \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmOverwriteTiddler": {
"title": "$:/language/ConfirmOverwriteTiddler",
"text": "Do you wish to overwrite the tiddler \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmEditShadowTiddler": {
"title": "$:/language/ConfirmEditShadowTiddler",
"text": "You are about to edit a ShadowTiddler. Any changes will override the default system making future upgrades non-trivial. Are you sure you want to edit \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmAction": {
"title": "$:/language/ConfirmAction",
"text": "Do you wish to proceed?"
},
"$:/language/Count": {
"title": "$:/language/Count",
"text": "count"
},
"$:/language/DefaultNewTiddlerTitle": {
"title": "$:/language/DefaultNewTiddlerTitle",
"text": "New Tiddler"
},
"$:/language/Diffs/CountMessage": {
"title": "$:/language/Diffs/CountMessage",
"text": "<<diff-count>> differences"
},
"$:/language/DropMessage": {
"title": "$:/language/DropMessage",
"text": "Drop here (or use the 'Escape' key to cancel)"
},
"$:/language/Encryption/Cancel": {
"title": "$:/language/Encryption/Cancel",
"text": "Cancel"
},
"$:/language/Encryption/ConfirmClearPassword": {
"title": "$:/language/Encryption/ConfirmClearPassword",
"text": "Do you wish to clear the password? This will remove the encryption applied when saving this wiki"
},
"$:/language/Encryption/PromptSetPassword": {
"title": "$:/language/Encryption/PromptSetPassword",
"text": "Set a new password for this TiddlyWiki"
},
"$:/language/Encryption/Username": {
"title": "$:/language/Encryption/Username",
"text": "Username"
},
"$:/language/Encryption/Password": {
"title": "$:/language/Encryption/Password",
"text": "Password"
},
"$:/language/Encryption/RepeatPassword": {
"title": "$:/language/Encryption/RepeatPassword",
"text": "Repeat password"
},
"$:/language/Encryption/PasswordNoMatch": {
"title": "$:/language/Encryption/PasswordNoMatch",
"text": "Passwords do not match"
},
"$:/language/Encryption/SetPassword": {
"title": "$:/language/Encryption/SetPassword",
"text": "Set password"
},
"$:/language/Error/Caption": {
"title": "$:/language/Error/Caption",
"text": "Error"
},
"$:/language/Error/EditConflict": {
"title": "$:/language/Error/EditConflict",
"text": "File changed on server"
},
"$:/language/Error/Filter": {
"title": "$:/language/Error/Filter",
"text": "Filter error"
},
"$:/language/Error/FilterSyntax": {
"title": "$:/language/Error/FilterSyntax",
"text": "Syntax error in filter expression"
},
"$:/language/Error/FilterRunPrefix": {
"title": "$:/language/Error/FilterRunPrefix",
"text": "Filter Error: Unknown prefix for filter run"
},
"$:/language/Error/IsFilterOperator": {
"title": "$:/language/Error/IsFilterOperator",
"text": "Filter Error: Unknown operand for the 'is' filter operator"
},
"$:/language/Error/FormatFilterOperator": {
"title": "$:/language/Error/FormatFilterOperator",
"text": "Filter Error: Unknown suffix for the 'format' filter operator"
},
"$:/language/Error/LoadingPluginLibrary": {
"title": "$:/language/Error/LoadingPluginLibrary",
"text": "Error loading plugin library"
},
"$:/language/Error/NetworkErrorAlert": {
"title": "$:/language/Error/NetworkErrorAlert",
"text": "`<h2>''Network Error''</h2>It looks like the connection to the server has been lost. This may indicate a problem with your network connection. Please attempt to restore network connectivity before continuing.<br><br>''Any unsaved changes will be automatically synchronised when connectivity is restored''.`"
},
"$:/language/Error/RecursiveTransclusion": {
"title": "$:/language/Error/RecursiveTransclusion",
"text": "Recursive transclusion error in transclude widget"
},
"$:/language/Error/RetrievingSkinny": {
"title": "$:/language/Error/RetrievingSkinny",
"text": "Error retrieving skinny tiddler list"
},
"$:/language/Error/SavingToTWEdit": {
"title": "$:/language/Error/SavingToTWEdit",
"text": "Error saving to TWEdit"
},
"$:/language/Error/WhileSaving": {
"title": "$:/language/Error/WhileSaving",
"text": "Error while saving"
},
"$:/language/Error/XMLHttpRequest": {
"title": "$:/language/Error/XMLHttpRequest",
"text": "XMLHttpRequest error code"
},
"$:/language/InternalJavaScriptError/Title": {
"title": "$:/language/InternalJavaScriptError/Title",
"text": "Internal JavaScript Error"
},
"$:/language/InternalJavaScriptError/Hint": {
"title": "$:/language/InternalJavaScriptError/Hint",
"text": "Well, this is embarrassing. It is recommended that you restart TiddlyWiki by refreshing your browser"
},
"$:/language/InvalidFieldName": {
"title": "$:/language/InvalidFieldName",
"text": "Illegal characters in field name \"<$text text=<<fieldName>>/>\". Fields can only contain lowercase letters, digits and the characters underscore (`_`), hyphen (`-`) and period (`.`)"
},
"$:/language/LayoutSwitcher/Description": {
"title": "$:/language/LayoutSwitcher/Description",
"text": "Open the layout switcher"
},
"$:/language/LazyLoadingWarning": {
"title": "$:/language/LazyLoadingWarning",
"text": "<p>Trying to load external content from ''<$text text={{!!_canonical_uri}}/>''</p><p>If this message doesn't disappear, either the tiddler content type doesn't match the type of the external content, or you may be using a browser that doesn't support external content for wikis loaded as standalone files. See https://tiddlywiki.com/#ExternalText</p>"
},
"$:/language/LoginToTiddlySpace": {
"title": "$:/language/LoginToTiddlySpace",
"text": "Login to TiddlySpace"
},
"$:/language/Manager/Controls/FilterByTag/None": {
"title": "$:/language/Manager/Controls/FilterByTag/None",
"text": "(none)"
},
"$:/language/Manager/Controls/FilterByTag/Prompt": {
"title": "$:/language/Manager/Controls/FilterByTag/Prompt",
"text": "Filter by tag:"
},
"$:/language/Manager/Controls/Order/Prompt": {
"title": "$:/language/Manager/Controls/Order/Prompt",
"text": "Reverse order"
},
"$:/language/Manager/Controls/Search/Placeholder": {
"title": "$:/language/Manager/Controls/Search/Placeholder",
"text": "Search"
},
"$:/language/Manager/Controls/Search/Prompt": {
"title": "$:/language/Manager/Controls/Search/Prompt",
"text": "Search:"
},
"$:/language/Manager/Controls/Show/Option/Tags": {
"title": "$:/language/Manager/Controls/Show/Option/Tags",
"text": "tags"
},
"$:/language/Manager/Controls/Show/Option/Tiddlers": {
"title": "$:/language/Manager/Controls/Show/Option/Tiddlers",
"text": "tiddlers"
},
"$:/language/Manager/Controls/Show/Prompt": {
"title": "$:/language/Manager/Controls/Show/Prompt",
"text": "Show:"
},
"$:/language/Manager/Controls/Sort/Prompt": {
"title": "$:/language/Manager/Controls/Sort/Prompt",
"text": "Sort by:"
},
"$:/language/Manager/Item/Colour": {
"title": "$:/language/Manager/Item/Colour",
"text": "Colour"
},
"$:/language/Manager/Item/Fields": {
"title": "$:/language/Manager/Item/Fields",
"text": "Fields"
},
"$:/language/Manager/Item/Icon/None": {
"title": "$:/language/Manager/Item/Icon/None",
"text": "(none)"
},
"$:/language/Manager/Item/Icon": {
"title": "$:/language/Manager/Item/Icon",
"text": "Icon"
},
"$:/language/Manager/Item/RawText": {
"title": "$:/language/Manager/Item/RawText",
"text": "Raw text"
},
"$:/language/Manager/Item/Tags": {
"title": "$:/language/Manager/Item/Tags",
"text": "Tags"
},
"$:/language/Manager/Item/Tools": {
"title": "$:/language/Manager/Item/Tools",
"text": "Tools"
},
"$:/language/Manager/Item/WikifiedText": {
"title": "$:/language/Manager/Item/WikifiedText",
"text": "Wikified text"
},
"$:/language/MissingTiddler/Hint": {
"title": "$:/language/MissingTiddler/Hint",
"text": "Missing tiddler \"<$text text=<<currentTiddler>>/>\" -- click {{||$:/core/ui/Buttons/edit}} to create"
},
"$:/language/No": {
"title": "$:/language/No",
"text": "No"
},
"$:/language/OfficialPluginLibrary": {
"title": "$:/language/OfficialPluginLibrary",
"text": "Official ~TiddlyWiki Plugin Library"
},
"$:/language/OfficialPluginLibrary/Hint": {
"title": "$:/language/OfficialPluginLibrary/Hint",
"text": "The official ~TiddlyWiki plugin library at tiddlywiki.com. Plugins, themes and language packs are maintained by the core team."
},
"$:/language/PageTemplate/Description": {
"title": "$:/language/PageTemplate/Description",
"text": "the default ~TiddlyWiki layout"
},
"$:/language/PageTemplate/Name": {
"title": "$:/language/PageTemplate/Name",
"text": "Default ~PageTemplate"
},
"$:/language/PluginReloadWarning": {
"title": "$:/language/PluginReloadWarning",
"text": "Please save {{$:/core/ui/Buttons/save-wiki}} and reload {{$:/core/ui/Buttons/refresh}} to allow changes to ~JavaScript plugins to take effect"
},
"$:/language/RecentChanges/DateFormat": {
"title": "$:/language/RecentChanges/DateFormat",
"text": "DDth MMM YYYY"
},
"$:/language/Shortcuts/Input/AdvancedSearch/Hint": {
"title": "$:/language/Shortcuts/Input/AdvancedSearch/Hint",
"text": "Open the ~AdvancedSearch panel from within the sidebar search field"
},
"$:/language/Shortcuts/Input/Accept/Hint": {
"title": "$:/language/Shortcuts/Input/Accept/Hint",
"text": "Accept the selected item"
},
"$:/language/Shortcuts/Input/AcceptVariant/Hint": {
"title": "$:/language/Shortcuts/Input/AcceptVariant/Hint",
"text": "Accept the selected item (variant)"
},
"$:/language/Shortcuts/Input/Cancel/Hint": {
"title": "$:/language/Shortcuts/Input/Cancel/Hint",
"text": "Clear the input field"
},
"$:/language/Shortcuts/Input/Down/Hint": {
"title": "$:/language/Shortcuts/Input/Down/Hint",
"text": "Select the next item"
},
"$:/language/Shortcuts/Input/Tab-Left/Hint": {
"title": "$:/language/Shortcuts/Input/Tab-Left/Hint",
"text": "Select the previous Tab"
},
"$:/language/Shortcuts/Input/Tab-Right/Hint": {
"title": "$:/language/Shortcuts/Input/Tab-Right/Hint",
"text": "Select the next Tab"
},
"$:/language/Shortcuts/Input/Up/Hint": {
"title": "$:/language/Shortcuts/Input/Up/Hint",
"text": "Select the previous item"
},
"$:/language/Shortcuts/SidebarLayout/Hint": {
"title": "$:/language/Shortcuts/SidebarLayout/Hint",
"text": "Change the sidebar layout"
},
"$:/language/Switcher/Subtitle/theme": {
"title": "$:/language/Switcher/Subtitle/theme",
"text": "Switch Theme"
},
"$:/language/Switcher/Subtitle/layout": {
"title": "$:/language/Switcher/Subtitle/layout",
"text": "Switch Layout"
},
"$:/language/Switcher/Subtitle/language": {
"title": "$:/language/Switcher/Subtitle/language",
"text": "Switch Language"
},
"$:/language/Switcher/Subtitle/palette": {
"title": "$:/language/Switcher/Subtitle/palette",
"text": "Switch Palette"
},
"$:/language/SystemTiddler/Tooltip": {
"title": "$:/language/SystemTiddler/Tooltip",
"text": "This is a system tiddler"
},
"$:/language/SystemTiddlers/Include/Prompt": {
"title": "$:/language/SystemTiddlers/Include/Prompt",
"text": "Include system tiddlers"
},
"$:/language/TagManager/Colour/Heading": {
"title": "$:/language/TagManager/Colour/Heading",
"text": "Colour"
},
"$:/language/TagManager/Count/Heading": {
"title": "$:/language/TagManager/Count/Heading",
"text": "Count"
},
"$:/language/TagManager/Icon/Heading": {
"title": "$:/language/TagManager/Icon/Heading",
"text": "Icon"
},
"$:/language/TagManager/Icons/None": {
"title": "$:/language/TagManager/Icons/None",
"text": "None"
},
"$:/language/TagManager/Info/Heading": {
"title": "$:/language/TagManager/Info/Heading",
"text": "Info"
},
"$:/language/TagManager/Tag/Heading": {
"title": "$:/language/TagManager/Tag/Heading",
"text": "Tag"
},
"$:/language/Tiddler/DateFormat": {
"title": "$:/language/Tiddler/DateFormat",
"text": "DDth MMM YYYY at hh12:0mmam"
},
"$:/language/UnsavedChangesWarning": {
"title": "$:/language/UnsavedChangesWarning",
"text": "You have unsaved changes in TiddlyWiki"
},
"$:/language/Yes": {
"title": "$:/language/Yes",
"text": "Yes"
},
"$:/language/Modals/Download": {
"title": "$:/language/Modals/Download",
"subtitle": "Download changes",
"footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
"help": "https://tiddlywiki.com/static/DownloadingChanges.html",
"text": "Your browser only supports manual saving.\n\nTo save your modified wiki, right click on the download link below and select \"Download file\" or \"Save file\", and then choose the folder and filename.\n\n//You can marginally speed things up by clicking the link with the control key (Windows) or the options/alt key (Mac OS X). You will not be prompted for the folder or filename, but your browser is likely to give it an unrecognisable name -- you may need to rename the file to include an `.html` extension before you can do anything useful with it.//\n\nOn smartphones that do not allow files to be downloaded you can instead bookmark the link, and then sync your bookmarks to a desktop computer from where the wiki can be saved normally.\n"
},
"$:/language/Modals/SaveInstructions": {
"title": "$:/language/Modals/SaveInstructions",
"subtitle": "Save your work",
"footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
"help": "https://tiddlywiki.com/static/SavingChanges.html",
"text": "Your changes to this wiki need to be saved as a ~TiddlyWiki HTML file.\n\n!!! Desktop browsers\n\n# Select ''Save As'' from the ''File'' menu\n# Choose a filename and location\n#* Some browsers also require you to explicitly specify the file saving format as ''Webpage, HTML only'' or similar\n# Close this tab\n\n!!! Smartphone browsers\n\n# Create a bookmark to this page\n#* If you've got iCloud or Google Sync set up then the bookmark will automatically sync to your desktop where you can open it and save it as above\n# Close this tab\n\n//If you open the bookmark again in Mobile Safari you will see this message again. If you want to go ahead and use the file, just click the ''close'' button below//\n"
},
"$:/config/NewJournal/Title": {
"title": "$:/config/NewJournal/Title",
"text": "DDth MMM YYYY"
},
"$:/config/NewJournal/Text": {
"title": "$:/config/NewJournal/Text",
"text": ""
},
"$:/config/NewJournal/Tags": {
"title": "$:/config/NewJournal/Tags",
"text": "Journal\n"
},
"$:/language/Notifications/Save/Done": {
"title": "$:/language/Notifications/Save/Done",
"text": "Saved wiki"
},
"$:/language/Notifications/Save/Starting": {
"title": "$:/language/Notifications/Save/Starting",
"text": "Starting to save wiki"
},
"$:/language/Notifications/CopiedToClipboard/Succeeded": {
"title": "$:/language/Notifications/CopiedToClipboard/Succeeded",
"text": "Copied to clipboard!"
},
"$:/language/Notifications/CopiedToClipboard/Failed": {
"title": "$:/language/Notifications/CopiedToClipboard/Failed",
"text": "Failed to copy to clipboard!"
},
"$:/language/Search/DefaultResults/Caption": {
"title": "$:/language/Search/DefaultResults/Caption",
"text": "List"
},
"$:/language/Search/Filter/Caption": {
"title": "$:/language/Search/Filter/Caption",
"text": "Filter"
},
"$:/language/Search/Filter/Hint": {
"title": "$:/language/Search/Filter/Hint",
"text": "Search via a [[filter expression|https://tiddlywiki.com/static/Filters.html]]"
},
"$:/language/Search/Filter/Matches": {
"title": "$:/language/Search/Filter/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/Matches": {
"title": "$:/language/Search/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/Matches/All": {
"title": "$:/language/Search/Matches/All",
"text": "All matches:"
},
"$:/language/Search/Matches/Title": {
"title": "$:/language/Search/Matches/Title",
"text": "Title matches:"
},
"$:/language/Search/Search": {
"title": "$:/language/Search/Search",
"text": "Search"
},
"$:/language/Search/Search/TooShort": {
"title": "$:/language/Search/Search/TooShort",
"text": "Search text too short"
},
"$:/language/Search/Shadows/Caption": {
"title": "$:/language/Search/Shadows/Caption",
"text": "Shadows"
},
"$:/language/Search/Shadows/Hint": {
"title": "$:/language/Search/Shadows/Hint",
"text": "Search for shadow tiddlers"
},
"$:/language/Search/Shadows/Matches": {
"title": "$:/language/Search/Shadows/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/Standard/Caption": {
"title": "$:/language/Search/Standard/Caption",
"text": "Standard"
},
"$:/language/Search/Standard/Hint": {
"title": "$:/language/Search/Standard/Hint",
"text": "Search for standard tiddlers"
},
"$:/language/Search/Standard/Matches": {
"title": "$:/language/Search/Standard/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/System/Caption": {
"title": "$:/language/Search/System/Caption",
"text": "System"
},
"$:/language/Search/System/Hint": {
"title": "$:/language/Search/System/Hint",
"text": "Search for system tiddlers"
},
"$:/language/Search/System/Matches": {
"title": "$:/language/Search/System/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/SideBar/All/Caption": {
"title": "$:/language/SideBar/All/Caption",
"text": "All"
},
"$:/language/SideBar/Contents/Caption": {
"title": "$:/language/SideBar/Contents/Caption",
"text": "Contents"
},
"$:/language/SideBar/Drafts/Caption": {
"title": "$:/language/SideBar/Drafts/Caption",
"text": "Drafts"
},
"$:/language/SideBar/Explorer/Caption": {
"title": "$:/language/SideBar/Explorer/Caption",
"text": "Explorer"
},
"$:/language/SideBar/Missing/Caption": {
"title": "$:/language/SideBar/Missing/Caption",
"text": "Missing"
},
"$:/language/SideBar/More/Caption": {
"title": "$:/language/SideBar/More/Caption",
"text": "More"
},
"$:/language/SideBar/Open/Caption": {
"title": "$:/language/SideBar/Open/Caption",
"text": "Open"
},
"$:/language/SideBar/Orphans/Caption": {
"title": "$:/language/SideBar/Orphans/Caption",
"text": "Orphans"
},
"$:/language/SideBar/Recent/Caption": {
"title": "$:/language/SideBar/Recent/Caption",
"text": "Recent"
},
"$:/language/SideBar/Shadows/Caption": {
"title": "$:/language/SideBar/Shadows/Caption",
"text": "Shadows"
},
"$:/language/SideBar/System/Caption": {
"title": "$:/language/SideBar/System/Caption",
"text": "System"
},
"$:/language/SideBar/Tags/Caption": {
"title": "$:/language/SideBar/Tags/Caption",
"text": "Tags"
},
"$:/language/SideBar/Tags/Untagged/Caption": {
"title": "$:/language/SideBar/Tags/Untagged/Caption",
"text": "untagged"
},
"$:/language/SideBar/Tools/Caption": {
"title": "$:/language/SideBar/Tools/Caption",
"text": "Tools"
},
"$:/language/SideBar/Types/Caption": {
"title": "$:/language/SideBar/Types/Caption",
"text": "Types"
},
"$:/SiteSubtitle": {
"title": "$:/SiteSubtitle",
"text": "a non-linear personal web notebook"
},
"$:/SiteTitle": {
"title": "$:/SiteTitle",
"text": "My ~TiddlyWiki"
},
"$:/language/Snippets/ListByTag": {
"title": "$:/language/Snippets/ListByTag",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "List of tiddlers by tag",
"text": "<<list-links \"[tag[task]sort[title]]\">>\n"
},
"$:/language/Snippets/MacroDefinition": {
"title": "$:/language/Snippets/MacroDefinition",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "Macro definition",
"text": "\\define macroName(param1:\"default value\",param2)\nText of the macro\n\\end\n"
},
"$:/language/Snippets/Table4x3": {
"title": "$:/language/Snippets/Table4x3",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "Table with 4 columns by 3 rows",
"text": "|! |!Alpha |!Beta |!Gamma |!Delta |\n|!One | | | | |\n|!Two | | | | |\n|!Three | | | | |\n"
},
"$:/language/Snippets/TableOfContents": {
"title": "$:/language/Snippets/TableOfContents",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "Table of Contents",
"text": "<div class=\"tc-table-of-contents\">\n\n<<toc-selective-expandable 'TableOfContents'>>\n\n</div>"
},
"$:/language/ThemeTweaks/ThemeTweaks": {
"title": "$:/language/ThemeTweaks/ThemeTweaks",
"text": "Theme Tweaks"
},
"$:/language/ThemeTweaks/ThemeTweaks/Hint": {
"title": "$:/language/ThemeTweaks/ThemeTweaks/Hint",
"text": "You can tweak certain aspects of the ''Vanilla'' theme."
},
"$:/language/ThemeTweaks/Options": {
"title": "$:/language/ThemeTweaks/Options",
"text": "Options"
},
"$:/language/ThemeTweaks/Options/SidebarLayout": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout",
"text": "Sidebar layout"
},
"$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid",
"text": "Fixed story, fluid sidebar"
},
"$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed",
"text": "Fluid story, fixed sidebar"
},
"$:/language/ThemeTweaks/Options/StickyTitles": {
"title": "$:/language/ThemeTweaks/Options/StickyTitles",
"text": "Sticky titles"
},
"$:/language/ThemeTweaks/Options/StickyTitles/Hint": {
"title": "$:/language/ThemeTweaks/Options/StickyTitles/Hint",
"text": "Causes tiddler titles to \"stick\" to the top of the browser window"
},
"$:/language/ThemeTweaks/Options/CodeWrapping": {
"title": "$:/language/ThemeTweaks/Options/CodeWrapping",
"text": "Wrap long lines in code blocks"
},
"$:/language/ThemeTweaks/Settings": {
"title": "$:/language/ThemeTweaks/Settings",
"text": "Settings"
},
"$:/language/ThemeTweaks/Settings/FontFamily": {
"title": "$:/language/ThemeTweaks/Settings/FontFamily",
"text": "Font family"
},
"$:/language/ThemeTweaks/Settings/CodeFontFamily": {
"title": "$:/language/ThemeTweaks/Settings/CodeFontFamily",
"text": "Code font family"
},
"$:/language/ThemeTweaks/Settings/EditorFontFamily": {
"title": "$:/language/ThemeTweaks/Settings/EditorFontFamily",
"text": "Editor font family"
},
"$:/language/ThemeTweaks/Settings/BackgroundImage": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImage",
"text": "Page background image"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment",
"text": "Page background image attachment"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll",
"text": "Scroll with tiddlers"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed",
"text": "Fixed to window"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize",
"text": "Page background image size"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto",
"text": "Auto"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover",
"text": "Cover"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain",
"text": "Contain"
},
"$:/language/ThemeTweaks/Metrics": {
"title": "$:/language/ThemeTweaks/Metrics",
"text": "Sizes"
},
"$:/language/ThemeTweaks/Metrics/FontSize": {
"title": "$:/language/ThemeTweaks/Metrics/FontSize",
"text": "Font size"
},
"$:/language/ThemeTweaks/Metrics/LineHeight": {
"title": "$:/language/ThemeTweaks/Metrics/LineHeight",
"text": "Line height"
},
"$:/language/ThemeTweaks/Metrics/BodyFontSize": {
"title": "$:/language/ThemeTweaks/Metrics/BodyFontSize",
"text": "Font size for tiddler body"
},
"$:/language/ThemeTweaks/Metrics/BodyLineHeight": {
"title": "$:/language/ThemeTweaks/Metrics/BodyLineHeight",
"text": "Line height for tiddler body"
},
"$:/language/ThemeTweaks/Metrics/StoryLeft": {
"title": "$:/language/ThemeTweaks/Metrics/StoryLeft",
"text": "Story left position"
},
"$:/language/ThemeTweaks/Metrics/StoryLeft/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryLeft/Hint",
"text": "how far the left margin of the story river<br>(tiddler area) is from the left of the page"
},
"$:/language/ThemeTweaks/Metrics/StoryTop": {
"title": "$:/language/ThemeTweaks/Metrics/StoryTop",
"text": "Story top position"
},
"$:/language/ThemeTweaks/Metrics/StoryTop/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryTop/Hint",
"text": "how far the top margin of the story river<br>is from the top of the page"
},
"$:/language/ThemeTweaks/Metrics/StoryRight": {
"title": "$:/language/ThemeTweaks/Metrics/StoryRight",
"text": "Story right"
},
"$:/language/ThemeTweaks/Metrics/StoryRight/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryRight/Hint",
"text": "how far the left margin of the sidebar <br>is from the left of the page"
},
"$:/language/ThemeTweaks/Metrics/StoryWidth": {
"title": "$:/language/ThemeTweaks/Metrics/StoryWidth",
"text": "Story width"
},
"$:/language/ThemeTweaks/Metrics/StoryWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryWidth/Hint",
"text": "the overall width of the story river"
},
"$:/language/ThemeTweaks/Metrics/TiddlerWidth": {
"title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth",
"text": "Tiddler width"
},
"$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint",
"text": "within the story river"
},
"$:/language/ThemeTweaks/Metrics/SidebarBreakpoint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint",
"text": "Sidebar breakpoint"
},
"$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint",
"text": "the minimum page width at which the story<br>river and sidebar will appear side by side"
},
"$:/language/ThemeTweaks/Metrics/SidebarWidth": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarWidth",
"text": "Sidebar width"
},
"$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint",
"text": "the width of the sidebar in fluid-fixed layout"
},
"$:/language/TiddlerInfo/Advanced/Caption": {
"title": "$:/language/TiddlerInfo/Advanced/Caption",
"text": "Advanced"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint",
"text": "none"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Heading": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading",
"text": "Plugin Details"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint",
"text": "This plugin contains the following shadow tiddlers:"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading",
"text": "Shadow Status"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint",
"text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is not a shadow tiddler"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint",
"text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is a shadow tiddler"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source",
"text": "It is defined in the plugin <$link to=<<pluginTiddler>>><$text text=<<pluginTiddler>>/></$link>"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint",
"text": "It is overridden by an ordinary tiddler"
},
"$:/language/TiddlerInfo/Fields/Caption": {
"title": "$:/language/TiddlerInfo/Fields/Caption",
"text": "Fields"
},
"$:/language/TiddlerInfo/List/Caption": {
"title": "$:/language/TiddlerInfo/List/Caption",
"text": "List"
},
"$:/language/TiddlerInfo/List/Empty": {
"title": "$:/language/TiddlerInfo/List/Empty",
"text": "This tiddler does not have a list"
},
"$:/language/TiddlerInfo/Listed/Caption": {
"title": "$:/language/TiddlerInfo/Listed/Caption",
"text": "Listed"
},
"$:/language/TiddlerInfo/Listed/Empty": {
"title": "$:/language/TiddlerInfo/Listed/Empty",
"text": "This tiddler is not listed by any others"
},
"$:/language/TiddlerInfo/References/Caption": {
"title": "$:/language/TiddlerInfo/References/Caption",
"text": "Backlinks"
},
"$:/language/TiddlerInfo/References/Empty": {
"title": "$:/language/TiddlerInfo/References/Empty",
"text": "No tiddlers link to this one"
},
"$:/language/TiddlerInfo/Tagging/Caption": {
"title": "$:/language/TiddlerInfo/Tagging/Caption",
"text": "Tagging"
},
"$:/language/TiddlerInfo/Tagging/Empty": {
"title": "$:/language/TiddlerInfo/Tagging/Empty",
"text": "No tiddlers are tagged with this one"
},
"$:/language/TiddlerInfo/Tools/Caption": {
"title": "$:/language/TiddlerInfo/Tools/Caption",
"text": "Tools"
},
"$:/language/Docs/Types/application/javascript": {
"title": "$:/language/Docs/Types/application/javascript",
"description": "JavaScript code",
"name": "application/javascript",
"group": "Developer",
"group-sort": "2"
},
"$:/language/Docs/Types/application/json": {
"title": "$:/language/Docs/Types/application/json",
"description": "JSON data",
"name": "application/json",
"group": "Developer",
"group-sort": "2"
},
"$:/language/Docs/Types/application/x-tiddler-dictionary": {
"title": "$:/language/Docs/Types/application/x-tiddler-dictionary",
"description": "Data dictionary",
"name": "application/x-tiddler-dictionary",
"group": "Developer",
"group-sort": "2"
},
"$:/language/Docs/Types/image/gif": {
"title": "$:/language/Docs/Types/image/gif",
"description": "GIF image",
"name": "image/gif",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/image/jpeg": {
"title": "$:/language/Docs/Types/image/jpeg",
"description": "JPEG image",
"name": "image/jpeg",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/image/png": {
"title": "$:/language/Docs/Types/image/png",
"description": "PNG image",
"name": "image/png",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/image/svg+xml": {
"title": "$:/language/Docs/Types/image/svg+xml",
"description": "Structured Vector Graphics image",
"name": "image/svg+xml",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/image/x-icon": {
"title": "$:/language/Docs/Types/image/x-icon",
"description": "ICO format icon file",
"name": "image/x-icon",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/text/css": {
"title": "$:/language/Docs/Types/text/css",
"description": "Static stylesheet",
"name": "text/css",
"group": "Developer",
"group-sort": "2"
},
"$:/language/Docs/Types/text/html": {
"title": "$:/language/Docs/Types/text/html",
"description": "HTML markup",
"name": "text/html",
"group": "Text",
"group-sort": "0"
},
"$:/language/Docs/Types/text/plain": {
"title": "$:/language/Docs/Types/text/plain",
"description": "Plain text",
"name": "text/plain",
"group": "Text",
"group-sort": "0"
},
"$:/language/Docs/Types/text/vnd.tiddlywiki": {
"title": "$:/language/Docs/Types/text/vnd.tiddlywiki",
"description": "TiddlyWiki 5",
"name": "text/vnd.tiddlywiki",
"group": "Text",
"group-sort": "0"
},
"$:/language/Docs/Types/text/x-tiddlywiki": {
"title": "$:/language/Docs/Types/text/x-tiddlywiki",
"description": "TiddlyWiki Classic",
"name": "text/x-tiddlywiki",
"group": "Text",
"group-sort": "0"
},
"$:/languages/en-GB/icon": {
"title": "$:/languages/en-GB/icon",
"type": "image/svg+xml",
"text": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 60 30\" width=\"1200\" height=\"600\">\n<clipPath id=\"t\">\n\t<path d=\"M30,15 h30 v15 z v15 h-30 z h-30 v-15 z v-15 h30 z\"/>\n</clipPath>\n<path d=\"M0,0 v30 h60 v-30 z\" fill=\"#00247d\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" stroke=\"#fff\" stroke-width=\"6\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" clip-path=\"url(#t)\" stroke=\"#cf142b\" stroke-width=\"4\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#fff\" stroke-width=\"10\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#cf142b\" stroke-width=\"6\"/>\n</svg>\n"
},
"$:/languages/en-GB": {
"title": "$:/languages/en-GB",
"name": "en-GB",
"description": "English (British)",
"author": "JeremyRuston",
"core-version": ">=5.0.0\"",
"text": "Stub pseudo-plugin for the default language"
},
"$:/core/modules/commander.js": {
"title": "$:/core/modules/commander.js",
"text": "/*\\\ntitle: $:/core/modules/commander.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Commander class is a command interpreter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse a sequence of commands\n\tcommandTokens: an array of command string tokens\n\twiki: reference to the wiki store object\n\tstreams: {output:, error:}, each of which has a write(string) method\n\tcallback: a callback invoked as callback(err) where err is null if there was no error\n*/\nvar Commander = function(commandTokens,callback,wiki,streams) {\n\tvar path = require(\"path\");\n\tthis.commandTokens = commandTokens;\n\tthis.nextToken = 0;\n\tthis.callback = callback;\n\tthis.wiki = wiki;\n\tthis.streams = streams;\n\tthis.outputPath = path.resolve($tw.boot.wikiPath,$tw.config.wikiOutputSubDir);\n};\n\n/*\nLog a string if verbose flag is set\n*/\nCommander.prototype.log = function(str) {\n\tif(this.verbose) {\n\t\tthis.streams.output.write(str + \"\\n\");\n\t}\n};\n\n/*\nWrite a string if verbose flag is set\n*/\nCommander.prototype.write = function(str) {\n\tif(this.verbose) {\n\t\tthis.streams.output.write(str);\n\t}\n};\n\n/*\nAdd a string of tokens to the command queue\n*/\nCommander.prototype.addCommandTokens = function(commandTokens) {\n\tvar params = commandTokens.slice(0);\n\tparams.unshift(0);\n\tparams.unshift(this.nextToken);\n\tArray.prototype.splice.apply(this.commandTokens,params);\n};\n\n/*\nExecute the sequence of commands and invoke a callback on completion\n*/\nCommander.prototype.execute = function() {\n\tthis.executeNextCommand();\n};\n\n/*\nExecute the next command in the sequence\n*/\nCommander.prototype.executeNextCommand = function() {\n\tvar self = this;\n\t// Invoke the callback if there are no more commands\n\tif(this.nextToken >= this.commandTokens.length) {\n\t\tthis.callback(null);\n\t} else {\n\t\t// Get and check the command token\n\t\tvar commandName = this.commandTokens[this.nextToken++];\n\t\tif(commandName.substr(0,2) !== \"--\") {\n\t\t\tthis.callback(\"Missing command: \" + commandName);\n\t\t} else {\n\t\t\tcommandName = commandName.substr(2); // Trim off the --\n\t\t\t// Accumulate the parameters to the command\n\t\t\tvar params = [];\n\t\t\twhile(this.nextToken < this.commandTokens.length && \n\t\t\t\tthis.commandTokens[this.nextToken].substr(0,2) !== \"--\") {\n\t\t\t\tparams.push(this.commandTokens[this.nextToken++]);\n\t\t\t}\n\t\t\t// Get the command info\n\t\t\tvar command = $tw.commands[commandName],\n\t\t\t\tc,err;\n\t\t\tif(!command) {\n\t\t\t\tthis.callback(\"Unknown command: \" + commandName);\n\t\t\t} else {\n\t\t\t\tif(this.verbose) {\n\t\t\t\t\tthis.streams.output.write(\"Executing command: \" + commandName + \" \" + params.join(\" \") + \"\\n\");\n\t\t\t\t}\n\t\t\t\t// Parse named parameters if required\n\t\t\t\tif(command.info.namedParameterMode) {\n\t\t\t\t\tparams = this.extractNamedParameters(params,command.info.mandatoryParameters);\n\t\t\t\t\tif(typeof params === \"string\") {\n\t\t\t\t\t\treturn this.callback(params);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(command.info.synchronous) {\n\t\t\t\t\t// Synchronous command\n\t\t\t\t\tc = new command.Command(params,this);\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.executeNextCommand();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Asynchronous command\n\t\t\t\t\tc = new command.Command(params,this,function(err) {\n\t\t\t\t\t\tif(err) {\n\t\t\t\t\t\t\tself.callback(err);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.executeNextCommand();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nGiven an array of parameter strings `params` in name:value format, and an array of mandatory parameter names in `mandatoryParameters`, returns a hashmap of values or a string if error\n*/\nCommander.prototype.extractNamedParameters = function(params,mandatoryParameters) {\n\tmandatoryParameters = mandatoryParameters || [];\n\tvar errors = [],\n\t\tparamsByName = Object.create(null);\n\t// Extract the parameters\n\t$tw.utils.each(params,function(param) {\n\t\tvar index = param.indexOf(\"=\");\n\t\tif(index < 1) {\n\t\t\terrors.push(\"malformed named parameter: '\" + param + \"'\");\n\t\t}\n\t\tparamsByName[param.slice(0,index)] = $tw.utils.trim(param.slice(index+1));\n\t});\n\t// Check the mandatory parameters are present\n\t$tw.utils.each(mandatoryParameters,function(mandatoryParameter) {\n\t\tif(!$tw.utils.hop(paramsByName,mandatoryParameter)) {\n\t\t\terrors.push(\"missing mandatory parameter: '\" + mandatoryParameter + \"'\");\n\t\t}\n\t});\n\t// Return any errors\n\tif(errors.length > 0) {\n\t\treturn errors.join(\" and\\n\");\n\t} else {\n\t\treturn paramsByName;\t\t\n\t}\n};\n\nCommander.initCommands = function(moduleType) {\n\tmoduleType = moduleType || \"command\";\n\t$tw.commands = {};\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tvar c = $tw.commands[module.info.name] = {};\n\t\t// Add the methods defined by the module\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\tc[f] = module[f];\n\t\t\t}\n\t\t}\n\t});\n};\n\nexports.Commander = Commander;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/commands/build.js": {
"title": "$:/core/modules/commands/build.js",
"text": "/*\\\ntitle: $:/core/modules/commands/build.js\ntype: application/javascript\nmodule-type: command\n\nCommand to build a build target\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"build\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\t// Get the build targets defined in the wiki\n\tvar buildTargets = $tw.boot.wikiInfo.build;\n\tif(!buildTargets) {\n\t\treturn \"No build targets defined\";\n\t}\n\t// Loop through each of the specified targets\n\tvar targets;\n\tif(this.params.length > 0) {\n\t\ttargets = this.params;\n\t} else {\n\t\ttargets = Object.keys(buildTargets);\n\t}\n\tfor(var targetIndex=0; targetIndex<targets.length; targetIndex++) {\n\t\tvar target = targets[targetIndex],\n\t\t\tcommands = buildTargets[target];\n\t\tif(!commands) {\n\t\t\treturn \"Build target '\" + target + \"' not found\";\n\t\t}\n\t\t// Add the commands to the queue\n\t\tthis.commander.addCommandTokens(commands);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/clearpassword.js": {
"title": "$:/core/modules/commands/clearpassword.js",
"text": "/*\\\ntitle: $:/core/modules/commands/clearpassword.js\ntype: application/javascript\nmodule-type: command\n\nClear password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"clearpassword\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\t$tw.crypto.setPassword(null);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/deletetiddlers.js": {
"title": "$:/core/modules/commands/deletetiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/commands/deletetiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to delete tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"deletetiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filter\";\n\t}\n\tvar self = this,\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\twiki.deleteTiddler(title);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/editions.js": {
"title": "$:/core/modules/commands/editions.js",
"text": "/*\\\ntitle: $:/core/modules/commands/editions.js\ntype: application/javascript\nmodule-type: command\n\nCommand to list the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"editions\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this;\n\t// Output the list\n\tthis.commander.streams.output.write(\"Available editions:\\n\\n\");\n\tvar editionInfo = $tw.utils.getEditionInfo();\n\t$tw.utils.each(editionInfo,function(info,name) {\n\t\tself.commander.streams.output.write(\" \" + name + \": \" + info.description + \"\\n\");\n\t});\n\tthis.commander.streams.output.write(\"\\n\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/fetch.js": {
"title": "$:/core/modules/commands/fetch.js",
"text": "/*\\\ntitle: $:/core/modules/commands/fetch.js\ntype: application/javascript\nmodule-type: command\n\nCommands to fetch external tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"fetch\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing subcommand and url\";\n\t}\n\tswitch(this.params[0]) {\n\t\tcase \"raw-file\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\traw: true,\n\t\t\t\turl: this.params[1],\n\t\t\t\ttransformFilter: this.params[2] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"file\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\turl: this.params[1],\n\t\t\t\timportFilter: this.params[2],\n\t\t\t\ttransformFilter: this.params[3] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"raw-files\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\traw: true,\n\t\t\t\turlFilter: this.params[1],\n\t\t\t\ttransformFilter: this.params[2] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"files\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\turlFilter: this.params[1],\n\t\t\t\timportFilter: this.params[2],\n\t\t\t\ttransformFilter: this.params[3] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t}\n\treturn null;\n};\n\nCommand.prototype.fetchFiles = function(options) {\n\tvar self = this;\n\t// Get the list of URLs\n\tvar urls;\n\tif(options.url) {\n\t\turls = [options.url]\n\t} else if(options.urlFilter) {\n\t\turls = this.commander.wiki.filterTiddlers(options.urlFilter);\n\t} else {\n\t\treturn \"Missing URL\";\n\t}\n\t// Process each URL in turn\n\tvar next = 0;\n\tvar getNextFile = function(err) {\n\t\tif(err) {\n\t\t\treturn options.callback(err);\n\t\t}\n\t\tif(next < urls.length) {\n\t\t\tself.fetchFile(urls[next++],options,getNextFile);\n\t\t} else {\n\t\t\toptions.callback(null);\n\t\t}\n\t};\n\tgetNextFile(null);\n\t// Success\n\treturn null;\n};\n\nCommand.prototype.fetchFile = function(url,options,callback,redirectCount) {\n\tif(redirectCount > 10) {\n\t\treturn callback(\"Error too many redirects retrieving \" + url);\n\t}\n\tvar self = this,\n\t\tlib = url.substr(0,8) === \"https://\" ? require(\"https\") : require(\"http\");\n\tlib.get(url).on(\"response\",function(response) {\n\t var type = (response.headers[\"content-type\"] || \"\").split(\";\")[0],\n\t \tdata = [];\n\t self.commander.write(\"Reading \" + url + \": \");\n\t response.on(\"data\",function(chunk) {\n\t data.push(chunk);\n\t self.commander.write(\".\");\n\t });\n\t response.on(\"end\",function() {\n\t self.commander.write(\"\\n\");\n\t if(response.statusCode === 200) {\n\t\t self.processBody(Buffer.concat(data),type,options,url);\n\t\t callback(null);\n\t } else {\n\t \tif(response.statusCode === 302 || response.statusCode === 303 || response.statusCode === 307) {\n\t \t\treturn self.fetchFile(response.headers.location,options,callback,redirectCount + 1);\n\t \t} else {\n\t\t \treturn callback(\"Error \" + response.statusCode + \" retrieving \" + url)\t \t\t\n\t \t}\n\t }\n\t \t});\n\t \tresponse.on(\"error\",function(e) {\n\t\t\tconsole.log(\"Error on GET request: \" + e);\n\t\t\tcallback(e);\n\t \t});\n\t});\n\treturn null;\n};\n\nCommand.prototype.processBody = function(body,type,options,url) {\n\tvar self = this;\n\t// Collect the tiddlers in a wiki\n\tvar incomingWiki = new $tw.Wiki();\n\tif(options.raw) {\n\t\tvar typeInfo = type ? $tw.config.contentTypeInfo[type] : null,\n\t\t\tencoding = typeInfo ? typeInfo.encoding : \"utf8\";\n\t\tincomingWiki.addTiddler(new $tw.Tiddler({\n\t\t\ttitle: url,\n\t\t\ttype: type,\n\t\t\ttext: body.toString(encoding)\n\t\t}));\n\t} else {\n\t\t// Deserialise the file to extract the tiddlers\n\t\tvar tiddlers = this.commander.wiki.deserializeTiddlers(type || \"text/html\",body.toString(\"utf8\"),{});\n\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\tincomingWiki.addTiddler(new $tw.Tiddler(tiddler));\n\t\t});\n\t}\n\t// Filter the tiddlers to select the ones we want\n\tvar filteredTitles = incomingWiki.filterTiddlers(options.importFilter || \"[all[tiddlers]]\");\n\t// Import the selected tiddlers\n\tvar count = 0;\n\tincomingWiki.each(function(tiddler,title) {\n\t\tif(filteredTitles.indexOf(title) !== -1) {\n\t\t\tvar newTiddler;\n\t\t\tif(options.transformFilter) {\n\t\t\t\tvar transformedTitle = (incomingWiki.filterTiddlers(options.transformFilter,null,self.commander.wiki.makeTiddlerIterator([title])) || [\"\"])[0];\n\t\t\t\tif(transformedTitle) {\n\t\t\t\t\tself.commander.log(\"Importing \" + title + \" as \" + transformedTitle)\n\t\t\t\t\tnewTiddler = new $tw.Tiddler(tiddler,{title: transformedTitle});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself.commander.log(\"Importing \" + title)\n\t\t\t\tnewTiddler = tiddler;\n\t\t\t}\n\t\t\tself.commander.wiki.importTiddler(newTiddler);\n\t\t\tcount++;\n\t\t}\n\t});\n\tself.commander.log(\"Imported \" + count + \" tiddlers\")\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/help.js": {
"title": "$:/core/modules/commands/help.js",
"text": "/*\\\ntitle: $:/core/modules/commands/help.js\ntype: application/javascript\nmodule-type: command\n\nHelp command\n\n\\*/\n(function(){\n\n/*jshint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"help\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar subhelp = this.params[0] || \"default\",\n\t\thelpBase = \"$:/language/Help/\",\n\t\ttext;\n\tif(!this.commander.wiki.getTiddler(helpBase + subhelp)) {\n\t\tsubhelp = \"notfound\";\n\t}\n\t// Wikify the help as formatted text (ie block elements generate newlines)\n\ttext = this.commander.wiki.renderTiddler(\"text/plain-formatted\",helpBase + subhelp);\n\t// Remove any leading linebreaks\n\ttext = text.replace(/^(\\r?\\n)*/g,\"\");\n\tthis.commander.streams.output.write(text);\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/import.js": {
"title": "$:/core/modules/commands/import.js",
"text": "/*\\\ntitle: $:/core/modules/commands/import.js\ntype: application/javascript\nmodule-type: command\n\nCommand to import tiddlers from a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"import\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 2) {\n\t\treturn \"Missing parameters\";\n\t}\n\tvar filename = self.params[0],\n\t\tdeserializer = self.params[1],\n\t\ttitle = self.params[2] || filename,\n\t\tencoding = self.params[3] || \"utf8\",\n\t\ttext = fs.readFileSync(filename,encoding),\n\t\ttiddlers = this.commander.wiki.deserializeTiddlers(null,text,{title: title},{deserializer: deserializer});\n\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\n\t});\n\tthis.commander.log(tiddlers.length + \" tiddler(s) imported\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/init.js": {
"title": "$:/core/modules/commands/init.js",
"text": "/*\\\ntitle: $:/core/modules/commands/init.js\ntype: application/javascript\nmodule-type: command\n\nCommand to initialise an empty wiki folder\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"init\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\t// Check that we don't already have a valid wiki folder\n\tif($tw.boot.wikiTiddlersPath || ($tw.utils.isDirectory($tw.boot.wikiPath) && !$tw.utils.isDirectoryEmpty($tw.boot.wikiPath))) {\n\t\treturn \"Wiki folder is not empty\";\n\t}\n\t// Loop through each of the specified editions\n\tvar editions = this.params.length > 0 ? this.params : [\"empty\"];\n\tfor(var editionIndex=0; editionIndex<editions.length; editionIndex++) {\n\t\tvar editionName = editions[editionIndex];\n\t\t// Check the edition exists\n\t\tvar editionPath = $tw.findLibraryItem(editionName,$tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar));\n\t\tif(!$tw.utils.isDirectory(editionPath)) {\n\t\t\treturn \"Edition '\" + editionName + \"' not found\";\n\t\t}\n\t\t// Copy the edition content\n\t\tvar err = $tw.utils.copyDirectory(editionPath,$tw.boot.wikiPath);\n\t\tif(!err) {\n\t\t\tthis.commander.streams.output.write(\"Copied edition '\" + editionName + \"' to \" + $tw.boot.wikiPath + \"\\n\");\n\t\t} else {\n\t\t\treturn err;\n\t\t}\n\t}\n\t// Tweak the tiddlywiki.info to remove any included wikis\n\tvar packagePath = $tw.boot.wikiPath + \"/tiddlywiki.info\",\n\t\tpackageJson = JSON.parse(fs.readFileSync(packagePath));\n\tdelete packageJson.includeWikis;\n\tfs.writeFileSync(packagePath,JSON.stringify(packageJson,null,$tw.config.preferences.jsonSpaces));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/listen.js": {
"title": "$:/core/modules/commands/listen.js",
"text": "/*\\\ntitle: $:/core/modules/commands/listen.js\ntype: application/javascript\nmodule-type: command\n\nListen for HTTP requests and serve tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Server = require(\"$:/core/modules/server/server.js\").Server;\n\nexports.info = {\n\tname: \"listen\",\n\tsynchronous: true,\n\tnamedParameterMode: true,\n\tmandatoryParameters: [],\n};\n\nvar Command = function(params,commander,callback) {\n\tvar self = this;\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this;\n\tif(!$tw.boot.wikiTiddlersPath) {\n\t\t$tw.utils.warning(\"Warning: Wiki folder '\" + $tw.boot.wikiPath + \"' does not exist or is missing a tiddlywiki.info file\");\n\t}\n\t// Set up server\n\tthis.server = new Server({\n\t\twiki: this.commander.wiki,\n\t\tvariables: self.params\n\t});\n\tvar nodeServer = this.server.listen();\n\t$tw.hooks.invokeHook(\"th-server-command-post-start\",this.server,nodeServer,\"tiddlywiki\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/load.js": {
"title": "$:/core/modules/commands/load.js",
"text": "/*\\\ntitle: $:/core/modules/commands/load.js\ntype: application/javascript\nmodule-type: command\n\nCommand to load tiddlers from a file or directory\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"load\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar tiddlers = $tw.loadTiddlersFromPath(self.params[0]),\n\t\tcount = 0;\n\t$tw.utils.each(tiddlers,function(tiddlerInfo) {\n\t\t$tw.utils.each(tiddlerInfo.tiddlers,function(tiddler) {\n\t\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\n\t\t\tcount++;\n\t\t});\n\t});\n\tif(!count && self.params[1] !== \"noerror\") {\n\t\tself.callback(\"No tiddlers found in file \\\"\" + self.params[0] + \"\\\"\");\n\t} else {\n\t\tself.callback(null);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/makelibrary.js": {
"title": "$:/core/modules/commands/makelibrary.js",
"text": "/*\\\ntitle: $:/core/modules/commands/makelibrary.js\ntype: application/javascript\nmodule-type: command\n\nCommand to pack all of the plugins in the library into a plugin tiddler of type \"library\"\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"makelibrary\",\n\tsynchronous: true\n};\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar wiki = this.commander.wiki,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tupgradeLibraryTitle = this.params[0] || UPGRADE_LIBRARY_TITLE,\n\t\ttiddlers = {};\n\t// Collect up the library plugins\n\tvar collectPlugins = function(folder) {\n\t\t\tvar pluginFolders = $tw.utils.getSubdirectories(folder) || [];\n\t\t\tfor(var p=0; p<pluginFolders.length; p++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(pluginFolders[p])) {\n\t\t\t\t\tpluginFields = $tw.loadPluginFolder(path.resolve(folder,\"./\" + pluginFolders[p]));\n\t\t\t\t\tif(pluginFields && pluginFields.title) {\n\t\t\t\t\t\ttiddlers[pluginFields.title] = pluginFields;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcollectPublisherPlugins = function(folder) {\n\t\t\tvar publisherFolders = $tw.utils.getSubdirectories(folder) || [];\n\t\t\tfor(var t=0; t<publisherFolders.length; t++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(publisherFolders[t])) {\n\t\t\t\t\tcollectPlugins(path.resolve(folder,\"./\" + publisherFolders[t]));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.pluginsPath,$tw.config.pluginsEnvVar),collectPublisherPlugins);\n\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.themesPath,$tw.config.themesEnvVar),collectPublisherPlugins);\n\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.languagesPath,$tw.config.languagesEnvVar),collectPlugins);\n\t// Save the upgrade library tiddler\n\tvar pluginFields = {\n\t\ttitle: upgradeLibraryTitle,\n\t\ttype: \"application/json\",\n\t\t\"plugin-type\": \"library\",\n\t\t\"text\": JSON.stringify({tiddlers: tiddlers})\n\t};\n\twiki.addTiddler(new $tw.Tiddler(pluginFields));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/output.js": {
"title": "$:/core/modules/commands/output.js",
"text": "/*\\\ntitle: $:/core/modules/commands/output.js\ntype: application/javascript\nmodule-type: command\n\nCommand to set the default output location (defaults to current working directory)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"output\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing output path\";\n\t}\n\tthis.commander.outputPath = path.resolve(process.cwd(),this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/password.js": {
"title": "$:/core/modules/commands/password.js",
"text": "/*\\\ntitle: $:/core/modules/commands/password.js\ntype: application/javascript\nmodule-type: command\n\nSave password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"password\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing password\";\n\t}\n\t$tw.crypto.setPassword(this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/render.js": {
"title": "$:/core/modules/commands/render.js",
"text": "/*\\\ntitle: $:/core/modules/commands/render.js\ntype: application/javascript\nmodule-type: command\n\nRender individual tiddlers and save the results to the specified files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"render\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing tiddler filter\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\ttiddlerFilter = this.params[0],\n\t\tfilenameFilter = this.params[1] || \"[is[tiddler]addsuffix[.html]]\",\n\t\ttype = this.params[2] || \"text/html\",\n\t\ttemplate = this.params[3],\n\t\tvarName = this.params[4],\n\t\tvarValue = this.params[5],\n\t\ttiddlers = wiki.filterTiddlers(tiddlerFilter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template || title),\n\t\t\tvariables = {currentTiddler: title};\n\t\tif(varName) {\n\t\t\tvariables[varName] = varValue || \"\";\n\t\t}\n\t\tvar widgetNode = wiki.makeWidget(parser,{variables: variables}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent,\n\t\t\tfilepath = path.resolve(self.commander.outputPath,wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0]);\n\t\tif(self.commander.verbose) {\n\t\t\tconsole.log(\"Rendering \\\"\" + title + \"\\\" to \\\"\" + filepath + \"\\\"\");\n\t\t}\n\t\t$tw.utils.createFileDirectories(filepath);\n\t\tfs.writeFileSync(filepath,text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/rendertiddler.js": {
"title": "$:/core/modules/commands/rendertiddler.js",
"text": "/*\\\ntitle: $:/core/modules/commands/rendertiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render a tiddler and save it to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"rendertiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttype = this.params[2] || \"text/html\",\n\t\ttemplate = this.params[3],\n\t\tname = this.params[4],\n\t\tvalue = this.params[5],\n\t\tvariables = {};\n\t$tw.utils.createFileDirectories(filename);\n\tif(template) {\n\t\tvariables.currentTiddler = title;\n\t\ttitle = template;\n\t}\n\tif(name && value) {\n\t\tvariables[name] = value;\n\t}\n\tfs.writeFile(filename,this.commander.wiki.renderTiddler(type,title,{variables: variables}),\"utf8\",function(err) {\n\t\tself.callback(err);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/rendertiddlers.js": {
"title": "$:/core/modules/commands/rendertiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/commands/rendertiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"rendertiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttemplate = this.params[1],\n\t\toutputPath = this.commander.outputPath,\n\t\tpathname = path.resolve(outputPath,this.params[2]),\t\t\n\t\ttype = this.params[3] || \"text/html\",\n\t\textension = this.params[4] || \".html\",\n\t\tdeleteDirectory = (this.params[5] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template),\n\t\t\twidgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent,\n\t\t\texportPath = null;\n\t\tif($tw.utils.hop($tw.macros,\"tv-get-export-path\")) {\n\t\t\tvar macroPath = $tw.macros[\"tv-get-export-path\"].run.apply(self,[title]);\n\t\t\tif(macroPath) {\n\t\t\t\texportPath = path.resolve(outputPath,macroPath + extension);\n\t\t\t}\n\t\t}\n\t\tvar finalPath = exportPath || path.resolve(pathname,encodeURIComponent(title) + extension);\n\t\t$tw.utils.createFileDirectories(finalPath);\n\t\tfs.writeFileSync(finalPath,text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/save.js": {
"title": "$:/core/modules/commands/save.js",
"text": "/*\\\ntitle: $:/core/modules/commands/save.js\ntype: application/javascript\nmodule-type: command\n\nSaves individual tiddlers in their raw text or binary format to the specified files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"save\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename filter\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\ttiddlerFilter = this.params[0],\n\t\tfilenameFilter = this.params[1] || \"[is[tiddler]]\",\n\t\ttiddlers = wiki.filterTiddlers(tiddlerFilter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilepath = path.resolve(self.commander.outputPath,wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0]);\n\t\tif(self.commander.verbose) {\n\t\t\tconsole.log(\"Saving \\\"\" + title + \"\\\" to \\\"\" + filepath + \"\\\"\");\n\t\t}\n\t\t$tw.utils.createFileDirectories(filepath);\n\t\tfs.writeFileSync(filepath,tiddler.fields.text,contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savelibrarytiddlers.js": {
"title": "$:/core/modules/commands/savelibrarytiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/commands/savelibrarytiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the subtiddlers of a bundle tiddler as a series of JSON files\n\n--savelibrarytiddlers <tiddler> <tiddler-filter> <pathname> <skinnylisting>\n\nThe tiddler identifies the bundle tiddler that contains the subtiddlers.\n\nThe tiddler filter specifies the plugins to be included.\n\nThe pathname specifies the pathname to the folder in which the JSON files should be saved. The filename is the URL encoded title of the subtiddler.\n\nThe skinnylisting specifies the title of the tiddler to which a JSON catalogue of the subtiddlers will be saved. The JSON file contains the same data as the bundle tiddler but with the `text` field removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savelibrarytiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tcontainerTitle = this.params[0],\n\t\tfilter = this.params[1],\n\t\tbasepath = this.params[2],\n\t\tskinnyListTitle = this.params[3];\n\t// Get the container tiddler as data\n\tvar containerData = self.commander.wiki.getTiddlerDataCached(containerTitle,undefined);\n\tif(!containerData) {\n\t\treturn \"'\" + containerTitle + \"' is not a tiddler bundle\";\n\t}\n\t// Filter the list of plugins\n\tvar pluginList = [];\n\t$tw.utils.each(containerData.tiddlers,function(tiddler,title) {\n\t\tpluginList.push(title);\n\t});\n\tvar filteredPluginList;\n\tif(filter) {\n\t\tfilteredPluginList = self.commander.wiki.filterTiddlers(filter,null,self.commander.wiki.makeTiddlerIterator(pluginList));\n\t} else {\n\t\tfilteredPluginList = pluginList;\n\t}\n\t// Iterate through the plugins\n\tvar skinnyList = [];\n\t$tw.utils.each(filteredPluginList,function(title) {\n\t\tvar tiddler = containerData.tiddlers[title];\n\t\t// Save each JSON file and collect the skinny data\n\t\tvar pathname = path.resolve(self.commander.outputPath,basepath + encodeURIComponent(title) + \".json\");\n\t\t$tw.utils.createFileDirectories(pathname);\n\t\tfs.writeFileSync(pathname,JSON.stringify(tiddler),\"utf8\");\n\t\t// Collect the skinny list data\n\t\tvar pluginTiddlers = JSON.parse(tiddler.text),\n\t\t\treadmeContent = (pluginTiddlers.tiddlers[title + \"/readme\"] || {}).text,\n\t\t\tdoesRequireReload = !!self.commander.wiki.doesPluginInfoRequireReload(pluginTiddlers),\n\t\t\ticonTiddler = pluginTiddlers.tiddlers[title + \"/icon\"] || {},\n\t\t\ticonType = iconTiddler.type,\n\t\t\ticonText = iconTiddler.text,\n\t\t\ticonContent;\n\t\tif(iconType && iconText) {\n\t\t\ticonContent = $tw.utils.makeDataUri(iconText,iconType);\n\t\t}\n\t\tskinnyList.push($tw.utils.extend({},tiddler,{\n\t\t\ttext: undefined,\n\t\t\treadme: readmeContent,\n\t\t\t\"requires-reload\": doesRequireReload ? \"yes\" : \"no\",\n\t\t\ticon: iconContent\n\t\t}));\n\t});\n\t// Save the catalogue tiddler\n\tif(skinnyListTitle) {\n\t\tself.commander.wiki.setTiddlerData(skinnyListTitle,skinnyList);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savetiddler.js": {
"title": "$:/core/modules/commands/savetiddler.js",
"text": "/*\\\ntitle: $:/core/modules/commands/savetiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the content of a tiddler to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savetiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttiddler = this.commander.wiki.getTiddler(title);\n\tif(tiddler) {\n\t\tvar type = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"};\n\t\t$tw.utils.createFileDirectories(filename);\n\t\tfs.writeFile(filename,tiddler.fields.text,contentTypeInfo.encoding,function(err) {\n\t\t\tself.callback(err);\n\t\t});\n\t} else {\n\t\treturn \"Missing tiddler: \" + title;\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savetiddlers.js": {
"title": "$:/core/modules/commands/savetiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/commands/savetiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"savetiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tpathname = path.resolve(this.commander.outputPath,this.params[1]),\n\t\tdeleteDirectory = (this.params[2] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.createDirectory(pathname);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilename = path.resolve(pathname,encodeURIComponent(title));\n\t\tfs.writeFileSync(filename,tiddler.fields.text,contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savewikifolder.js": {
"title": "$:/core/modules/commands/savewikifolder.js",
"text": "/*\\\ntitle: $:/core/modules/commands/savewikifolder.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the current wiki as a wiki folder\n\n--savewikifolder <wikifolderpath> [<filter>]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savewikifolder\",\n\tsynchronous: true\n};\n\nvar fs,path;\nif($tw.node) {\n\tfs = require(\"fs\");\n\tpath = require(\"path\");\n}\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing wiki folder path\";\n\t}\n\tvar wikifoldermaker = new WikiFolderMaker(this.params[0],this.params[1],this.commander);\n\treturn wikifoldermaker.save();\n};\n\nfunction WikiFolderMaker(wikiFolderPath,wikiFilter,commander) {\n\tthis.wikiFolderPath = wikiFolderPath;\n\tthis.wikiFilter = wikiFilter || \"[all[tiddlers]]\";\n\tthis.commander = commander;\n\tthis.wiki = commander.wiki;\n\tthis.savedPaths = []; // So that we can detect filename clashes\n}\n\nWikiFolderMaker.prototype.log = function(str) {\n\tif(this.commander.verbose) {\n\t\tconsole.log(str);\n\t}\n};\n\nWikiFolderMaker.prototype.tiddlersToIgnore = [\n\t\"$:/boot/boot.css\",\n\t\"$:/boot/boot.js\",\n\t\"$:/boot/bootprefix.js\",\n\t\"$:/core\",\n\t\"$:/library/sjcl.js\",\n\t\"$:/temp/info-plugin\"\n];\n\n/*\nReturns null if successful, or an error string if there was an error\n*/\nWikiFolderMaker.prototype.save = function() {\n\tvar self = this;\n\t// Check that the output directory doesn't exist\n\tif(fs.existsSync(this.wikiFolderPath) && !$tw.utils.isDirectoryEmpty(this.wikiFolderPath)) {\n\t\treturn \"The unpackwiki command requires that the output wiki folder be empty\";\n\t}\n\t// Get the tiddlers from the source wiki\n\tvar tiddlerTitles = this.wiki.filterTiddlers(this.wikiFilter);\n\t// Initialise a new tiddlwiki.info file\n\tvar newWikiInfo = {};\n\t// Process each incoming tiddler in turn\n\t$tw.utils.each(tiddlerTitles,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tif(self.tiddlersToIgnore.indexOf(title) !== -1) {\n\t\t\t\t// Ignore the core plugin and the ephemeral info plugin\n\t\t\t\tself.log(\"Ignoring tiddler: \" + title);\n\t\t\t} else {\n\t\t\t\tvar type = tiddler.fields.type,\n\t\t\t\t\tpluginType = tiddler.fields[\"plugin-type\"];\n\t\t\t\tif(type === \"application/json\" && pluginType) {\n\t\t\t\t\t// Plugin tiddler\n\t\t\t\t\tvar libraryDetails = self.findPluginInLibrary(title);\n\t\t\t\t\tif(libraryDetails) {\n\t\t\t\t\t\t// A plugin from the core library\n\t\t\t\t\t\tself.log(\"Adding built-in plugin: \" + libraryDetails.name);\n\t\t\t\t\t\tnewWikiInfo[libraryDetails.type] = newWikiInfo[libraryDetails.type] || [];\n\t\t\t\t\t\t$tw.utils.pushTop(newWikiInfo[libraryDetails.type],libraryDetails.name);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// A custom plugin\n\t\t\t\t\t\tself.log(\"Processing custom plugin: \" + title);\n\t\t\t\t\t\tself.saveCustomPlugin(tiddler);\n\t\t\t\t\t}\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\t// Ordinary tiddler\n\t\t\t\t\tself.saveTiddler(\"tiddlers\",tiddler);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\t// Save the tiddlywiki.info file\n\tthis.saveJSONFile(\"tiddlywiki.info\",newWikiInfo);\n\tself.log(\"Writing tiddlywiki.info: \" + JSON.stringify(newWikiInfo,null,$tw.config.preferences.jsonSpaces));\n\treturn null;\n};\n\n/*\nTest whether the specified tiddler is a plugin in the plugin library\n*/\nWikiFolderMaker.prototype.findPluginInLibrary = function(title) {\n\tvar parts = title.split(\"/\"),\n\t\tpluginPath, type, name;\n\tif(parts[0] === \"$:\") {\n\t\tif(parts[1] === \"languages\" && parts.length === 3) {\n\t\t\tpluginPath = \"languages\" + path.sep + parts[2];\n\t\t\ttype = parts[1];\n\t\t\tname = parts[2];\n\t\t} else if(parts[1] === \"plugins\" || parts[1] === \"themes\" && parts.length === 4) {\n\t\t\tpluginPath = parts[1] + path.sep + parts[2] + path.sep + parts[3];\n\t\t\ttype = parts[1];\n\t\t\tname = parts[2] + \"/\" + parts[3];\n\t\t}\n\t}\n\tif(pluginPath && type && name) {\n\t\tpluginPath = path.resolve($tw.boot.bootPath,\"..\",pluginPath);\n\t\tif(fs.existsSync(pluginPath)) {\n\t\t\treturn {\n\t\t\t\tpluginPath: pluginPath,\n\t\t\t\ttype: type,\n\t\t\t\tname: name\n\t\t\t};\n\t\t}\n\t}\n\treturn false;\n};\n\nWikiFolderMaker.prototype.saveCustomPlugin = function(pluginTiddler) {\n\tvar self = this,\n\t\tpluginTitle = pluginTiddler.fields.title,\n\t\ttitleParts = pluginTitle.split(\"/\"),\n\t\tdirectory = $tw.utils.generateTiddlerFilepath(titleParts[titleParts.length - 1],{\n\t\t\tdirectory: path.resolve(this.wikiFolderPath,pluginTiddler.fields[\"plugin-type\"] + \"s\")\n\t\t}),\n\t\tpluginInfo = pluginTiddler.getFieldStrings({exclude: [\"text\",\"type\"]});\n\tthis.saveJSONFile(directory + path.sep + \"plugin.info\",pluginInfo);\n\tself.log(\"Writing \" + directory + path.sep + \"plugin.info: \" + JSON.stringify(pluginInfo,null,$tw.config.preferences.jsonSpaces));\n\tvar pluginTiddlers = JSON.parse(pluginTiddler.fields.text).tiddlers; // A hashmap of tiddlers in the plugin\n\t$tw.utils.each(pluginTiddlers,function(tiddler) {\n\t\tself.saveTiddler(directory,new $tw.Tiddler(tiddler));\n\t});\n};\n\nWikiFolderMaker.prototype.saveTiddler = function(directory,tiddler) {\n\tvar fileInfo = $tw.utils.generateTiddlerFileInfo(tiddler,{\n\t\tdirectory: path.resolve(this.wikiFolderPath,directory),\n\t\twiki: this.wiki\n\t});\n\t$tw.utils.saveTiddlerToFileSync(tiddler,fileInfo);\n};\n\nWikiFolderMaker.prototype.saveJSONFile = function(filename,json) {\n\tthis.saveTextFile(filename,JSON.stringify(json,null,$tw.config.preferences.jsonSpaces));\n};\n\nWikiFolderMaker.prototype.saveTextFile = function(filename,data) {\n\tthis.saveFile(filename,\"utf8\",data);\n};\n\nWikiFolderMaker.prototype.saveFile = function(filename,encoding,data) {\n\tvar filepath = path.resolve(this.wikiFolderPath,filename);\n\t$tw.utils.createFileDirectories(filepath);\n\tfs.writeFileSync(filepath,data,encoding);\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/server.js": {
"title": "$:/core/modules/commands/server.js",
"text": "/*\\\ntitle: $:/core/modules/commands/server.js\ntype: application/javascript\nmodule-type: command\n\nDeprecated legacy command for serving tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Server = require(\"$:/core/modules/server/server.js\").Server;\n\nexports.info = {\n\tname: \"server\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tvar self = this;\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(!$tw.boot.wikiTiddlersPath) {\n\t\t$tw.utils.warning(\"Warning: Wiki folder '\" + $tw.boot.wikiPath + \"' does not exist or is missing a tiddlywiki.info file\");\n\t}\n\t// Set up server\n\tthis.server = new Server({\n\t\twiki: this.commander.wiki,\n\t\tvariables: {\n\t\t\tport: this.params[0],\n\t\t\thost: this.params[6],\n\t\t\t\"root-tiddler\": this.params[1],\n\t\t\t\"root-render-type\": this.params[2],\n\t\t\t\"root-serve-type\": this.params[3],\n\t\t\tusername: this.params[4],\n\t\t\tpassword: this.params[5],\n\t\t\t\"path-prefix\": this.params[7],\n\t\t\t\"debug-level\": this.params[8]\n\t\t}\n\t});\n\tvar nodeServer = this.server.listen();\n\t$tw.hooks.invokeHook(\"th-server-command-post-start\",this.server,nodeServer,\"tiddlywiki\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/setfield.js": {
"title": "$:/core/modules/commands/setfield.js",
"text": "/*\\\ntitle: $:/core/modules/commands/setfield.js\ntype: application/javascript\nmodule-type: command\n\nCommand to modify selected tiddlers to set a field to the text of a template tiddler that has been wikified with the selected tiddler as the current tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"setfield\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 4) {\n\t\treturn \"Missing parameters\";\n\t}\n\tvar self = this,\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tfieldname = this.params[1] || \"text\",\n\t\ttemplatetitle = this.params[2],\n\t\trendertype = this.params[3] || \"text/plain\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(templatetitle),\n\t\t\tnewFields = {},\n\t\t\ttiddler = wiki.getTiddler(title);\n\t\tif(parser) {\n\t\t\tvar widgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}});\n\t\t\tvar container = $tw.fakeDocument.createElement(\"div\");\n\t\t\twidgetNode.render(container,null);\n\t\t\tnewFields[fieldname] = rendertype === \"text/html\" ? container.innerHTML : container.textContent;\n\t\t} else {\n\t\t\tnewFields[fieldname] = undefined;\n\t\t}\n\t\twiki.addTiddler(new $tw.Tiddler(tiddler,newFields));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/unpackplugin.js": {
"title": "$:/core/modules/commands/unpackplugin.js",
"text": "/*\\\ntitle: $:/core/modules/commands/unpackplugin.js\ntype: application/javascript\nmodule-type: command\n\nCommand to extract the shadow tiddlers from within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"unpackplugin\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing plugin name\";\n\t}\n\tvar self = this,\n\t\ttitle = this.params[0],\n\t\tpluginData = this.commander.wiki.getTiddlerDataCached(title);\n\tif(!pluginData) {\n\t\treturn \"Plugin '\" + title + \"' not found\";\n\t}\n\t$tw.utils.each(pluginData.tiddlers,function(tiddler) {\n\t\tself.commander.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/verbose.js": {
"title": "$:/core/modules/commands/verbose.js",
"text": "/*\\\ntitle: $:/core/modules/commands/verbose.js\ntype: application/javascript\nmodule-type: command\n\nVerbose command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"verbose\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.verbose = true;\n\t// Output the boot message log\n\tthis.commander.streams.output.write(\"Boot log:\\n \" + $tw.boot.logMessages.join(\"\\n \") + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/version.js": {
"title": "$:/core/modules/commands/version.js",
"text": "/*\\\ntitle: $:/core/modules/commands/version.js\ntype: application/javascript\nmodule-type: command\n\nVersion command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"version\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.streams.output.write($tw.version + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/config.js": {
"title": "$:/core/modules/config.js",
"text": "/*\\\ntitle: $:/core/modules/config.js\ntype: application/javascript\nmodule-type: config\n\nCore configuration constants\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.preferences = {};\n\nexports.preferences.notificationDuration = 3 * 1000;\nexports.preferences.jsonSpaces = 4;\n\nexports.textPrimitives = {\n\tupperLetter: \"[A-Z\\u00c0-\\u00d6\\u00d8-\\u00de\\u0150\\u0170]\",\n\tlowerLetter: \"[a-z\\u00df-\\u00f6\\u00f8-\\u00ff\\u0151\\u0171]\",\n\tanyLetter: \"[A-Za-z0-9\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\",\n\tblockPrefixLetters:\t\"[A-Za-z0-9-_\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\"\n};\n\nexports.textPrimitives.unWikiLink = \"~\";\nexports.textPrimitives.wikiLink = exports.textPrimitives.upperLetter + \"+\" +\n\texports.textPrimitives.lowerLetter + \"+\" +\n\texports.textPrimitives.upperLetter +\n\texports.textPrimitives.anyLetter + \"*\";\n\nexports.htmlEntities = {quot:34, amp:38, apos:39, lt:60, gt:62, nbsp:160, iexcl:161, cent:162, pound:163, curren:164, yen:165, brvbar:166, sect:167, uml:168, copy:169, ordf:170, laquo:171, not:172, shy:173, reg:174, macr:175, deg:176, plusmn:177, sup2:178, sup3:179, acute:180, micro:181, para:182, middot:183, cedil:184, sup1:185, ordm:186, raquo:187, frac14:188, frac12:189, frac34:190, iquest:191, Agrave:192, Aacute:193, Acirc:194, Atilde:195, Auml:196, Aring:197, AElig:198, Ccedil:199, Egrave:200, Eacute:201, Ecirc:202, Euml:203, Igrave:204, Iacute:205, Icirc:206, Iuml:207, ETH:208, Ntilde:209, Ograve:210, Oacute:211, Ocirc:212, Otilde:213, Ouml:214, times:215, Oslash:216, Ugrave:217, Uacute:218, Ucirc:219, Uuml:220, Yacute:221, THORN:222, szlig:223, agrave:224, aacute:225, acirc:226, atilde:227, auml:228, aring:229, aelig:230, ccedil:231, egrave:232, eacute:233, ecirc:234, euml:235, igrave:236, iacute:237, icirc:238, iuml:239, eth:240, ntilde:241, ograve:242, oacute:243, ocirc:244, otilde:245, ouml:246, divide:247, oslash:248, ugrave:249, uacute:250, ucirc:251, uuml:252, yacute:253, thorn:254, yuml:255, OElig:338, oelig:339, Scaron:352, scaron:353, Yuml:376, fnof:402, circ:710, tilde:732, Alpha:913, Beta:914, Gamma:915, Delta:916, Epsilon:917, Zeta:918, Eta:919, Theta:920, Iota:921, Kappa:922, Lambda:923, Mu:924, Nu:925, Xi:926, Omicron:927, Pi:928, Rho:929, Sigma:931, Tau:932, Upsilon:933, Phi:934, Chi:935, Psi:936, Omega:937, alpha:945, beta:946, gamma:947, delta:948, epsilon:949, zeta:950, eta:951, theta:952, iota:953, kappa:954, lambda:955, mu:956, nu:957, xi:958, omicron:959, pi:960, rho:961, sigmaf:962, sigma:963, tau:964, upsilon:965, phi:966, chi:967, psi:968, omega:969, thetasym:977, upsih:978, piv:982, ensp:8194, emsp:8195, thinsp:8201, zwnj:8204, zwj:8205, lrm:8206, rlm:8207, ndash:8211, mdash:8212, lsquo:8216, rsquo:8217, sbquo:8218, ldquo:8220, rdquo:8221, bdquo:8222, dagger:8224, Dagger:8225, bull:8226, hellip:8230, permil:8240, prime:8242, Prime:8243, lsaquo:8249, rsaquo:8250, oline:8254, frasl:8260, euro:8364, image:8465, weierp:8472, real:8476, trade:8482, alefsym:8501, larr:8592, uarr:8593, rarr:8594, darr:8595, harr:8596, crarr:8629, lArr:8656, uArr:8657, rArr:8658, dArr:8659, hArr:8660, forall:8704, part:8706, exist:8707, empty:8709, nabla:8711, isin:8712, notin:8713, ni:8715, prod:8719, sum:8721, minus:8722, lowast:8727, radic:8730, prop:8733, infin:8734, ang:8736, and:8743, or:8744, cap:8745, cup:8746, int:8747, there4:8756, sim:8764, cong:8773, asymp:8776, ne:8800, equiv:8801, le:8804, ge:8805, sub:8834, sup:8835, nsub:8836, sube:8838, supe:8839, oplus:8853, otimes:8855, perp:8869, sdot:8901, lceil:8968, rceil:8969, lfloor:8970, rfloor:8971, lang:9001, rang:9002, loz:9674, spades:9824, clubs:9827, hearts:9829, diams:9830 };\n\nexports.htmlVoidElements = \"area,base,br,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr\".split(\",\");\n\nexports.htmlBlockElements = \"address,article,aside,audio,blockquote,canvas,dd,div,dl,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,li,noscript,ol,output,p,pre,section,table,tfoot,ul,video\".split(\",\");\n\nexports.htmlUnsafeElements = \"script\".split(\",\");\n\n})();\n",
"type": "application/javascript",
"module-type": "config"
},
"$:/core/modules/deserializers.js": {
"title": "$:/core/modules/deserializers.js",
"text": "/*\\\ntitle: $:/core/modules/deserializers.js\ntype: application/javascript\nmodule-type: tiddlerdeserializer\n\nFunctions to deserialise tiddlers from a block of text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nUtility function to parse an old-style tiddler DIV in a *.tid file. It looks like this:\n\n<div title=\"Title\" creator=\"JoeBloggs\" modifier=\"JoeBloggs\" created=\"201102111106\" modified=\"201102111310\" tags=\"myTag [[my long tag]]\">\n<pre>The text of the tiddler (without the expected HTML encoding).\n</pre>\n</div>\n\nNote that the field attributes are HTML encoded, but that the body of the <PRE> tag is not encoded.\n\nWhen these tiddler DIVs are encountered within a TiddlyWiki HTML file then the body is encoded in the usual way.\n*/\nvar parseTiddlerDiv = function(text /* [,fields] */) {\n\t// Slot together the default results\n\tvar result = {};\n\tif(arguments.length > 1) {\n\t\tfor(var f=1; f<arguments.length; f++) {\n\t\t\tvar fields = arguments[f];\n\t\t\tfor(var t in fields) {\n\t\t\t\tresult[t] = fields[t];\t\t\n\t\t\t}\n\t\t}\n\t}\n\t// Parse the DIV body\n\tvar startRegExp = /^\\s*<div\\s+([^>]*)>(\\s*<pre>)?/gi,\n\t\tendRegExp,\n\t\tmatch = startRegExp.exec(text);\n\tif(match) {\n\t\t// Old-style DIVs don't have the <pre> tag\n\t\tif(match[2]) {\n\t\t\tendRegExp = /<\\/pre>\\s*<\\/div>\\s*$/gi;\n\t\t} else {\n\t\t\tendRegExp = /<\\/div>\\s*$/gi;\n\t\t}\n\t\tvar endMatch = endRegExp.exec(text);\n\t\tif(endMatch) {\n\t\t\t// Extract the text\n\t\t\tresult.text = text.substring(match.index + match[0].length,endMatch.index);\n\t\t\t// Process the attributes\n\t\t\tvar attrRegExp = /\\s*([^=\\s]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/gi,\n\t\t\t\tattrMatch;\n\t\t\tdo {\n\t\t\t\tattrMatch = attrRegExp.exec(match[1]);\n\t\t\t\tif(attrMatch) {\n\t\t\t\t\tvar name = attrMatch[1];\n\t\t\t\t\tvar value = attrMatch[2] !== undefined ? attrMatch[2] : attrMatch[3];\n\t\t\t\t\tresult[name] = value;\n\t\t\t\t}\n\t\t\t} while(attrMatch);\n\t\t\treturn result;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports[\"application/x-tiddler-html-div\"] = function(text,fields) {\n\treturn [parseTiddlerDiv(text,fields)];\n};\n\nexports[\"application/json\"] = function(text,fields) {\n\tvar incoming,\n\t\tresults = [];\n\ttry {\n\t\tincoming = JSON.parse(text);\n\t} catch(e) {\n\t\tincoming = [{\n\t\t\ttitle: \"JSON error: \" + e,\n\t\t\ttext: \"\"\n\t\t}]\n\t}\n\tif(!$tw.utils.isArray(incoming)) {\n\t\tincoming = [incoming];\n\t}\n\tfor(var t=0; t<incoming.length; t++) {\n\t\tvar incomingFields = incoming[t],\n\t\t\tfields = {};\n\t\tfor(var f in incomingFields) {\n\t\t\tif(typeof incomingFields[f] === \"string\") {\n\t\t\t\tfields[f] = incomingFields[f];\n\t\t\t}\n\t\t}\n\t\tresults.push(fields);\n\t}\n\treturn results;\n};\n\n/*\nParse an HTML file into tiddlers. There are three possibilities:\n# A TiddlyWiki classic HTML file containing `text/x-tiddlywiki` tiddlers\n# A TiddlyWiki5 HTML file containing `text/vnd.tiddlywiki` tiddlers\n# An ordinary HTML file\n*/\nexports[\"text/html\"] = function(text,fields) {\n\t// Check if we've got a store area\n\tvar storeAreaMarkerRegExp = /<div id=[\"']?storeArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\tmatch = storeAreaMarkerRegExp.exec(text);\n\tif(match) {\n\t\t// If so, it's either a classic TiddlyWiki file or an unencrypted TW5 file\n\t\t// First read the normal tiddlers\n\t\tvar results = deserializeTiddlyWikiFile(text,storeAreaMarkerRegExp.lastIndex,!!match[1],fields);\n\t\t// Then any system tiddlers\n\t\tvar systemAreaMarkerRegExp = /<div id=[\"']?systemArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\t\tsysMatch = systemAreaMarkerRegExp.exec(text);\n\t\tif(sysMatch) {\n\t\t\tresults.push.apply(results,deserializeTiddlyWikiFile(text,systemAreaMarkerRegExp.lastIndex,!!sysMatch[1],fields));\n\t\t}\n\t\treturn results;\n\t} else {\n\t\t// Check whether we've got an encrypted file\n\t\tvar encryptedStoreArea = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedStoreArea) {\n\t\t\t// If so, attempt to decrypt it using the current password\n\t\t\treturn $tw.utils.decryptStoreArea(encryptedStoreArea);\n\t\t} else {\n\t\t\t// It's not a TiddlyWiki so we'll return the entire HTML file as a tiddler\n\t\t\treturn deserializeHtmlFile(text,fields);\n\t\t}\n\t}\n};\n\nfunction deserializeHtmlFile(text,fields) {\n\tvar result = {};\n\t$tw.utils.each(fields,function(value,name) {\n\t\tresult[name] = value;\n\t});\n\tresult.text = text;\n\tresult.type = \"text/html\";\n\treturn [result];\n}\n\nfunction deserializeTiddlyWikiFile(text,storeAreaEnd,isTiddlyWiki5,fields) {\n\tvar results = [],\n\t\tendOfDivRegExp = /(<\\/div>\\s*)/gi,\n\t\tstartPos = storeAreaEnd,\n\t\tdefaultType = isTiddlyWiki5 ? undefined : \"text/x-tiddlywiki\";\n\tendOfDivRegExp.lastIndex = startPos;\n\tvar match = endOfDivRegExp.exec(text);\n\twhile(match) {\n\t\tvar endPos = endOfDivRegExp.lastIndex,\n\t\t\ttiddlerFields = parseTiddlerDiv(text.substring(startPos,endPos),fields,{type: defaultType});\n\t\tif(!tiddlerFields) {\n\t\t\tbreak;\n\t\t}\n\t\t$tw.utils.each(tiddlerFields,function(value,name) {\n\t\t\tif(typeof value === \"string\") {\n\t\t\t\ttiddlerFields[name] = $tw.utils.htmlDecode(value);\n\t\t\t}\n\t\t});\n\t\tif(tiddlerFields.text !== null) {\n\t\t\tresults.push(tiddlerFields);\n\t\t}\n\t\tstartPos = endPos;\n\t\tmatch = endOfDivRegExp.exec(text);\n\t}\n\treturn results;\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "tiddlerdeserializer"
},
"$:/core/modules/editor/engines/framed.js": {
"title": "$:/core/modules/editor/engines/framed.js",
"text": "/*\\\ntitle: $:/core/modules/editor/engines/framed.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a simple input or textarea within an iframe. This is done so that the selection is preserved even when clicking away from the textarea\n\n\\*/\n(function(){\n\n/*jslint node: true,browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\";\n\nfunction FramedEngine(options) {\n\t// Save our options\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Create our hidden dummy text area for reading styles\n\tthis.dummyTextArea = this.widget.document.createElement(\"textarea\");\n\tif(this.widget.editClass) {\n\t\tthis.dummyTextArea.className = this.widget.editClass;\n\t}\n\tthis.dummyTextArea.setAttribute(\"hidden\",\"true\");\n\tthis.parentNode.insertBefore(this.dummyTextArea,this.nextSibling);\n\tthis.widget.domNodes.push(this.dummyTextArea);\n\t// Create the iframe\n\tthis.iframeNode = this.widget.document.createElement(\"iframe\");\n\tthis.parentNode.insertBefore(this.iframeNode,this.nextSibling);\n\tthis.iframeDoc = this.iframeNode.contentWindow.document;\n\t// (Firefox requires us to put some empty content in the iframe)\n\tthis.iframeDoc.open();\n\tthis.iframeDoc.write(\"\");\n\tthis.iframeDoc.close();\n\t// Style the iframe\n\tthis.iframeNode.className = this.dummyTextArea.className;\n\tthis.iframeNode.style.border = \"none\";\n\tthis.iframeNode.style.padding = \"0\";\n\tthis.iframeNode.style.resize = \"none\";\n\tthis.iframeDoc.body.style.margin = \"0\";\n\tthis.iframeDoc.body.style.padding = \"0\";\n\tthis.widget.domNodes.push(this.iframeNode);\n\t// Construct the textarea or input node\n\tvar tag = this.widget.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tthis.domNode = this.iframeDoc.createElement(tag);\n\t// Set the text\n\tif(this.widget.editTag === \"textarea\") {\n\t\tthis.domNode.appendChild(this.iframeDoc.createTextNode(this.value));\n\t} else {\n\t\tthis.domNode.value = this.value;\n\t}\n\t// Set the attributes\n\tif(this.widget.editType) {\n\t\tthis.domNode.setAttribute(\"type\",this.widget.editType);\n\t}\n\tif(this.widget.editPlaceholder) {\n\t\tthis.domNode.setAttribute(\"placeholder\",this.widget.editPlaceholder);\n\t}\n\tif(this.widget.editSize) {\n\t\tthis.domNode.setAttribute(\"size\",this.widget.editSize);\n\t}\n\tif(this.widget.editRows) {\n\t\tthis.domNode.setAttribute(\"rows\",this.widget.editRows);\n\t}\n\tif(this.widget.editTabIndex) {\n\t\tthis.iframeNode.setAttribute(\"tabindex\",this.widget.editTabIndex);\n\t}\n\tif(this.widget.editAutoComplete) {\n\t\tthis.domNode.setAttribute(\"autocomplete\",this.widget.editAutoComplete);\n\t}\n\tif(this.widget.isDisabled === \"yes\") {\n\t\tthis.domNode.setAttribute(\"disabled\",true);\n\t}\t\n\t// Copy the styles from the dummy textarea\n\tthis.copyStyles();\n\t// Add event listeners\n\t$tw.utils.addEventListeners(this.domNode,[\n\t\t{name: \"click\",handlerObject: this,handlerMethod: \"handleClickEvent\"},\n\t\t{name: \"input\",handlerObject: this,handlerMethod: \"handleInputEvent\"},\n\t\t{name: \"keydown\",handlerObject: this.widget,handlerMethod: \"handleKeydownEvent\"},\n\t\t{name: \"focus\",handlerObject: this,handlerMethod: \"handleFocusEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tthis.iframeDoc.body.appendChild(this.domNode);\n}\n\n/*\nCopy styles from the dummy text area to the textarea in the iframe\n*/\nFramedEngine.prototype.copyStyles = function() {\n\t// Copy all styles\n\t$tw.utils.copyStyles(this.dummyTextArea,this.domNode);\n\t// Override the ones that should not be set the same as the dummy textarea\n\tthis.domNode.style.display = \"block\";\n\tthis.domNode.style.width = \"100%\";\n\tthis.domNode.style.margin = \"0\";\n\t// In Chrome setting -webkit-text-fill-color overrides the placeholder text colour\n\tthis.domNode.style[\"-webkit-text-fill-color\"] = \"currentcolor\";\n};\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nFramedEngine.prototype.setText = function(text,type) {\n\tif(!this.domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.domNode.ownerDocument.activeElement !== this.domNode) {\n\t\t\tthis.updateDomNodeText(text);\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nUpdate the DomNode with the new text\n*/\nFramedEngine.prototype.updateDomNodeText = function(text) {\n\tthis.domNode.value = text;\n};\n\n/*\nGet the text of the engine\n*/\nFramedEngine.prototype.getText = function() {\n\treturn this.domNode.value;\n};\n\n/*\nFix the height of textarea to fit content\n*/\nFramedEngine.prototype.fixHeight = function() {\n\t// Make sure styles are updated\n\tthis.copyStyles();\n\t// Adjust height\n\tif(this.widget.editTag === \"textarea\") {\n\t\tif(this.widget.editAutoHeight) {\n\t\t\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\n\t\t\t\tvar newHeight = $tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\n\t\t\t\tthis.iframeNode.style.height = (newHeight + 14) + \"px\"; // +14 for the border on the textarea\n\t\t\t}\n\t\t} else {\n\t\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\t\tthis.domNode.style.height = fixedHeight + \"px\";\n\t\t\tthis.iframeNode.style.height = (fixedHeight + 14) + \"px\";\n\t\t}\n\t}\n};\n\n/*\nFocus the engine node\n*/\nFramedEngine.prototype.focus = function() {\n\tif(this.domNode.focus && this.domNode.select) {\n\t\tthis.domNode.focus();\n\t\tthis.domNode.select();\n\t}\n};\n\n/*\nHandle a focus event\n*/\nFramedEngine.prototype.handleFocusEvent = function(event) {\n\tif(this.widget.editCancelPopups) {\n\t\t$tw.popup.cancel(0);\t\n\t}\n};\n\n/*\nHandle a click\n*/\nFramedEngine.prototype.handleClickEvent = function(event) {\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nHandle a dom \"input\" event which occurs when the text has changed\n*/\nFramedEngine.prototype.handleInputEvent = function(event) {\n\tthis.widget.saveChanges(this.getText());\n\tthis.fixHeight();\n\tif(this.widget.editInputActions) {\n\t\tthis.widget.invokeActionString(this.widget.editInputActions);\n\t}\n\treturn true;\n};\n\n/*\nCreate a blank structure representing a text operation\n*/\nFramedEngine.prototype.createTextOperation = function() {\n\tvar operation = {\n\t\ttext: this.domNode.value,\n\t\tselStart: this.domNode.selectionStart,\n\t\tselEnd: this.domNode.selectionEnd,\n\t\tcutStart: null,\n\t\tcutEnd: null,\n\t\treplacement: null,\n\t\tnewSelStart: null,\n\t\tnewSelEnd: null\n\t};\n\toperation.selection = operation.text.substring(operation.selStart,operation.selEnd);\n\treturn operation;\n};\n\n/*\nExecute a text operation\n*/\nFramedEngine.prototype.executeTextOperation = function(operation) {\n\t// Perform the required changes to the text area and the underlying tiddler\n\tvar newText = operation.text;\n\tif(operation.replacement !== null) {\n\t\tnewText = operation.text.substring(0,operation.cutStart) + operation.replacement + operation.text.substring(operation.cutEnd);\n\t\t// Attempt to use a execCommand to modify the value of the control\n\t\tif(this.iframeDoc.queryCommandSupported(\"insertText\") && this.iframeDoc.queryCommandSupported(\"delete\") && !$tw.browser.isFirefox) {\n\t\t\tthis.domNode.focus();\n\t\t\tthis.domNode.setSelectionRange(operation.cutStart,operation.cutEnd);\n\t\t\tif(operation.replacement === \"\") {\n\t\t\t\tthis.iframeDoc.execCommand(\"delete\",false,\"\");\n\t\t\t} else {\n\t\t\t\tthis.iframeDoc.execCommand(\"insertText\",false,operation.replacement);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.domNode.value = newText;\n\t\t}\n\t\tthis.domNode.focus();\n\t\tthis.domNode.setSelectionRange(operation.newSelStart,operation.newSelEnd);\n\t}\n\tthis.domNode.focus();\n\treturn newText;\n};\n\nexports.FramedEngine = FramedEngine;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/editor/engines/simple.js": {
"title": "$:/core/modules/editor/engines/simple.js",
"text": "/*\\\ntitle: $:/core/modules/editor/engines/simple.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a simple input or textarea tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\";\n\nfunction SimpleEngine(options) {\n\t// Save our options\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Construct the textarea or input node\n\tvar tag = this.widget.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tthis.domNode = this.widget.document.createElement(tag);\n\t// Set the text\n\tif(this.widget.editTag === \"textarea\") {\n\t\tthis.domNode.appendChild(this.widget.document.createTextNode(this.value));\n\t} else {\n\t\tthis.domNode.value = this.value;\n\t}\n\t// Set the attributes\n\tif(this.widget.editType) {\n\t\tthis.domNode.setAttribute(\"type\",this.widget.editType);\n\t}\n\tif(this.widget.editPlaceholder) {\n\t\tthis.domNode.setAttribute(\"placeholder\",this.widget.editPlaceholder);\n\t}\n\tif(this.widget.editSize) {\n\t\tthis.domNode.setAttribute(\"size\",this.widget.editSize);\n\t}\n\tif(this.widget.editRows) {\n\t\tthis.domNode.setAttribute(\"rows\",this.widget.editRows);\n\t}\n\tif(this.widget.editClass) {\n\t\tthis.domNode.className = this.widget.editClass;\n\t}\n\tif(this.widget.editTabIndex) {\n\t\tthis.domNode.setAttribute(\"tabindex\",this.widget.editTabIndex);\n\t}\n\tif(this.widget.editAutoComplete) {\n\t\tthis.domNode.setAttribute(\"autocomplete\",this.widget.editAutoComplete);\n\t}\n\tif(this.widget.isDisabled === \"yes\") {\n\t\tthis.domNode.setAttribute(\"disabled\",true);\n\t}\n\t// Add an input event handler\n\t$tw.utils.addEventListeners(this.domNode,[\n\t\t{name: \"focus\", handlerObject: this, handlerMethod: \"handleFocusEvent\"},\n\t\t{name: \"input\", handlerObject: this, handlerMethod: \"handleInputEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tthis.parentNode.insertBefore(this.domNode,this.nextSibling);\n\tthis.widget.domNodes.push(this.domNode);\n}\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nSimpleEngine.prototype.setText = function(text,type) {\n\tif(!this.domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.domNode.ownerDocument.activeElement !== this.domNode || text === \"\") {\n\t\t\tthis.updateDomNodeText(text);\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nUpdate the DomNode with the new text\n*/\nSimpleEngine.prototype.updateDomNodeText = function(text) {\n\tthis.domNode.value = text;\n};\n\n/*\nGet the text of the engine\n*/\nSimpleEngine.prototype.getText = function() {\n\treturn this.domNode.value;\n};\n\n/*\nFix the height of textarea to fit content\n*/\nSimpleEngine.prototype.fixHeight = function() {\n\tif(this.widget.editTag === \"textarea\") {\n\t\tif(this.widget.editAutoHeight) {\n\t\t\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\n\t\t\t\t$tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\n\t\t\t}\n\t\t} else {\n\t\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\t\tthis.domNode.style.height = fixedHeight + \"px\";\n\t\t}\n\t}\n};\n\n/*\nFocus the engine node\n*/\nSimpleEngine.prototype.focus = function() {\n\tif(this.domNode.focus && this.domNode.select) {\n\t\tthis.domNode.focus();\n\t\tthis.domNode.select();\n\t}\n};\n\n/*\nHandle a dom \"input\" event which occurs when the text has changed\n*/\nSimpleEngine.prototype.handleInputEvent = function(event) {\n\tthis.widget.saveChanges(this.getText());\n\tthis.fixHeight();\n\tif(this.widget.editInputActions) {\n\t\tthis.widget.invokeActionString(this.widget.editInputActions);\n\t}\n\treturn true;\n};\n\n/*\nHandle a dom \"focus\" event\n*/\nSimpleEngine.prototype.handleFocusEvent = function(event) {\n\tif(this.widget.editCancelPopups) {\n\t\t$tw.popup.cancel(0);\n\t}\n\tif(this.widget.editFocusPopup) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNode,\n\t\t\ttitle: this.widget.editFocusPopup,\n\t\t\twiki: this.widget.wiki,\n\t\t\tforce: true\n\t\t});\n\t}\n\treturn true;\n};\n\n/*\nCreate a blank structure representing a text operation\n*/\nSimpleEngine.prototype.createTextOperation = function() {\n\treturn null;\n};\n\n/*\nExecute a text operation\n*/\nSimpleEngine.prototype.executeTextOperation = function(operation) {\n};\n\nexports.SimpleEngine = SimpleEngine;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/editor/factory.js": {
"title": "$:/core/modules/editor/factory.js",
"text": "/*\\\ntitle: $:/core/modules/editor/factory.js\ntype: application/javascript\nmodule-type: library\n\nFactory for constructing text editor widgets with specified engines for the toolbar and non-toolbar cases\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DEFAULT_MIN_TEXT_AREA_HEIGHT = \"100px\"; // Minimum height of textareas in pixels\n\n// Configuration tiddlers\nvar HEIGHT_MODE_TITLE = \"$:/config/TextEditor/EditorHeight/Mode\";\nvar ENABLE_TOOLBAR_TITLE = \"$:/config/TextEditor/EnableToolbar\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nfunction editTextWidgetFactory(toolbarEngine,nonToolbarEngine) {\n\n\tvar EditTextWidget = function(parseTreeNode,options) {\n\t\t// Initialise the editor operations if they've not been done already\n\t\tif(!this.editorOperations) {\n\t\t\tEditTextWidget.prototype.editorOperations = {};\n\t\t\t$tw.modules.applyMethods(\"texteditoroperation\",this.editorOperations);\n\t\t}\n\t\tthis.initialise(parseTreeNode,options);\n\t};\n\n\t/*\n\tInherit from the base widget class\n\t*/\n\tEditTextWidget.prototype = new Widget();\n\n\t/*\n\tRender this widget into the DOM\n\t*/\n\tEditTextWidget.prototype.render = function(parent,nextSibling) {\n\t\t// Save the parent dom node\n\t\tthis.parentDomNode = parent;\n\t\t// Compute our attributes\n\t\tthis.computeAttributes();\n\t\t// Execute our logic\n\t\tthis.execute();\n\t\t// Create the wrapper for the toolbar and render its content\n\t\tif(this.editShowToolbar) {\n\t\t\tthis.toolbarNode = this.document.createElement(\"div\");\n\t\t\tthis.toolbarNode.className = \"tc-editor-toolbar\";\n\t\t\tparent.insertBefore(this.toolbarNode,nextSibling);\n\t\t\tthis.renderChildren(this.toolbarNode,null);\n\t\t\tthis.domNodes.push(this.toolbarNode);\n\t\t}\n\t\t// Create our element\n\t\tvar editInfo = this.getEditInfo(),\n\t\t\tEngine = this.editShowToolbar ? toolbarEngine : nonToolbarEngine;\n\t\tthis.engine = new Engine({\n\t\t\t\twidget: this,\n\t\t\t\tvalue: editInfo.value,\n\t\t\t\ttype: editInfo.type,\n\t\t\t\tparentNode: parent,\n\t\t\t\tnextSibling: nextSibling\n\t\t\t});\n\t\t// Call the postRender hook\n\t\tif(this.postRender) {\n\t\t\tthis.postRender();\n\t\t}\n\t\t// Fix height\n\t\tthis.engine.fixHeight();\n\t\t// Focus if required\n\t\tif(this.editFocus === \"true\" || this.editFocus === \"yes\") {\n\t\t\tthis.engine.focus();\n\t\t}\n\t\t// Add widget message listeners\n\t\tthis.addEventListeners([\n\t\t\t{type: \"tm-edit-text-operation\", handler: \"handleEditTextOperationMessage\"}\n\t\t]);\n\t};\n\n\t/*\n\tGet the tiddler being edited and current value\n\t*/\n\tEditTextWidget.prototype.getEditInfo = function() {\n\t\t// Get the edit value\n\t\tvar self = this,\n\t\t\tvalue,\n\t\t\ttype = \"text/plain\",\n\t\t\tupdate;\n\t\tif(this.editIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(this.editTitle,this.editIndex,this.editDefault);\n\t\t\tupdate = function(value) {\n\t\t\t\tvar data = self.wiki.getTiddlerData(self.editTitle,{});\n\t\t\t\tif(data[self.editIndex] !== value) {\n\t\t\t\t\tdata[self.editIndex] = value;\n\t\t\t\t\tself.wiki.setTiddlerData(self.editTitle,data);\n\t\t\t\t}\n\t\t\t};\n\t\t} else {\n\t\t\t// Get the current tiddler and the field name\n\t\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\t\tif(tiddler) {\n\t\t\t\t// If we've got a tiddler, the value to display is the field string value\n\t\t\t\tvalue = tiddler.getFieldString(this.editField);\n\t\t\t\tif(this.editField === \"text\") {\n\t\t\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\";\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise, we need to construct a default value for the editor\n\t\t\t\tswitch(this.editField) {\n\t\t\t\t\tcase \"text\":\n\t\t\t\t\t\tvalue = \"Type the text for the tiddler '\" + this.editTitle + \"'\";\n\t\t\t\t\t\ttype = \"text/vnd.tiddlywiki\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"title\":\n\t\t\t\t\t\tvalue = this.editTitle;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(this.editDefault !== undefined) {\n\t\t\t\t\tvalue = this.editDefault;\n\t\t\t\t}\n\t\t\t}\n\t\t\tupdate = function(value) {\n\t\t\t\tvar tiddler = self.wiki.getTiddler(self.editTitle),\n\t\t\t\t\tupdateFields = {\n\t\t\t\t\t\ttitle: self.editTitle\n\t\t\t\t\t};\n\t\t\t\tupdateFields[self.editField] = value;\n\t\t\t\tself.wiki.addTiddler(new $tw.Tiddler(self.wiki.getCreationFields(),tiddler,updateFields,self.wiki.getModificationFields()));\n\t\t\t};\n\t\t}\n\t\tif(this.editType) {\n\t\t\ttype = this.editType;\n\t\t}\n\t\treturn {value: value || \"\", type: type, update: update};\n\t};\n\n\t/*\n\tHandle an edit text operation message from the toolbar\n\t*/\n\tEditTextWidget.prototype.handleEditTextOperationMessage = function(event) {\n\t\t// Prepare information about the operation\n\t\tvar operation = this.engine.createTextOperation();\n\t\t// Invoke the handler for the selected operation\n\t\tvar handler = this.editorOperations[event.param];\n\t\tif(handler) {\n\t\t\thandler.call(this,event,operation);\n\t\t}\n\t\t// Execute the operation via the engine\n\t\tvar newText = this.engine.executeTextOperation(operation);\n\t\t// Fix the tiddler height and save changes\n\t\tthis.engine.fixHeight();\n\t\tthis.saveChanges(newText);\n\t};\n\n\t/*\n\tCompute the internal state of the widget\n\t*/\n\tEditTextWidget.prototype.execute = function() {\n\t\t// Get our parameters\n\t\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t\tthis.editField = this.getAttribute(\"field\",\"text\");\n\t\tthis.editIndex = this.getAttribute(\"index\");\n\t\tthis.editDefault = this.getAttribute(\"default\");\n\t\tthis.editClass = this.getAttribute(\"class\");\n\t\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\t\tthis.editSize = this.getAttribute(\"size\");\n\t\tthis.editRows = this.getAttribute(\"rows\");\n\t\tthis.editAutoHeight = this.wiki.getTiddlerText(HEIGHT_MODE_TITLE,\"auto\");\n\t\tthis.editAutoHeight = this.getAttribute(\"autoHeight\",this.editAutoHeight === \"auto\" ? \"yes\" : \"no\") === \"yes\";\n\t\tthis.editMinHeight = this.getAttribute(\"minHeight\",DEFAULT_MIN_TEXT_AREA_HEIGHT);\n\t\tthis.editFocusPopup = this.getAttribute(\"focusPopup\");\n\t\tthis.editFocus = this.getAttribute(\"focus\");\n\t\tthis.editTabIndex = this.getAttribute(\"tabindex\");\n\t\tthis.editCancelPopups = this.getAttribute(\"cancelPopups\",\"\") === \"yes\";\n\t\tthis.editInputActions = this.getAttribute(\"inputActions\");\n\t\tthis.editRefreshTitle = this.getAttribute(\"refreshTitle\");\n\t\tthis.editAutoComplete = this.getAttribute(\"autocomplete\");\n\t\tthis.isDisabled = this.getAttribute(\"disabled\",\"no\");\n\t\t// Get the default editor element tag and type\n\t\tvar tag,type;\n\t\tif(this.editField === \"text\") {\n\t\t\ttag = \"textarea\";\n\t\t} else {\n\t\t\ttag = \"input\";\n\t\t\tvar fieldModule = $tw.Tiddler.fieldModules[this.editField];\n\t\t\tif(fieldModule && fieldModule.editTag) {\n\t\t\t\ttag = fieldModule.editTag;\n\t\t\t}\n\t\t\tif(fieldModule && fieldModule.editType) {\n\t\t\t\ttype = fieldModule.editType;\n\t\t\t}\n\t\t\ttype = type || \"text\";\n\t\t}\n\t\t// Get the rest of our parameters\n\t\tthis.editTag = this.getAttribute(\"tag\",tag) || \"input\";\n\t\tthis.editType = this.getAttribute(\"type\",type);\n\t\t// Make the child widgets\n\t\tthis.makeChildWidgets();\n\t\t// Determine whether to show the toolbar\n\t\tthis.editShowToolbar = this.wiki.getTiddlerText(ENABLE_TOOLBAR_TITLE,\"yes\");\n\t\tthis.editShowToolbar = (this.editShowToolbar === \"yes\") && !!(this.children && this.children.length > 0) && (!this.document.isTiddlyWikiFakeDom);\n\t};\n\n\t/*\n\tSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n\t*/\n\tEditTextWidget.prototype.refresh = function(changedTiddlers) {\n\t\tvar changedAttributes = this.computeAttributes();\n\t\t// Completely rerender if any of our attributes have changed\n\t\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.placeholder || changedAttributes.size || changedAttributes.autoHeight || changedAttributes.minHeight || changedAttributes.focusPopup || changedAttributes.rows || changedAttributes.tabindex || changedAttributes.cancelPopups || changedAttributes.inputActions || changedAttributes.refreshTitle || changedAttributes.autocomplete || changedTiddlers[HEIGHT_MODE_TITLE] || changedTiddlers[ENABLE_TOOLBAR_TITLE] || changedAttributes.disabled) {\n\t\t\tthis.refreshSelf();\n\t\t\treturn true;\n\t\t} else if (changedTiddlers[this.editRefreshTitle]) {\n\t\t\tthis.engine.updateDomNodeText(this.getEditInfo().value);\n\t\t} else if(changedTiddlers[this.editTitle]) {\n\t\t\tvar editInfo = this.getEditInfo();\n\t\t\tthis.updateEditor(editInfo.value,editInfo.type);\n\t\t}\n\t\tthis.engine.fixHeight();\n\t\tif(this.editShowToolbar) {\n\t\t\treturn this.refreshChildren(changedTiddlers);\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\t/*\n\tUpdate the editor with new text. This method is separate from updateEditorDomNode()\n\tso that subclasses can override updateEditor() and still use updateEditorDomNode()\n\t*/\n\tEditTextWidget.prototype.updateEditor = function(text,type) {\n\t\tthis.updateEditorDomNode(text,type);\n\t};\n\n\t/*\n\tUpdate the editor dom node with new text\n\t*/\n\tEditTextWidget.prototype.updateEditorDomNode = function(text,type) {\n\t\tthis.engine.setText(text,type);\n\t};\n\n\t/*\n\tSave changes back to the tiddler store\n\t*/\n\tEditTextWidget.prototype.saveChanges = function(text) {\n\t\tvar editInfo = this.getEditInfo();\n\t\tif(text !== editInfo.value) {\n\t\t\teditInfo.update(text);\n\t\t}\n\t};\n\n\t/*\n\tHandle a dom \"keydown\" event, which we'll bubble up to our container for the keyboard widgets benefit\n\t*/\n\tEditTextWidget.prototype.handleKeydownEvent = function(event) {\n\t\t// Check for a keyboard shortcut\n\t\tif(this.toolbarNode) {\n\t\t\tvar shortcutElements = this.toolbarNode.querySelectorAll(\"[data-tw-keyboard-shortcut]\");\n\t\t\tfor(var index=0; index<shortcutElements.length; index++) {\n\t\t\t\tvar el = shortcutElements[index],\n\t\t\t\t\tshortcutData = el.getAttribute(\"data-tw-keyboard-shortcut\"),\n\t\t\t\t\tkeyInfoArray = $tw.keyboardManager.parseKeyDescriptors(shortcutData,{\n\t\t\t\t\t\twiki: this.wiki\n\t\t\t\t\t});\n\t\t\t\tif($tw.keyboardManager.checkKeyDescriptors(event,keyInfoArray)) {\n\t\t\t\t\tvar clickEvent = this.document.createEvent(\"Events\");\n\t\t\t\t clickEvent.initEvent(\"click\",true,false);\n\t\t\t\t el.dispatchEvent(clickEvent);\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Propogate the event to the container\n\t\tif(this.propogateKeydownEvent(event)) {\n\t\t\t// Ignore the keydown if it was already handled\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn true;\n\t\t}\n\t\t// Otherwise, process the keydown normally\n\t\treturn false;\n\t};\n\n\t/*\n\tPropogate keydown events to our container for the keyboard widgets benefit\n\t*/\n\tEditTextWidget.prototype.propogateKeydownEvent = function(event) {\n\t\tvar newEvent = this.document.createEventObject ? this.document.createEventObject() : this.document.createEvent(\"Events\");\n\t\tif(newEvent.initEvent) {\n\t\t\tnewEvent.initEvent(\"keydown\", true, true);\n\t\t}\n\t\tnewEvent.keyCode = event.keyCode;\n\t\tnewEvent.which = event.which;\n\t\tnewEvent.metaKey = event.metaKey;\n\t\tnewEvent.ctrlKey = event.ctrlKey;\n\t\tnewEvent.altKey = event.altKey;\n\t\tnewEvent.shiftKey = event.shiftKey;\n\t\treturn !this.parentDomNode.dispatchEvent(newEvent);\n\t};\n\n\treturn EditTextWidget;\n\n}\n\nexports.editTextWidgetFactory = editTextWidgetFactory;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/editor/operations/bitmap/clear.js": {
"title": "$:/core/modules/editor/operations/bitmap/clear.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/clear.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to clear the image\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"clear\"] = function(event) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.globalAlpha = 1;\n\tctx.fillStyle = event.paramObject.colour || \"white\";\n\tctx.fillRect(0,0,this.canvasDomNode.width,this.canvasDomNode.height);\n\t// Save changes\n\tthis.strokeEnd();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "bitmapeditoroperation"
},
"$:/core/modules/editor/operations/bitmap/resize.js": {
"title": "$:/core/modules/editor/operations/bitmap/resize.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/resize.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to resize the image\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"resize\"] = function(event) {\n\t// Get the new width\n\tvar newWidth = parseInt(event.paramObject.width || this.canvasDomNode.width,10),\n\t\tnewHeight = parseInt(event.paramObject.height || this.canvasDomNode.height,10);\n\t// Update if necessary\n\tif(newWidth > 0 && newHeight > 0 && !(newWidth === this.currCanvas.width && newHeight === this.currCanvas.height)) {\n\t\tthis.changeCanvasSize(newWidth,newHeight);\n\t}\n\t// Update the input controls\n\tthis.refreshToolbar();\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "bitmapeditoroperation"
},
"$:/core/modules/editor/operations/bitmap/rotate-left.js": {
"title": "$:/core/modules/editor/operations/bitmap/rotate-left.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/rotate-left.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to rotate the image left by 90 degrees\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"rotate-left\"] = function(event) {\n\t// Rotate the canvas left by 90 degrees\n\tthis.rotateCanvasLeft();\n\t// Update the input controls\n\tthis.refreshToolbar();\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "bitmapeditoroperation"
},
"$:/core/modules/editor/operations/text/excise.js": {
"title": "$:/core/modules/editor/operations/text/excise.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/excise.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to excise the selection to a new tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"excise\"] = function(event,operation) {\n\tvar editTiddler = this.wiki.getTiddler(this.editTitle),\n\t\teditTiddlerTitle = this.editTitle;\n\tif(editTiddler && editTiddler.fields[\"draft.of\"]) {\n\t\teditTiddlerTitle = editTiddler.fields[\"draft.of\"];\n\t}\n\tvar excisionTitle = event.paramObject.title || this.wiki.generateNewTitle(\"New Excision\");\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\tthis.wiki.getModificationFields(),\n\t\t{\n\t\t\ttitle: excisionTitle,\n\t\t\ttext: operation.selection,\n\t\t\ttags: event.paramObject.tagnew === \"yes\" ? [editTiddlerTitle] : []\n\t\t}\n\t));\n\toperation.replacement = excisionTitle;\n\tswitch(event.paramObject.type || \"transclude\") {\n\t\tcase \"transclude\":\n\t\t\toperation.replacement = \"{{\" + operation.replacement+ \"}}\";\n\t\t\tbreak;\n\t\tcase \"link\":\n\t\t\toperation.replacement = \"[[\" + operation.replacement+ \"]]\";\n\t\t\tbreak;\n\t\tcase \"macro\":\n\t\t\toperation.replacement = \"<<\" + (event.paramObject.macro || \"translink\") + \" \\\"\\\"\\\"\" + operation.replacement + \"\\\"\\\"\\\">>\";\n\t\t\tbreak;\n\t}\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart;\n\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/make-link.js": {
"title": "$:/core/modules/editor/operations/text/make-link.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/make-link.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to make a link\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"make-link\"] = function(event,operation) {\n\tif(operation.selection) {\n\t\toperation.replacement = \"[[\" + operation.selection + \"|\" + event.paramObject.text + \"]]\";\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t} else {\n\t\toperation.replacement = \"[[\" + event.paramObject.text + \"]]\";\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t}\n\toperation.newSelStart = operation.selStart + operation.replacement.length;\n\toperation.newSelEnd = operation.newSelStart;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/prefix-lines.js": {
"title": "$:/core/modules/editor/operations/text/prefix-lines.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/prefix-lines.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to add a prefix to the selected lines\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"prefix-lines\"] = function(event,operation) {\n\tvar targetCount = parseInt(event.paramObject.count + \"\",10);\n\t// Cut just past the preceding line break, or the start of the text\n\toperation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\n\t// Cut to just past the following line break, or to the end of the text\n\toperation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\n\t// Compose the required prefix\n\tvar prefix = $tw.utils.repeat(event.paramObject.character,targetCount);\n\t// Process each line\n\tvar lines = operation.text.substring(operation.cutStart,operation.cutEnd).split(/\\r?\\n/mg);\n\t$tw.utils.each(lines,function(line,index) {\n\t\t// Remove and count any existing prefix characters\n\t\tvar count = 0;\n\t\twhile(line.charAt(0) === event.paramObject.character) {\n\t\t\tline = line.substring(1);\n\t\t\tcount++;\n\t\t}\n\t\t// Remove any whitespace\n\t\twhile(line.charAt(0) === \" \") {\n\t\t\tline = line.substring(1);\n\t\t}\n\t\t// We're done if we removed the exact required prefix, otherwise add it\n\t\tif(count !== targetCount) {\n\t\t\t// Apply the prefix\n\t\t\tline = prefix + \" \" + line;\n\t\t}\n\t\t// Save the modified line\n\t\tlines[index] = line;\n\t});\n\t// Stitch the replacement text together and set the selection\n\toperation.replacement = lines.join(\"\\n\");\n\tif(lines.length === 1) {\n\t\toperation.newSelStart = operation.cutStart + operation.replacement.length;\n\t\toperation.newSelEnd = operation.newSelStart;\n\t} else {\n\t\toperation.newSelStart = operation.cutStart;\n\t\toperation.newSelEnd = operation.newSelStart + operation.replacement.length;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/replace-all.js": {
"title": "$:/core/modules/editor/operations/text/replace-all.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/replace-all.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the entire text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"replace-all\"] = function(event,operation) {\n\toperation.cutStart = 0;\n\toperation.cutEnd = operation.text.length;\n\toperation.replacement = event.paramObject.text;\n\toperation.newSelStart = 0;\n\toperation.newSelEnd = operation.replacement.length;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/replace-selection.js": {
"title": "$:/core/modules/editor/operations/text/replace-selection.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/replace-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the selection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"replace-selection\"] = function(event,operation) {\n\toperation.replacement = event.paramObject.text;\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart;\n\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/save-selection.js": {
"title": "$:/core/modules/editor/operations/text/save-selection.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/save-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to save the current selection in a specified tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"save-selection\"] = function(event,operation) {\n\tvar tiddler = event.paramObject.tiddler,\n\t\tfield = event.paramObject.field || \"text\";\n\tif(tiddler && field) {\n\t\tthis.wiki.setText(tiddler,field,null,operation.text.substring(operation.selStart,operation.selEnd));\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/wrap-lines.js": {
"title": "$:/core/modules/editor/operations/text/wrap-lines.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/wrap-lines.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to wrap the selected lines with a prefix and suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"wrap-lines\"] = function(event,operation) {\n\t// Cut just past the preceding line break, or the start of the text\n\toperation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\n\t// Cut to just past the following line break, or to the end of the text\n\toperation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\n\t// Add the prefix and suffix\n\toperation.replacement = event.paramObject.prefix + \"\\n\" +\n\t\t\t\toperation.text.substring(operation.cutStart,operation.cutEnd) + \"\\n\" +\n\t\t\t\tevent.paramObject.suffix + \"\\n\";\n\toperation.newSelStart = operation.cutStart + event.paramObject.prefix.length + 1;\n\toperation.newSelEnd = operation.newSelStart + (operation.cutEnd - operation.cutStart);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/wrap-selection.js": {
"title": "$:/core/modules/editor/operations/text/wrap-selection.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/wrap-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to wrap the selection with the specified prefix and suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"wrap-selection\"] = function(event,operation) {\n\tif(operation.selStart === operation.selEnd) {\n\t\t// No selection; check if we're within the prefix/suffix\n\t\tif(operation.text.substring(operation.selStart - event.paramObject.prefix.length,operation.selStart + event.paramObject.suffix.length) === event.paramObject.prefix + event.paramObject.suffix) {\n\t\t\t// Remove the prefix and suffix\n\t\t\toperation.cutStart = operation.selStart - event.paramObject.prefix.length;\n\t\t\toperation.cutEnd = operation.selEnd + event.paramObject.suffix.length;\n\t\t\toperation.replacement = \"\";\n\t\t\toperation.newSelStart = operation.cutStart;\n\t\t\toperation.newSelEnd = operation.newSelStart;\n\t\t} else {\n\t\t\t// Wrap the cursor instead\n\t\t\toperation.cutStart = operation.selStart;\n\t\t\toperation.cutEnd = operation.selEnd;\n\t\t\toperation.replacement = event.paramObject.prefix + event.paramObject.suffix;\n\t\t\toperation.newSelStart = operation.selStart + event.paramObject.prefix.length;\n\t\t\toperation.newSelEnd = operation.newSelStart;\n\t\t}\n\t} else if(operation.text.substring(operation.selStart,operation.selStart + event.paramObject.prefix.length) === event.paramObject.prefix && operation.text.substring(operation.selEnd - event.paramObject.suffix.length,operation.selEnd) === event.paramObject.suffix) {\n\t\t// Prefix and suffix are already present, so remove them\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t\toperation.replacement = operation.selection.substring(event.paramObject.prefix.length,operation.selection.length - event.paramObject.suffix.length);\n\t\toperation.newSelStart = operation.selStart;\n\t\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n\t} else {\n\t\t// Add the prefix and suffix\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t\toperation.replacement = event.paramObject.prefix + operation.selection + event.paramObject.suffix;\n\t\toperation.newSelStart = operation.selStart;\n\t\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/filterrunprefixes/all.js": {
"title": "$:/core/modules/filterrunprefixes/all.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/all.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\nUnion of sets without de-duplication.\nEquivalent to = filter run prefix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.all = function(operationSubFunction) {\n\treturn function(results,source,widget) {\n\t\tresults.push.apply(results, operationSubFunction(source,widget));\n\t};\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filterrunprefixes/and.js": {
"title": "$:/core/modules/filterrunprefixes/and.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/and.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\nIntersection of sets.\nEquivalent to + filter run prefix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.and = function(operationSubFunction,options) {\n\treturn function(results,source,widget) {\n\t\t// This replaces all the elements of the array, but keeps the actual array so that references to it are preserved\n\t\tsource = options.wiki.makeTiddlerIterator(results.toArray());\n\t\tresults.clear();\n\t\tresults.pushTop(operationSubFunction(source,widget));\n\t};\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filterrunprefixes/else.js": {
"title": "$:/core/modules/filterrunprefixes/else.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/else.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\nEquivalent to ~ filter run prefix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.else = function(operationSubFunction) {\n\treturn function(results,source,widget) {\n\t\tif(results.length === 0) {\n\t\t\t// Main result so far is empty\n\t\t\tresults.pushTop(operationSubFunction(source,widget));\n\t\t}\n\t};\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filterrunprefixes/except.js": {
"title": "$:/core/modules/filterrunprefixes/except.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/except.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\nDifference of sets.\nEquivalent to - filter run prefix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.except = function(operationSubFunction) {\n\treturn function(results,source,widget) {\n\t\tresults.remove(operationSubFunction(source,widget));\n\t};\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filterrunprefixes/filter.js": {
"title": "$:/core/modules/filterrunprefixes/filter.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/filter.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.filter = function(operationSubFunction,options) {\n\treturn function(results,source,widget) {\n\t\tif(results.length > 0) {\n\t\t\tvar resultsToRemove = [];\n\t\t\tresults.each(function(result) {\n\t\t\t\tvar filtered = operationSubFunction(options.wiki.makeTiddlerIterator([result]),widget);\n\t\t\t\tif(filtered.length === 0) {\n\t\t\t\t\tresultsToRemove.push(result);\n\t\t\t\t}\n\t\t\t});\n\t\t\tresults.remove(resultsToRemove);\n\t\t}\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filterrunprefixes/intersection.js": {
"title": "$:/core/modules/filterrunprefixes/intersection.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/intersection.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.intersection = function(operationSubFunction) {\n\treturn function(results,source,widget) {\n\t\tif(results.length !== 0) {\n\t\t\tvar secondRunResults = operationSubFunction(source,widget);\n\t\t\tvar firstRunResults = results.toArray();\n\t\t\tresults.clear();\n\t\t\t$tw.utils.each(firstRunResults,function(title) {\n\t\t\t\tif(secondRunResults.indexOf(title) !== -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filterrunprefixes/or.js": {
"title": "$:/core/modules/filterrunprefixes/or.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/or.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\nEquivalent to a filter run with no prefix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.or = function(operationSubFunction) {\n\treturn function(results,source,widget) {\n\t\tresults.pushTop(operationSubFunction(source,widget));\n\t};\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filterrunprefixes/reduce.js": {
"title": "$:/core/modules/filterrunprefixes/reduce.js",
"text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/reduce.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.reduce = function(operationSubFunction,options) {\n\treturn function(results,source,widget) {\n\t\tif(results.length > 0) {\n\t\t\tvar accumulator = \"\";\n\t\t\tvar index = 0;\n\t\t\tresults.each(function(title) {\n\t\t\t\tvar list = operationSubFunction(options.wiki.makeTiddlerIterator([title]),{\n\t\t\t\t\t\tgetVariable: function(name) {\n\t\t\t\t\t\t\tswitch(name) {\n\t\t\t\t\t\t\t\tcase \"currentTiddler\":\n\t\t\t\t\t\t\t\t\treturn \"\" + title;\n\t\t\t\t\t\t\t\tcase \"accumulator\":\n\t\t\t\t\t\t\t\t\treturn \"\" + accumulator;\n\t\t\t\t\t\t\t\tcase \"index\":\n\t\t\t\t\t\t\t\t\treturn \"\" + index;\n\t\t\t\t\t\t\t\tcase \"revIndex\":\n\t\t\t\t\t\t\t\t\treturn \"\" + (results.length - 1 - index);\n\t\t\t\t\t\t\t\tcase \"length\":\n\t\t\t\t\t\t\t\t\treturn \"\" + results.length;\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn widget.getVariable(name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\tif(list.length > 0) {\n\t\t\t\t\taccumulator = \"\" + list[0];\n\t\t\t\t}\n\t\t\t\t++index;\n\t\t\t});\n\t\t\tresults.clear();\n\t\t\tresults.push(accumulator);\t\n\t\t}\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filterrunprefix"
},
"$:/core/modules/filters/addprefix.js": {
"title": "$:/core/modules/filters/addprefix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/addprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a prefix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(operator.operand + title);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/addsuffix.js": {
"title": "$:/core/modules/filters/addsuffix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/addsuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a suffix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addsuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title + operator.operand);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/after.js": {
"title": "$:/core/modules/filters/after.js",
"text": "/*\\\ntitle: $:/core/modules/filters/after.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is after the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.after = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index === -1 || index > (results.length - 2)) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index + 1]];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/all/current.js": {
"title": "$:/core/modules/filters/all/current.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/current.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar currTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(currTiddlerTitle) {\n\t\treturn [currTiddlerTitle];\n\t} else {\n\t\treturn [];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/missing.js": {
"title": "$:/core/modules/filters/all/missing.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/missing.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\treturn options.wiki.getMissingTitles();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/orphans.js": {
"title": "$:/core/modules/filters/all/orphans.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/orphans.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[orphans]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphans = function(source,prefix,options) {\n\treturn options.wiki.getOrphanTitles();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/shadows.js": {
"title": "$:/core/modules/filters/all/shadows.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/shadows.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[shadows]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadows = function(source,prefix,options) {\n\treturn options.wiki.allShadowTitles();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/tags.js": {
"title": "$:/core/modules/filters/all/tags.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/tags.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[tags]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,prefix,options) {\n\treturn Object.keys(options.wiki.getTagMap());\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/tiddlers.js": {
"title": "$:/core/modules/filters/all/tiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/tiddlers.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddlers = function(source,prefix,options) {\n\treturn options.wiki.allTitles();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all.js": {
"title": "$:/core/modules/filters/all.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for selecting tiddlers\n\n[all[shadows+tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar allFilterOperators;\n\nfunction getAllFilterOperators() {\n\tif(!allFilterOperators) {\n\t\tallFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"allfilteroperator\",allFilterOperators);\n\t}\n\treturn allFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.all = function(source,operator,options) {\n\t// Get our suboperators\n\tvar allFilterOperators = getAllFilterOperators();\n\t// Cycle through the suboperators accumulating their results\n\tvar results = [],\n\t\tsubops = operator.operand.split(\"+\");\n\t// Check for common optimisations\n\tif(subops.length === 1 && subops[0] === \"\") {\n\t\treturn source;\n\t} else if(subops.length === 1 && subops[0] === \"tiddlers\") {\n\t\treturn options.wiki.each;\n\t} else if(subops.length === 1 && subops[0] === \"shadows\") {\n\t\treturn options.wiki.eachShadow;\n\t} else if(subops.length === 2 && subops[0] === \"tiddlers\" && subops[1] === \"shadows\") {\n\t\treturn options.wiki.eachTiddlerPlusShadows;\n\t} else if(subops.length === 2 && subops[0] === \"shadows\" && subops[1] === \"tiddlers\") {\n\t\treturn options.wiki.eachShadowPlusTiddlers;\n\t}\n\t// Do it the hard way\n\tfor(var t=0; t<subops.length; t++) {\n\t\tvar subop = allFilterOperators[subops[t]];\n\t\tif(subop) {\n\t\t\t$tw.utils.pushTop(results,subop(source,operator.prefix,options));\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/backlinks.js": {
"title": "$:/core/modules/filters/backlinks.js",
"text": "/*\\\ntitle: $:/core/modules/filters/backlinks.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the backlinks from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.backlinks = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerBacklinks(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/before.js": {
"title": "$:/core/modules/filters/before.js",
"text": "/*\\\ntitle: $:/core/modules/filters/before.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is before the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.before = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index <= 0) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index - 1]];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/commands.js": {
"title": "$:/core/modules/filters/commands.js",
"text": "/*\\\ntitle: $:/core/modules/filters/commands.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the commands available in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.commands = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.commands,function(commandInfo,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/compare.js": {
"title": "$:/core/modules/filters/compare.js",
"text": "/*\\\ntitle: $:/core/modules/filters/compare.js\ntype: application/javascript\nmodule-type: filteroperator\n\nGeneral purpose comparison operator\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.compare = function(source,operator,options) {\n\tvar suffixes = operator.suffixes || [],\n\t\ttype = (suffixes[0] || [])[0],\n\t\tmode = (suffixes[1] || [])[0],\n\t\ttypeFn = $tw.utils.makeCompareFunction(type,{defaultType: \"number\"}),\n\t\tmodeFn = modes[mode] || modes.eq,\n\t\tinvert = operator.prefix === \"!\",\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tif(modeFn(typeFn(title,operator.operand)) !== invert) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\nvar modes = {\n\t\"eq\": function(value) {return value === 0;},\n\t\"ne\": function(value) {return value !== 0;},\n\t\"gteq\": function(value) {return value >= 0;},\n\t\"gt\": function(value) {return value > 0;},\n\t\"lteq\": function(value) {return value <= 0;},\n\t\"lt\": function(value) {return value < 0;}\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/contains.js": {
"title": "$:/core/modules/filters/contains.js",
"text": "/*\\\ntitle: $:/core/modules/filters/contains.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for finding values in array fields\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.contains = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || \"list\").toLowerCase();\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\tvar list = tiddler.getFieldList(fieldname);\n\t\t\t\tif(list.indexOf(operator.operand) === -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\tvar list = tiddler.getFieldList(fieldname);\n\t\t\t\tif(list.indexOf(operator.operand) !== -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/count.js": {
"title": "$:/core/modules/filters/count.js",
"text": "/*\\\ntitle: $:/core/modules/filters/count.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the number of entries in the current list.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.count = function(source,operator,options) {\n\tvar count = 0;\n\tsource(function(tiddler,title) {\n\t\tcount++;\n\t});\n\treturn [count + \"\"];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/days.js": {
"title": "$:/core/modules/filters/days.js",
"text": "/*\\\ntitle: $:/core/modules/filters/days.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a specified date field within a specified date interval.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.days = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\tdayInterval = (parseInt(operator.operand,10)||0),\n\t\tdayIntervalSign = $tw.utils.sign(dayInterval),\n\t\ttargetTimeStamp = (new Date()).setHours(0,0,0,0) + 1000*60*60*24*dayInterval,\n\t\tisWithinDays = function(dateField) {\n\t\t\tvar sign = $tw.utils.sign(targetTimeStamp - (new Date(dateField)).setHours(0,0,0,0));\n\t\t\treturn sign === 0 || sign === dayIntervalSign;\n\t\t};\n\n\tif(operator.prefix === \"!\") {\n\t\ttargetTimeStamp = targetTimeStamp - 1000*60*60*24*dayIntervalSign;\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(!isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/duplicateslugs.js": {
"title": "$:/core/modules/filters/duplicateslugs.js",
"text": "/*\\\ntitle: $:/core/modules/filters/duplicateslugs.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter function for [duplicateslugs[]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.duplicateslugs = function(source,operator,options) {\n\tvar slugs = Object.create(null), // Hashmap by slug of title, replaced with \"true\" if the duplicate title has already been output\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tvar slug = options.wiki.slugify(title);\n\t\tif(slug in slugs) {\n\t\t\tif(slugs[slug] !== true) {\n\t\t\t\tresults.push(slugs[slug]);\n\t\t\t\tslugs[slug] = true;\n\t\t\t}\n\t\t\tresults.push(title);\n\t\t} else {\n\t\t\tslugs[slug] = title;\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/each.js": {
"title": "$:/core/modules/filters/each.js",
"text": "/*\\\ntitle: $:/core/modules/filters/each.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique value of the specified field.\nWith suffix \"list\", selects all tiddlers that are values in a specified list field.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.each = function(source,operator,options) {\n\tvar results =[] ,\n\tvalue,values = {},\n\tfield = operator.operand || \"title\";\n\tif(operator.suffix === \"value\" && field === \"title\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!$tw.utils.hop(values,title)) {\n\t\t\t\tvalues[title] = true;\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else if(operator.suffix !== \"list-item\") {\n\t\tif(field === \"title\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && !$tw.utils.hop(values,title)) {\n\t\t\t\t\tvalues[title] = true;\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvalue = tiddler.getFieldString(field);\n\t\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\t$tw.utils.each(\n\t\t\t\t\toptions.wiki.getTiddlerList(title,field),\n\t\t\t\t\tfunction(value) {\n\t\t\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\t\t\tresults.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/eachday.js": {
"title": "$:/core/modules/filters/eachday.js",
"text": "/*\\\ntitle: $:/core/modules/filters/eachday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique day covered by the specified date field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.eachday = function(source,operator,options) {\n\tvar results = [],\n\t\tvalues = [],\n\t\tfieldName = operator.operand || \"modified\";\n\t// Function to convert a date/time to a date integer\n\tvar toDate = function(value) {\n\t\tvalue = (new Date(value)).setHours(0,0,0,0);\n\t\treturn value+0;\n\t};\n\tsource(function(tiddler,title) {\n\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\tvar value = toDate($tw.utils.parseDate(tiddler.fields[fieldName]));\n\t\t\tif(values.indexOf(value) === -1) {\n\t\t\t\tvalues.push(value);\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/editiondescription.js": {
"title": "$:/core/modules/filters/editiondescription.js",
"text": "/*\\\ntitle: $:/core/modules/filters/editiondescription.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the descriptions of the specified edition names\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.editiondescription = function(source,operator,options) {\n\tvar results = [];\n\tif($tw.node) {\n\t\tvar editionInfo = $tw.utils.getEditionInfo();\n\t\tif(editionInfo) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif($tw.utils.hop(editionInfo,title)) {\n\t\t\t\t\tresults.push(editionInfo[title].description || \"\");\t\t\t\t\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/editions.js": {
"title": "$:/core/modules/filters/editions.js",
"text": "/*\\\ntitle: $:/core/modules/filters/editions.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the available editions in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.editions = function(source,operator,options) {\n\tvar results = [];\n\tif($tw.node) {\n\t\tvar editionInfo = $tw.utils.getEditionInfo();\n\t\tif(editionInfo) {\n\t\t\t$tw.utils.each(editionInfo,function(info,name) {\n\t\t\t\tresults.push(name);\n\t\t\t});\n\t\t}\n\t\tresults.sort();\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/else.js": {
"title": "$:/core/modules/filters/else.js",
"text": "/*\\\ntitle: $:/core/modules/filters/else.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing an empty input list with a constant, passing a non-empty input list straight through\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.else = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tif(results.length === 0) {\n\t\treturn [operator.operand];\n\t} else {\n\t\treturn results;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/decodeuricomponent.js": {
"title": "$:/core/modules/filters/decodeuricomponent.js",
"text": "/*\\\ntitle: $:/core/modules/filters/decodeuricomponent.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for applying decodeURIComponent() to each item.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter functions\n*/\n\nexports.decodeuricomponent = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar value = title;\n\t\ttry {\n\t\t\tvalue = decodeURIComponent(title);\n\t\t} catch(e) {\n\t\t}\n\t\tresults.push(value);\n\t});\n\treturn results;\n};\n\nexports.encodeuricomponent = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(encodeURIComponent(title));\n\t});\n\treturn results;\n};\n\nexports.decodeuri = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar value = title;\n\t\ttry {\n\t\t\tvalue = decodeURI(title);\n\t\t} catch(e) {\n\t\t}\n\t\tresults.push(value);\n\t});\n\treturn results;\n};\n\nexports.encodeuri = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(encodeURI(title));\n\t});\n\treturn results;\n};\n\nexports.decodehtml = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.htmlDecode(title));\n\t});\n\treturn results;\n};\n\nexports.encodehtml = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.htmlEncode(title));\n\t});\n\treturn results;\n};\n\nexports.stringify = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.stringify(title,(operator.suffix === \"rawunicode\")));\n\t});\n\treturn results;\n};\n\nexports.jsonstringify = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.jsonStringify(title,(operator.suffix === \"rawunicode\")));\n\t});\n\treturn results;\n};\n\nexports.escaperegexp = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.escapeRegExp(title));\n\t});\n\treturn results;\n};\n\nexports.escapecss = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t// escape any character with a special meaning in CSS using CSS.escape()\n\t\tresults.push(CSS.escape(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/enlist.js": {
"title": "$:/core/modules/filters/enlist.js",
"text": "/*\\\ntitle: $:/core/modules/filters/enlist.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning its operand parsed as a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.enlist = function(source,operator,options) {\n\tvar allowDuplicates = false;\n\tswitch(operator.suffix) {\n\t\tcase \"raw\":\n\t\t\tallowDuplicates = true;\n\t\t\tbreak;\n\t\tcase \"dedupe\":\n\t\t\tallowDuplicates = false;\n\t\t\tbreak;\n\t}\n\tvar list = $tw.utils.parseStringArray(operator.operand,allowDuplicates);\n\tif(operator.prefix === \"!\") {\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t} else {\n\t\treturn list;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/field.js": {
"title": "$:/core/modules/filters/field.js",
"text": "/*\\\ntitle: $:/core/modules/filters/field.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.field = function(source,operator,options) {\n\tvar results = [],indexedResults,\n\t\tfieldname = (operator.suffix || operator.operator || \"title\").toLowerCase();\n\tif(operator.prefix === \"!\") {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text !== operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !!operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tif(source.byField && operator.operand) {\n\t\t\t\tindexedResults = source.byField(fieldname,operator.operand);\n\t\t\t\tif(indexedResults) {\n\t\t\t\t\treturn indexedResults\n\t\t\t\t}\n\t\t\t}\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text === operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/fields.js": {
"title": "$:/core/modules/filters/fields.js",
"text": "/*\\\ntitle: $:/core/modules/filters/fields.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the fields on the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.fields = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName,\n\t\tsuffixes = (operator.suffixes || [])[0] || [],\n\t\toperand = $tw.utils.parseStringArray(operator.operand);\n\t\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tif(suffixes.indexOf(\"include\") !== -1) {\n\t\t\t\tfor(fieldName in tiddler.fields) {\n\t\t\t\t\t(operand.indexOf(fieldName) !== -1) ? $tw.utils.pushTop(results,fieldName) : \"\";\n\t\t\t\t}\n\t\t\t} else if (suffixes.indexOf(\"exclude\") !== -1) {\n\t\t\t\tfor(fieldName in tiddler.fields) {\n\t\t\t\t\t(operand.indexOf(fieldName) !== -1) ? \"\" : $tw.utils.pushTop(results,fieldName);\n\t\t\t\t}\n\t\t\t} // else if\n\t\t\telse {\n\t\t\t\tfor(fieldName in tiddler.fields) {\n\t\t\t\t\t$tw.utils.pushTop(results,fieldName);\n\t\t\t\t}\n\t\t\t} // else\n\t\t} // if (tiddler)\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/filter.js": {
"title": "$:/core/modules/filters/filter.js",
"text": "/*\\\ntitle: $:/core/modules/filters/filter.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning those input titles that pass a subfilter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.filter = function(source,operator,options) {\n\tvar filterFn = options.wiki.compileFilter(operator.operand),\n\t\tresults = [],\n\t\ttarget = operator.prefix !== \"!\";\n\tsource(function(tiddler,title) {\n\t\tvar list = filterFn.call(options.wiki,options.wiki.makeTiddlerIterator([title]));\n\t\tif((list.length > 0) === target) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/format/date.js": {
"title": "$:/core/modules/filters/format/date.js",
"text": "/*\\\ntitle: $:/core/modules/filters/format/date.js\ntype: application/javascript\nmodule-type: formatfilteroperator\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.date = function(source,operand,options) {\n\tvar results = [];\t\n\tsource(function(tiddler,title) {\n\t\tvar value = $tw.utils.parseDate(title);\n\t\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\t\tresults.push($tw.utils.formatDateString(value,operand || \"YYYY MM DD 0hh:0mm\"));\n\t\t}\n\t});\t\n\treturn results;\n};\n\n})();",
"type": "application/javascript",
"module-type": "formatfilteroperator"
},
"$:/core/modules/filters/format/relativedate.js": {
"title": "$:/core/modules/filters/format/relativedate.js",
"text": "/*\\\ntitle: $:/core/modules/filters/format/relativedate.js\ntype: application/javascript\nmodule-type: formatfilteroperator\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.relativedate = function(source,operand,options) {\n\tvar results = [];\t\n\tsource(function(tiddler,title) {\n\t\tvar value = $tw.utils.parseDate(title);\n\t\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\t\tresults.push($tw.utils.getRelativeDate((new Date()) - (new Date(value))).description);\n\t\t}\n\t});\t\n\treturn results;\n};\n\n})();",
"type": "application/javascript",
"module-type": "formatfilteroperator"
},
"$:/core/modules/filters/format.js": {
"title": "$:/core/modules/filters/format.js",
"text": "/*\\\ntitle: $:/core/modules/filters/format.js\ntype: application/javascript\nmodule-type: filteroperator\nFilter operator for formatting strings\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar formatFilterOperators;\n\nfunction getFormatFilterOperators() {\n\tif(!formatFilterOperators) {\n\t\tformatFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"formatfilteroperator\",formatFilterOperators);\n\t}\n\treturn formatFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.format = function(source,operator,options) {\n\t// Dispatch to the correct formatfilteroperator\n\tvar formatFilterOperators = getFormatFilterOperators();\n\tif(operator.suffix) {\n\t\tvar formatFilterOperator = formatFilterOperators[operator.suffix];\n\t\tif(formatFilterOperator) {\n\t\t\treturn formatFilterOperator(source,operator.operand,options);\n\t\t} else {\n\t\t\treturn [$tw.language.getString(\"Error/FormatFilterOperator\")];\n\t\t}\n\t} else {\n\t\t// Return all unchanged if the suffix is missing\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t\treturn results;\n\t}\n};\n\n})();",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/get.js": {
"title": "$:/core/modules/filters/get.js",
"text": "/*\\\ntitle: $:/core/modules/filters/get.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing tiddler titles by the value of the field specified in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.get = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tvar value = tiddler.getFieldString(operator.operand);\n\t\t\tif(value) {\n\t\t\t\tresults.push(value);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/getindex.js": {
"title": "$:/core/modules/filters/getindex.js",
"text": "/*\\\ntitle: $:/core/modules/filters/getindex.js\ntype: application/javascript\nmodule-type: filteroperator\n\nreturns the value at a given index of datatiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.getindex = function(source,operator,options) {\n\tvar data,title,results = [];\n\tif(operator.operand){\n\t\tsource(function(tiddler,title) {\n\t\t\ttitle = tiddler ? tiddler.fields.title : title;\n\t\t\tdata = options.wiki.extractTiddlerDataItem(tiddler,operator.operand);\n\t\t\tif(data) {\n\t\t\t\tresults.push(data);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/getvariable.js": {
"title": "$:/core/modules/filters/getvariable.js",
"text": "/*\\\ntitle: $:/core/modules/filters/getvariable.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing input values by the value of the variable with the same name, or blank if the variable is missing\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.getvariable = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(options.widget.getVariable(title) || \"\");\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/has.js": {
"title": "$:/core/modules/filters/has.js",
"text": "/*\\\ntitle: $:/core/modules/filters/has.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a tiddler has the specified field or index\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.has = function(source,operator,options) {\n\tvar results = [],\n\t\tinvert = operator.prefix === \"!\";\n\n\tif(operator.suffix === \"field\") {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || (tiddler && (!$tw.utils.hop(tiddler.fields,operator.operand)))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\telse if(operator.suffix === \"index\") {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || (tiddler && (!$tw.utils.hop(options.wiki.getTiddlerDataCached(tiddler,Object.create(null)),operator.operand)))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop(options.wiki.getTiddlerDataCached(tiddler,Object.create(null)),operator.operand)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\telse {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || !$tw.utils.hop(tiddler.fields,operator.operand) || (tiddler.fields[operator.operand].length === 0)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand) && (tiddler.fields[operator.operand].length !== 0)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\t\t\t\t\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/haschanged.js": {
"title": "$:/core/modules/filters/haschanged.js",
"text": "/*\\\ntitle: $:/core/modules/filters/haschanged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returns tiddlers from the list that have a non-zero changecount.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.haschanged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.getChangeCount(title) === 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.getChangeCount(title) > 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/indexes.js": {
"title": "$:/core/modules/filters/indexes.js",
"text": "/*\\\ntitle: $:/core/modules/filters/indexes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the indexes of a data tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.indexes = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar data = options.wiki.getTiddlerDataCached(title);\n\t\tif(data) {\n\t\t\t$tw.utils.pushTop(results,Object.keys(data));\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/insertbefore.js": {
"title": "$:/core/modules/filters/insertbefore.js",
"text": "/*\\\ntitle: $:/core/modules/filters/insertbefore.js\ntype: application/javascript\nmodule-type: filteroperator\n\nInsert an item before another item in a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOrder a list\n*/\nexports.insertbefore = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar target = options.widget && options.widget.getVariable(operator.suffix || \"currentTiddler\");\n\tif(target !== operator.operand) {\n\t\t// Remove the entry from the list if it is present\n\t\tvar pos = results.indexOf(operator.operand);\n\t\tif(pos !== -1) {\n\t\t\tresults.splice(pos,1);\n\t\t}\n\t\t// Insert the entry before the target marker\n\t\tpos = results.indexOf(target);\n\t\tif(pos !== -1) {\n\t\t\tresults.splice(pos,0,operator.operand);\n\t\t} else {\n\t\t\tresults.push(operator.operand);\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/is/binary.js": {
"title": "$:/core/modules/filters/is/binary.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/binary.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[binary]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.binary = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isBinaryTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isBinaryTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/blank.js": {
"title": "$:/core/modules/filters/is/blank.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/blank.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[blank]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.blank = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!title) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/current.js": {
"title": "$:/core/modules/filters/is/current.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/current.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar results = [],\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title !== currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title === currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/draft.js": {
"title": "$:/core/modules/filters/is/draft.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/draft.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[draft]] analagous to [has[draft.of]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.draft = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!tiddler || !$tw.utils.hop(tiddler.fields,\"draft.of\")) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,\"draft.of\") && (tiddler.fields[\"draft.of\"].length !== 0)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\t\t\t\t\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/image.js": {
"title": "$:/core/modules/filters/is/image.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/image.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[image]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.image = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/missing.js": {
"title": "$:/core/modules/filters/is/missing.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/missing.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/orphan.js": {
"title": "$:/core/modules/filters/is/orphan.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/orphan.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[orphan]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphan = function(source,prefix,options) {\n\tvar results = [],\n\t\torphanTitles = options.wiki.getOrphanTitles();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) !== -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/shadow.js": {
"title": "$:/core/modules/filters/is/shadow.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/shadow.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[shadow]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadow = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/system.js": {
"title": "$:/core/modules/filters/is/system.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/system.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[system]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.system = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/tag.js": {
"title": "$:/core/modules/filters/is/tag.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/tag.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tag]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,prefix,options) {\n\tvar results = [],\n\t\ttagMap = options.wiki.getTagMap();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!$tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif($tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/tiddler.js": {
"title": "$:/core/modules/filters/is/tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/tiddler.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tiddler]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddler = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/variable.js": {
"title": "$:/core/modules/filters/is/variable.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/variable.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[variable]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.variable = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!(title in options.widget.variables)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title in options.widget.variables) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is.js": {
"title": "$:/core/modules/filters/is.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking tiddler properties\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar isFilterOperators;\n\nfunction getIsFilterOperators() {\n\tif(!isFilterOperators) {\n\t\tisFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"isfilteroperator\",isFilterOperators);\n\t}\n\treturn isFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.is = function(source,operator,options) {\n\t// Dispatch to the correct isfilteroperator\n\tvar isFilterOperators = getIsFilterOperators();\n\tif(operator.operand) {\n\t\tvar isFilterOperator = isFilterOperators[operator.operand];\n\t\tif(isFilterOperator) {\n\t\t\treturn isFilterOperator(source,operator.prefix,options);\n\t\t} else {\n\t\t\treturn [$tw.language.getString(\"Error/IsFilterOperator\")];\n\t\t}\n\t} else {\n\t\t// Return all tiddlers if the operand is missing\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t\treturn results;\n\t}\n};\n\n})();",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/limit.js": {
"title": "$:/core/modules/filters/limit.js",
"text": "/*\\\ntitle: $:/core/modules/filters/limit.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for chopping the results to a specified maximum number of entries\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.limit = function(source,operator,options) {\n\tvar results = [];\n\t// Convert to an array\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\t// Slice the array if necessary\n\tvar limit = Math.min(results.length,parseInt(operator.operand,10));\n\tif(operator.prefix === \"!\") {\n\t\tresults = results.slice(-limit);\n\t} else {\n\t\tresults = results.slice(0,limit);\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/links.js": {
"title": "$:/core/modules/filters/links.js",
"text": "/*\\\ntitle: $:/core/modules/filters/links.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the links from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.links = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerLinks(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/list.js": {
"title": "$:/core/modules/filters/list.js",
"text": "/*\\\ntitle: $:/core/modules/filters/list.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddlers whose title is listed in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.list = function(source,operator,options) {\n\tvar results = [],\n\t\ttr = $tw.utils.parseTextReference(operator.operand),\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\"),\n\t\tlist = options.wiki.getTiddlerList(tr.title || currTiddlerTitle,tr.field,tr.index);\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults = list;\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/listed.js": {
"title": "$:/core/modules/filters/listed.js",
"text": "/*\\\ntitle: $:/core/modules/filters/listed.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that have the selected tiddlers in a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.listed = function(source,operator,options) {\n\tvar field = operator.operand || \"list\",\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.findListingsOfTiddler(title,field));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/listops.js": {
"title": "$:/core/modules/filters/listops.js",
"text": "/*\\\ntitle: $:/core/modules/filters/listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for manipulating the current selection list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOrder a list\n*/\nexports.order = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.operand.toLowerCase() === \"reverse\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.unshift(title);\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n/*\nReverse list\n*/\nexports.reverse = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.unshift(title);\n\t});\n\treturn results;\n};\n\n/*\nFirst entry/entries in list\n*/\nexports.first = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,count);\n};\n\n/*\nLast entry/entries in list\n*/\nexports.last = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(-count);\n};\n\n/*\nAll but the first entry/entries of the list\n*/\nexports.rest = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count);\n};\nexports.butfirst = exports.rest;\nexports.bf = exports.rest;\n\n/*\nAll but the last entry/entries of the list\n*/\nexports.butlast = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,-count);\n};\nexports.bl = exports.butlast;\n\n/*\nThe nth member of the list\n*/\nexports.nth = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count - 1,count);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/lookup.js": {
"title": "$:/core/modules/filters/lookup.js",
"text": "/*\\\ntitle: $:/core/modules/filters/lookup.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that looks up values via a title prefix\n\n[lookup:<field>[<prefix>]]\n\nPrepends the prefix to the selected items and returns the specified field value\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.lookup = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(options.wiki.getTiddlerText(operator.operand + title) || operator.suffix);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/match.js": {
"title": "$:/core/modules/filters/match.js",
"text": "/*\\\ntitle: $:/core/modules/filters/match.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title matches a string\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.match = function(source,operator,options) {\n\tvar results = [],\n\t\tsuffixes = (operator.suffixes || [])[0] || [];\n\tif(suffixes.indexOf(\"caseinsensitive\") !== -1) {\n\t\tif(operator.prefix === \"!\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title.toLowerCase() !== (operator.operand || \"\").toLowerCase()) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title.toLowerCase() === (operator.operand || \"\").toLowerCase()) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif(operator.prefix === \"!\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title !== operator.operand) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title === operator.operand) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/math.js": {
"title": "$:/core/modules/filters/math.js",
"text": "/*\\\ntitle: $:/core/modules/filters/math.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for math. Unary/binary operators work on each item in turn, and return a new item list.\n\nSum/product/maxall/minall operate on the entire list, returning a single item.\n\nNote that strings are converted to numbers automatically. Trailing non-digits are ignored.\n\n* \"\" converts to 0\n* \"12kk\" converts to 12\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.negate = makeNumericBinaryOperator(\n\tfunction(a) {return -a}\n);\n\nexports.abs = makeNumericBinaryOperator(\n\tfunction(a) {return Math.abs(a)}\n);\n\nexports.ceil = makeNumericBinaryOperator(\n\tfunction(a) {return Math.ceil(a)}\n);\n\nexports.floor = makeNumericBinaryOperator(\n\tfunction(a) {return Math.floor(a)}\n);\n\nexports.round = makeNumericBinaryOperator(\n\tfunction(a) {return Math.round(a)}\n);\n\nexports.trunc = makeNumericBinaryOperator(\n\tfunction(a) {return Math.trunc(a)}\n);\n\nexports.untrunc = makeNumericBinaryOperator(\n\tfunction(a) {return Math.ceil(Math.abs(a)) * Math.sign(a)}\n);\n\nexports.sign = makeNumericBinaryOperator(\n\tfunction(a) {return Math.sign(a)}\n);\n\nexports.add = makeNumericBinaryOperator(\n\tfunction(a,b) {return a + b;}\n);\n\nexports.subtract = makeNumericBinaryOperator(\n\tfunction(a,b) {return a - b;}\n);\n\nexports.multiply = makeNumericBinaryOperator(\n\tfunction(a,b) {return a * b;}\n);\n\nexports.divide = makeNumericBinaryOperator(\n\tfunction(a,b) {return a / b;}\n);\n\nexports.remainder = makeNumericBinaryOperator(\n\tfunction(a,b) {return a % b;}\n);\n\nexports.max = makeNumericBinaryOperator(\n\tfunction(a,b) {return Math.max(a,b);}\n);\n\nexports.min = makeNumericBinaryOperator(\n\tfunction(a,b) {return Math.min(a,b);}\n);\n\nexports.fixed = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toFixed.call(a,Math.min(Math.max(b,0),100));}\n);\n\nexports.precision = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toPrecision.call(a,Math.min(Math.max(b,1),100));}\n);\n\nexports.exponential = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toExponential.call(a,Math.min(Math.max(b,0),100));}\n);\n\nexports.power = makeNumericBinaryOperator(\n\tfunction(a,b) {return Math.pow(a,b);}\n);\n\nexports.log = makeNumericBinaryOperator(\n\tfunction(a,b) {\n\t\tif(b) {\n\t\t\treturn Math.log(a)/Math.log(b);\n\t\t} else {\n\t\t\treturn Math.log(a);\n\t\t}\n\t}\n);\n\nexports.sum = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return accumulator + value},\n\t0 // Initial value\n);\n\nexports.product = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return accumulator * value},\n\t1 // Initial value\n);\n\nexports.maxall = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return Math.max(accumulator,value)},\n\t-Infinity // Initial value\n);\n\nexports.minall = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return Math.min(accumulator,value)},\n\tInfinity // Initial value\n);\n\nfunction makeNumericBinaryOperator(fnCalc) {\n\treturn function(source,operator,options) {\n\t\tvar result = [],\n\t\t\tnumOperand = $tw.utils.parseNumber(operator.operand);\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push($tw.utils.stringifyNumber(fnCalc($tw.utils.parseNumber(title),numOperand)));\n\t\t});\n\t\treturn result;\n\t};\n}\n\nfunction makeNumericReducingOperator(fnCalc,initialValue) {\n\tinitialValue = initialValue || 0;\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push(title);\n\t\t});\n\t\treturn [$tw.utils.stringifyNumber(result.reduce(function(accumulator,currentValue) {\n\t\t\treturn fnCalc(accumulator,$tw.utils.parseNumber(currentValue));\n\t\t},initialValue))];\n\t};\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/minlength.js": {
"title": "$:/core/modules/filters/minlength.js",
"text": "/*\\\ntitle: $:/core/modules/filters/minlength.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for filtering out titles that don't meet the minimum length in the operand\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.minlength = function(source,operator,options) {\n\tvar results = [],\n\t\tminLength = parseInt(operator.operand || \"\",10) || 0;\n\tsource(function(tiddler,title) {\n\t\tif(title.length >= minLength) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/modules.js": {
"title": "$:/core/modules/filters/modules.js",
"text": "/*\\\ntitle: $:/core/modules/filters/modules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the modules of a given type in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.modules = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.each($tw.modules.types[title],function(moduleInfo,moduleName) {\n\t\t\tresults.push(moduleName);\n\t\t});\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/moduletypes.js": {
"title": "$:/core/modules/filters/moduletypes.js",
"text": "/*\\\ntitle: $:/core/modules/filters/moduletypes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the module types in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.moduletypes = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.modules.types,function(moduleInfo,type) {\n\t\tresults.push(type);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/next.js": {
"title": "$:/core/modules/filters/next.js",
"text": "/*\\\ntitle: $:/core/modules/filters/next.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs next in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.next = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch++;\n\t\tif(match > 0 && match < list.length) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/plugintiddlers.js": {
"title": "$:/core/modules/filters/plugintiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/filters/plugintiddlers.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the shadow tiddlers within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.plugintiddlers = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar pluginInfo = options.wiki.getPluginInfo(title) || options.wiki.getTiddlerDataCached(title,{tiddlers:[]});\n\t\tif(pluginInfo && pluginInfo.tiddlers) {\n\t\t\t$tw.utils.each(pluginInfo.tiddlers,function(fields,title) {\n\t\t\t\tresults.push(title);\n\t\t\t});\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/prefix.js": {
"title": "$:/core/modules/filters/prefix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/prefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title starts with a prefix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.prefix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/previous.js": {
"title": "$:/core/modules/filters/previous.js",
"text": "/*\\\ntitle: $:/core/modules/filters/previous.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs immediately prior in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.previous = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch--;\n\t\tif(match >= 0) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/range.js": {
"title": "$:/core/modules/filters/range.js",
"text": "/*\\\ntitle: $:/core/modules/filters/range.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for generating a numeric range.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.range = function(source,operator,options) {\n\tvar results = [];\n\t// Split the operand into numbers delimited by these symbols\n\tvar parts = operator.operand.split(/[,:;]/g),\n\t\tbeg, end, inc, i, fixed = 0;\n\tfor (i=0; i<parts.length; i++) {\n\t\t// Validate real number\n\t\tif(!/^\\s*[+-]?((\\d+(\\.\\d*)?)|(\\.\\d+))\\s*$/.test(parts[i])) {\n\t\t\treturn [\"range: bad number \\\"\" + parts[i] + \"\\\"\"];\n\t\t}\n\t\t// Count digits; the most precise number determines decimal places in output.\n\t\tvar frac = /\\.\\d+/.exec(parts[i]);\n\t\tif(frac) {\n\t\t\tfixed = Math.max(fixed,frac[0].length-1);\n\t\t}\n\t\tparts[i] = parseFloat(parts[i]);\n\t}\n\tswitch(parts.length) {\n\t\tcase 1:\n\t\t\tend = parts[0];\n\t\t\tif (end >= 1) {\n\t\t\t\tbeg = 1;\n\t\t\t}\n\t\t\telse if (end <= -1) {\n\t\t\t\tbeg = -1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tinc = 1;\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tbeg = parts[0];\n\t\t\tend = parts[1];\n\t\t\tinc = 1;\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tbeg = parts[0];\n\t\t\tend = parts[1];\n\t\t\tinc = Math.abs(parts[2]);\n\t\t\tbreak;\n\t}\n\tif(inc === 0) {\n\t\treturn [\"range: increment 0 causes infinite loop\"];\n\t}\n\t// May need to count backwards\n\tvar direction = ((end < beg) ? -1 : 1);\n\tinc *= direction;\n\t// Estimate number of resulting elements\n\tif((end - beg) / inc > 10000) {\n\t\treturn [\"range: too many steps (over 10K)\"];\n\t}\n\t// Avoid rounding error on last step\n\tend += direction * 0.5 * Math.pow(0.1,fixed);\n\tvar safety = 10010;\n\t// Enumerate the range\n\tif (end<beg) {\n\t\tfor(i=beg; i>end; i+=inc) {\n\t\t\tresults.push(i.toFixed(fixed));\n\t\t\tif(--safety<0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor(i=beg; i<end; i+=inc) {\n\t\t\tresults.push(i.toFixed(fixed));\n\t\t\tif(--safety<0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif(safety<0) {\n\t\treturn [\"range: unexpectedly large output\"];\n\t}\n\t// Reverse?\n\tif(operator.prefix === \"!\") {\n\t\tresults.reverse();\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/reduce.js": {
"title": "$:/core/modules/filters/reduce.js",
"text": "/*\\\ntitle: $:/core/modules/filters/reduce.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator evaluates a subfilter for each item, making the running total available in the variable `accumulator`, and the current index available in the variable `index`\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.reduce = function(source,operator,options) {\n\t// Accumulate the list\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\t// Run the filter over each item\n\tvar filterFn = options.wiki.compileFilter(operator.operand),\n\t\taccumulator = operator.operands[1] || \"\";\n\tfor(var index=0; index<results.length; index++) {\n\t\tvar title = results[index],\n\t\t\tlist = filterFn.call(options.wiki,options.wiki.makeTiddlerIterator([title]),{\n\t\t\t\tgetVariable: function(name) {\n\t\t\t\t\tswitch(name) {\n\t\t\t\t\t\tcase \"currentTiddler\":\n\t\t\t\t\t\t\treturn \"\" + title;\n\t\t\t\t\t\tcase \"accumulator\":\n\t\t\t\t\t\t\treturn \"\" + accumulator;\n\t\t\t\t\t\tcase \"index\":\n\t\t\t\t\t\t\treturn \"\" + index;\n\t\t\t\t\t\tcase \"revIndex\":\n\t\t\t\t\t\t\treturn \"\" + (results.length - 1 - index);\n\t\t\t\t\t\tcase \"length\":\n\t\t\t\t\t\t\treturn \"\" + results.length;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn options.widget.getVariable(name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\tif(list.length > 0) {\n\t\t\taccumulator = \"\" + list[0];\n\t\t}\n\t}\n\tif(results.length > 0) {\n\t\treturn [accumulator];\n\t} else {\n\t\treturn [];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/regexp.js": {
"title": "$:/core/modules/filters/regexp.js",
"text": "/*\\\ntitle: $:/core/modules/filters/regexp.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for regexp matching\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.regexp = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || \"title\").toLowerCase(),\n\t\tregexpString, regexp, flags = \"\", match,\n\t\tgetFieldString = function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\treturn tiddler.getFieldString(fieldname);\n\t\t\t} else if(fieldname === \"title\") {\n\t\t\t\treturn title;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\t// Process flags and construct regexp\n\tregexpString = operator.operand;\n\tmatch = /^\\(\\?([gim]+)\\)/.exec(regexpString);\n\tif(match) {\n\t\tflags = match[1];\n\t\tregexpString = regexpString.substr(match[0].length);\n\t} else {\n\t\tmatch = /\\(\\?([gim]+)\\)$/.exec(regexpString);\n\t\tif(match) {\n\t\t\tflags = match[1];\n\t\t\tregexpString = regexpString.substr(0,regexpString.length - match[0].length);\n\t\t}\n\t}\n\ttry {\n\t\tregexp = new RegExp(regexpString,flags);\n\t} catch(e) {\n\t\treturn [\"\" + e];\n\t}\n\t// Process the incoming tiddlers\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/removeprefix.js": {
"title": "$:/core/modules/filters/removeprefix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/removeprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a prefix from each title in the list. Titles that do not start with the prefix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removeprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/removesuffix.js": {
"title": "$:/core/modules/filters/removesuffix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/removesuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a suffix from each title in the list. Titles that do not end with the suffix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removesuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title && title.substr(-operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(0,title.length - operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/sameday.js": {
"title": "$:/core/modules/filters/sameday.js",
"text": "/*\\\ntitle: $:/core/modules/filters/sameday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a modified date field on the same day as the provided value.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sameday = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\ttargetDate = (new Date($tw.utils.parseDate(operator.operand))).setHours(0,0,0,0);\n\t// Function to convert a date/time to a date integer\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tif(tiddler.getFieldDay(fieldName) === targetDate) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/search.js": {
"title": "$:/core/modules/filters/search.js",
"text": "/*\\\ntitle: $:/core/modules/filters/search.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for searching for the text in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.search = function(source,operator,options) {\n\tvar invert = operator.prefix === \"!\";\n\tif(operator.suffixes) {\n\t\tvar hasFlag = function(flag) {\n\t\t\t\treturn (operator.suffixes[1] || []).indexOf(flag) !== -1;\n\t\t\t},\n\t\t\texcludeFields = false,\n\t\t\tfieldList = operator.suffixes[0] || [],\n\t\t\tfirstField = fieldList[0] || \"\", \n\t\t\tfirstChar = firstField.charAt(0),\n\t\t\tfields;\n\t\tif(firstChar === \"-\") {\n\t\t\tfields = [firstField.slice(1)].concat(fieldList.slice(1));\n\t\t\texcludeFields = true;\n\t\t} else if(fieldList[0] === \"*\"){\n\t\t\tfields = [];\n\t\t\texcludeFields = true;\n\t\t} else {\n\t\t\tfields = fieldList.slice(0);\n\t\t}\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert,\n\t\t\tfield: fields,\n\t\t\texcludeField: excludeFields,\n\t\t\tcaseSensitive: hasFlag(\"casesensitive\"),\n\t\t\tliteral: hasFlag(\"literal\"),\n\t\t\twhitespace: hasFlag(\"whitespace\"),\n\t\t\tanchored: hasFlag(\"anchored\"),\n\t\t\tregexp: hasFlag(\"regexp\"),\n\t\t\twords: hasFlag(\"words\")\n\t\t});\n\t} else {\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert\n\t\t});\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/shadowsource.js": {
"title": "$:/core/modules/filters/shadowsource.js",
"text": "/*\\\ntitle: $:/core/modules/filters/shadowsource.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the source plugins for shadow tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadowsource = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar source = options.wiki.getShadowSource(title);\n\t\tif(source) {\n\t\t\t$tw.utils.pushTop(results,source);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/slugify.js": {
"title": "$:/core/modules/filters/slugify.js",
"text": "/*\\\ntitle: $:/core/modules/filters/slugify.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for slugifying a tiddler title\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.slugify = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(options.wiki.slugify(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/sort.js": {
"title": "$:/core/modules/filters/sort.js",
"text": "/*\\\ntitle: $:/core/modules/filters/sort.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for sorting\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,false);\n\treturn results;\n};\n\nexports.nsort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,true);\n\treturn results;\n};\n\nexports.sortan = function(source, operator, options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results, operator.operand || \"title\", operator.prefix === \"!\",false,false,true);\n\treturn results;\n};\n\nexports.sortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,false);\n\treturn results;\n};\n\nexports.nsortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,true);\n\treturn results;\n};\n\nvar prepare_results = function (source) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/sortsub.js": {
"title": "$:/core/modules/filters/sortsub.js",
"text": "/*\\\ntitle: $:/core/modules/filters/sortsub.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for sorting by a subfilter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sortsub = function(source,operator,options) {\n\t// Compile the subfilter\n\tvar filterFn = options.wiki.compileFilter(operator.operand);\n\t// Collect the input titles and the corresponding sort keys\n\tvar inputTitles = [],\n\t\tsortKeys = [];\n\tsource(function(tiddler,title) {\n\t\tinputTitles.push(title);\n\t\tvar r = filterFn.call(options.wiki,function(iterator) {\n\t\t\titerator(options.wiki.getTiddler(title),title);\n\t\t},{\n\t\t\tgetVariable: function(name) {\n\t\t\t\tif(name === \"currentTiddler\") {\n\t\t\t\t\treturn title;\n\t\t\t\t} else {\n\t\t\t\t\treturn options.widget.getVariable(name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tsortKeys.push(r[0] || \"\");\n\t});\n\t// Rather than sorting the titles array, we'll sort the indexes so that we can consult both arrays\n\tvar indexes = new Array(inputTitles.length);\n\tfor(var t=0; t<inputTitles.length; t++) {\n\t\tindexes[t] = t;\n\t}\n\t// Sort the indexes\n\tvar compareFn = $tw.utils.makeCompareFunction(operator.suffix,{defaultType: \"string\",invert: operator.prefix === \"!\"});\n\tindexes = indexes.sort(function(a,b) {\n\t\treturn compareFn(sortKeys[a],sortKeys[b]);\n\t});\n\t// Make the results array in order\n\tvar results = [];\n\t$tw.utils.each(indexes,function(index) {\n\t\tresults.push(inputTitles[index]);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/splitbefore.js": {
"title": "$:/core/modules/filters/splitbefore.js",
"text": "/*\\\ntitle: $:/core/modules/filters/splitbefore.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that splits each result on the first occurance of the specified separator and returns the unique values.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.splitbefore = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar parts = title.split(operator.operand);\n\t\tif(parts.length === 1) {\n\t\t\t$tw.utils.pushTop(results,parts[0]);\n\t\t} else {\n\t\t\t$tw.utils.pushTop(results,parts[0] + operator.operand);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/storyviews.js": {
"title": "$:/core/modules/filters/storyviews.js",
"text": "/*\\\ntitle: $:/core/modules/filters/storyviews.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the story views in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.storyviews = function(source,operator,options) {\n\tvar results = [],\n\t\tstoryviews = {};\n\t$tw.modules.applyMethods(\"storyview\",storyviews);\n\t$tw.utils.each(storyviews,function(info,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/strings.js": {
"title": "$:/core/modules/filters/strings.js",
"text": "/*\\\ntitle: $:/core/modules/filters/strings.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for strings. Unary/binary operators work on each item in turn, and return a new item list.\n\nSum/product/maxall/minall operate on the entire list, returning a single item.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.length = makeStringBinaryOperator(\n\tfunction(a) {return [\"\" + (\"\" + a).length];}\n);\n\nexports.uppercase = makeStringBinaryOperator(\n\tfunction(a) {return [(\"\" + a).toUpperCase()];}\n);\n\nexports.lowercase = makeStringBinaryOperator(\n\tfunction(a) {return [(\"\" + a).toLowerCase()];}\n);\n\nexports.sentencecase = makeStringBinaryOperator(\n\tfunction(a) {return [$tw.utils.toSentenceCase(a)];}\n);\n\nexports.titlecase = makeStringBinaryOperator(\n\tfunction(a) {return [$tw.utils.toTitleCase(a)];}\n);\n\nexports.trim = function(source,operator,options) {\n\tvar result = [],\n\t\tsuffix = operator.suffix || \"\",\n\t\toperand = (operator.operand || \"\"),\n\t\tfnCalc;\n\tif(suffix === \"prefix\") {\n\t\tfnCalc = function(a,b) {return [$tw.utils.trimPrefix(a,b)];}\n\t} else if(suffix === \"suffix\") {\n\t\tfnCalc = function(a,b) {return [$tw.utils.trimSuffix(a,b)];}\n\t} else {\n\t\tif(operand === \"\") {\n\t\t\tfnCalc = function(a) {return [$tw.utils.trim(a)];}\n\t\t} else {\n\t\t\tfnCalc = function(a,b) {return [$tw.utils.trimSuffix($tw.utils.trimPrefix(a,b),b)];}\n\t\t}\n\t}\n\tsource(function(tiddler,title) {\n\t\tArray.prototype.push.apply(result,fnCalc(title,operand));\n\t});\n\treturn result;\n};\n\nexports.split = makeStringBinaryOperator(\n\tfunction(a,b) {return (\"\" + a).split(b);}\n);\n\nexports[\"enlist-input\"] = makeStringBinaryOperator(\n\tfunction(a,o,s) {return $tw.utils.parseStringArray(\"\" + a,(s === \"raw\"));}\n);\n\nexports.join = makeStringReducingOperator(\n\tfunction(accumulator,value,operand) {\n\t\tif(accumulator === null) {\n\t\t\treturn value;\n\t\t} else {\n\t\t\treturn accumulator + operand + value;\n\t\t}\n\t},null\n);\n\nfunction makeStringBinaryOperator(fnCalc) {\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tArray.prototype.push.apply(result,fnCalc(title,operator.operand || \"\",operator.suffix || \"\"));\n\t\t});\n\t\treturn result;\n\t};\n}\n\nfunction makeStringReducingOperator(fnCalc,initialValue) {\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push(title);\n\t\t});\n\t\tif(result.length === 0) {\n\t\t\treturn [];\n\t\t}\n\t\treturn [result.reduce(function(accumulator,currentValue) {\n\t\t\treturn fnCalc(accumulator,currentValue,operator.operand || \"\");\n\t\t},initialValue) || \"\"];\n\t};\n}\n\nexports.splitregexp = function(source,operator,options) {\n\tvar result = [],\n\t\tsuffix = operator.suffix || \"\",\n\t\tflags = (suffix.indexOf(\"m\") !== -1 ? \"m\" : \"\") + (suffix.indexOf(\"i\") !== -1 ? \"i\" : \"\"),\n\t\tregExp;\n\ttry {\n\t\tregExp = new RegExp(operator.operand || \"\",flags);\t\t\n\t} catch(ex) {\n\t\treturn [\"RegExp error: \" + ex];\n\t}\n\tsource(function(tiddler,title) {\n\t\tArray.prototype.push.apply(result,title.split(regExp));\n\t});\t\t\n\treturn result;\n};\n\nexports[\"search-replace\"] = function(source,operator,options) {\n\tvar results = [],\n\t\tsuffixes = operator.suffixes || [],\n\t\tflagSuffix = (suffixes[0] ? (suffixes[0][0] || \"\") : \"\"),\n\t\tflags = (flagSuffix.indexOf(\"g\") !== -1 ? \"g\" : \"\") + (flagSuffix.indexOf(\"i\") !== -1 ? \"i\" : \"\"),\n\t\tisRegExp = (suffixes[1] && suffixes[1][0] === \"regexp\") ? true : false,\n\t\tsearchTerm,\n\t\tregExp;\n\t\n\tsource(function(tiddler,title) {\n\t\tif(title && (operator.operands.length > 1)) {\n\t\t\t//Escape regexp characters if the operand is not a regular expression\n\t\t\tsearchTerm = isRegExp ? operator.operand : $tw.utils.escapeRegExp(operator.operand);\n\t\t\ttry {\n\t\t\t\tregExp = new RegExp(searchTerm,flags);\n\t\t\t} catch(ex) {\n\t\t\t\treturn [\"RegExp error: \" + ex];\n\t\t\t}\n\t\t\tresults.push(\n\t\t\t\ttitle.replace(regExp,operator.operands[1])\n\t\t\t);\n\t\t} else {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\nexports.pad = function(source,operator,options) {\n\tvar results = [],\n\t\ttargetLength = operator.operand ? parseInt(operator.operand) : 0,\n\t\tfill = operator.operands[1] || \"0\";\n\n\tsource(function(tiddler,title) {\n\t\tif(title && title.length) {\n\t\t\tif(title.length >= targetLength) {\n\t\t\t\tresults.push(title);\n\t\t\t} else {\n\t\t\t\tvar padString = \"\",\n\t\t\t\t\tpadStringLength = targetLength - title.length;\n\t\t\t\twhile (padStringLength > padString.length) {\n\t\t\t\t\tpadString += fill;\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t//make sure we do not exceed the specified length\n\t\t\t\tpadString = padString.slice(0,padStringLength);\n\t\t\t\tif(operator.suffix && (operator.suffix === \"suffix\")) {\n\t\t\t\t\ttitle = title + padString;\n\t\t\t\t} else {\n\t\t\t\t\ttitle = padString + title;\n\t\t\t\t}\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/subfilter.js": {
"title": "$:/core/modules/filters/subfilter.js",
"text": "/*\\\ntitle: $:/core/modules/filters/subfilter.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning its operand evaluated as a filter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.subfilter = function(source,operator,options) {\n\tvar list = options.wiki.filterTiddlers(operator.operand,options.widget,source);\n\tif(operator.prefix === \"!\") {\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t} else {\n\t\treturn list;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/subtiddlerfields.js": {
"title": "$:/core/modules/filters/subtiddlerfields.js",
"text": "/*\\\ntitle: $:/core/modules/filters/subtiddlerfields.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the fields on the selected subtiddlers of the plugin named in the operand\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.subtiddlerfields = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar subtiddler = options.wiki.getSubTiddler(operator.operand,title);\n\t\tif(subtiddler) {\n\t\t\tfor(var fieldName in subtiddler.fields) {\n\t\t\t\t$tw.utils.pushTop(results,fieldName);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/suffix.js": {
"title": "$:/core/modules/filters/suffix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/suffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title ends with a suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.suffix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tag.js": {
"title": "$:/core/modules/filters/tag.js",
"text": "/*\\\ntitle: $:/core/modules/filters/tag.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking for the presence of a tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,operator,options) {\n\tvar results = [],indexedResults;\n\tif((operator.suffix || \"\").toLowerCase() === \"strict\" && !operator.operand) {\n\t\t// New semantics:\n\t\t// Always return copy of input if operator.operand is missing\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t} else {\n\t\t// Old semantics:\n\t\tvar tiddlers;\n\t\tif(operator.prefix === \"!\") {\n\t\t\t// Returns a copy of the input if operator.operand is missing\n\t\t\ttiddlers = options.wiki.getTiddlersWithTag(operator.operand);\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddlers.indexOf(title) === -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t// Returns empty results if operator.operand is missing\n\t\t\tif(source.byTag) {\n\t\t\t\tindexedResults = source.byTag(operator.operand);\n\t\t\t\tif(indexedResults) {\n\t\t\t\t\treturn indexedResults;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttiddlers = options.wiki.getTiddlersWithTag(operator.operand);\n\t\t\t\tsource(function(tiddler,title) {\n\t\t\t\t\tif(tiddlers.indexOf(title) !== -1) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tresults = options.wiki.sortByList(results,operator.operand);\n\t\t\t}\n\t\t}\t\t\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tagging.js": {
"title": "$:/core/modules/filters/tagging.js",
"text": "/*\\\ntitle: $:/core/modules/filters/tagging.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that are tagged with the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tagging = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlersWithTag(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tags.js": {
"title": "$:/core/modules/filters/tags.js",
"text": "/*\\\ntitle: $:/core/modules/filters/tags.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the tags of the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,operator,options) {\n\tvar tags = {};\n\tsource(function(tiddler,title) {\n\t\tvar t, length;\n\t\tif(tiddler && tiddler.fields.tags) {\n\t\t\tfor(t=0, length=tiddler.fields.tags.length; t<length; t++) {\n\t\t\t\ttags[tiddler.fields.tags[t]] = true;\n\t\t\t}\n\t\t}\n\t});\n\treturn Object.keys(tags);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/then.js": {
"title": "$:/core/modules/filters/then.js",
"text": "/*\\\ntitle: $:/core/modules/filters/then.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing any titles with a constant\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.then = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(operator.operand);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/title.js": {
"title": "$:/core/modules/filters/title.js",
"text": "/*\\\ntitle: $:/core/modules/filters/title.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing title fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.title = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields.title !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults.push(operator.operand);\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/untagged.js": {
"title": "$:/core/modules/filters/untagged.js",
"text": "/*\\\ntitle: $:/core/modules/filters/untagged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the selected tiddlers that are untagged\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.untagged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && $tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length > 0) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!tiddler || !tiddler.hasField(\"tags\") || ($tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length === 0)) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/variables.js": {
"title": "$:/core/modules/filters/variables.js",
"text": "/*\\\ntitle: $:/core/modules/filters/variables.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the active variables\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.variables = function(source,operator,options) {\n\tvar names = [];\n\tfor(var variable in options.widget.variables) {\n\t\tnames.push(variable);\n\t}\n\treturn names.sort();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/wikiparserrules.js": {
"title": "$:/core/modules/filters/wikiparserrules.js",
"text": "/*\\\ntitle: $:/core/modules/filters/wikiparserrules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the wiki parser rules in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.wikiparserrules = function(source,operator,options) {\n\tvar results = [],\n\t\toperand = operator.operand;\n\t$tw.utils.each($tw.modules.types.wikirule,function(mod) {\n\t\tvar exp = mod.exports;\n\t\tif(!operand || exp.types[operand]) {\n\t\t\tresults.push(exp.name);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/x-listops.js": {
"title": "$:/core/modules/filters/x-listops.js",
"text": "/*\\\ntitle: $:/core/modules/filters/x-listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nExtended filter operators to manipulate the current list.\n\n\\*/\n(function () {\n\n\t/*jslint node: true, browser: true */\n\t/*global $tw: false */\n\t\"use strict\";\n\n\t/*\n\tFetch titles from the current list\n\t*/\n\tvar prepare_results = function (source) {\n\tvar results = [];\n\t\tsource(function (tiddler, title) {\n\t\t\tresults.push(title);\n\t\t});\n\t\treturn results;\n\t};\n\n\t/*\n\tMoves a number of items from the tail of the current list before the item named in the operand\n\t*/\n\texports.putbefore = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tindex = results.indexOf(operator.operand),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,1);\n\t\treturn (index === -1) ?\n\t\t\tresults.slice(0, -1) :\n\t\t\tresults.slice(0, index).concat(results.slice(-count)).concat(results.slice(index, -count));\n\t};\n\n\t/*\n\tMoves a number of items from the tail of the current list after the item named in the operand\n\t*/\n\texports.putafter = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tindex = results.indexOf(operator.operand),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,1);\n\t\treturn (index === -1) ?\n\t\t\tresults.slice(0, -1) :\n\t\t\tresults.slice(0, index + 1).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n\t};\n\n\t/*\n\tReplaces the item named in the operand with a number of items from the tail of the current list\n\t*/\n\texports.replace = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tindex = results.indexOf(operator.operand),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,1);\n\t\treturn (index === -1) ?\n\t\t\tresults.slice(0, -count) :\n\t\t\tresults.slice(0, index).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n\t};\n\n\t/*\n\tMoves a number of items from the tail of the current list to the head of the list\n\t*/\n\texports.putfirst = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,1);\n\t\treturn results.slice(-count).concat(results.slice(0, -count));\n\t};\n\n\t/*\n\tMoves a number of items from the head of the current list to the tail of the list\n\t*/\n\texports.putlast = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,1);\n\t\treturn results.slice(count).concat(results.slice(0, count));\n\t};\n\n\t/*\n\tMoves the item named in the operand a number of places forward or backward in the list\n\t*/\n\texports.move = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tindex = results.indexOf(operator.operand),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,1),\n\t\t\tmarker = results.splice(index, 1),\n\t\t\toffset = (index + count) > 0 ? index + count : 0;\n\t\treturn results.slice(0, offset).concat(marker).concat(results.slice(offset));\n\t};\n\n\t/*\n\tReturns the items from the current list that are after the item named in the operand\n\t*/\n\texports.allafter = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tindex = results.indexOf(operator.operand);\n\t\treturn (index === -1) ? [] :\n\t\t\t(operator.suffix) ? results.slice(index) :\n\t\t\tresults.slice(index + 1);\n\t};\n\n\t/*\n\tReturns the items from the current list that are before the item named in the operand\n\t*/\n\texports.allbefore = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tindex = results.indexOf(operator.operand);\n\t\treturn (index === -1) ? [] :\n\t\t\t(operator.suffix) ? results.slice(0, index + 1) :\n\t\t\tresults.slice(0, index);\n\t};\n\n\t/*\n\tAppends the items listed in the operand array to the tail of the current list\n\t*/\n\texports.append = function (source, operator) {\n\t\tvar append = $tw.utils.parseStringArray(operator.operand, \"true\"),\n\t\t\tresults = prepare_results(source),\n\t\t\tcount = parseInt(operator.suffix) || append.length;\n\t\treturn (append.length === 0) ? results :\n\t\t\t(operator.prefix) ? results.concat(append.slice(-count)) :\n\t\t\tresults.concat(append.slice(0, count));\n\t};\n\n\t/*\n\tPrepends the items listed in the operand array to the head of the current list\n\t*/\n\texports.prepend = function (source, operator) {\n\t\tvar prepend = $tw.utils.parseStringArray(operator.operand, \"true\"),\n\t\t\tresults = prepare_results(source),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,prepend.length);\n\t\treturn (prepend.length === 0) ? results :\n\t\t\t(operator.prefix) ? prepend.slice(-count).concat(results) :\n\t\t\tprepend.slice(0, count).concat(results);\n\t};\n\n\t/*\n\tReturns all items from the current list except the items listed in the operand array\n\t*/\n\texports.remove = function (source, operator) {\n\t\tvar array = $tw.utils.parseStringArray(operator.operand, \"true\"),\n\t\t\tresults = prepare_results(source),\n\t\t\tcount = parseInt(operator.suffix) || array.length,\n\t\t\tp,\n\t\t\tlen,\n\t\t\tindex;\n\t\tlen = array.length - 1;\n\t\tfor (p = 0; p < count; ++p) {\n\t\t\tif (operator.prefix) {\n\t\t\t\tindex = results.indexOf(array[len - p]);\n\t\t\t} else {\n\t\t\t\tindex = results.indexOf(array[p]);\n\t\t\t}\n\t\t\tif (index !== -1) {\n\t\t\t\tresults.splice(index, 1);\n\t\t\t}\n\t\t}\n\t\treturn results;\n\t};\n\n\t/*\n\tReturns all items from the current list sorted in the order of the items in the operand array\n\t*/\n\texports.sortby = function (source, operator) {\n\t\tvar results = prepare_results(source);\n\t\tif (!results || results.length < 2) {\n\t\t\treturn results;\n\t\t}\n\t\tvar lookup = $tw.utils.parseStringArray(operator.operand, \"true\");\n\t\tresults.sort(function (a, b) {\n\t\t\treturn lookup.indexOf(a) - lookup.indexOf(b);\n\t\t});\n\t\treturn results;\n\t};\n\n\t/*\n\tRemoves all duplicate items from the current list\n\t*/\n\texports.unique = function (source, operator) {\n\t\tvar results = prepare_results(source);\n\t\tvar set = results.reduce(function (a, b) {\n\t\t\tif (a.indexOf(b) < 0) {\n\t\t\t\ta.push(b);\n\t\t\t}\n\t\t\treturn a;\n\t\t}, []);\n\t\treturn set;\n\t};\n\n\tvar cycleValueInArray = function(results,operands,stepSize) {\n\t\tvar resultsIndex,\n\t\t\tstep = stepSize || 1,\n\t\t\ti = 0,\n\t\t\topLength = operands.length,\n\t\t\tnextOperandIndex;\t\t\n\t\tfor(i; i < opLength; i++) {\n\t\t\tresultsIndex = results.indexOf(operands[i]);\n\t\t\tif(resultsIndex !== -1) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif(resultsIndex !== -1) {\n\t\t\ti = i + step;\n\t\t\tnextOperandIndex = (i < opLength ? i : i - opLength);\n\t\t\tif(operands.length > 1) {\n\t\t\t\tresults.splice(resultsIndex,1,operands[nextOperandIndex]);\n\t\t\t} else {\n\t\t\t\tresults.splice(resultsIndex,1);\n\t\t\t}\n\t\t} else {\n\t\t\tresults.push(operands[0]);\n\t\t}\n\t\treturn results;\t\t\n\t}\n\n\t/*\n\tToggles an item in the current list.\n\t*/\t\n\texports.toggle = function(source,operator) {\n\t\treturn cycleValueInArray(prepare_results(source),operator.operands);\n\t}\n\n\texports.cycle = function(source,operator) {\n\t\tvar results = prepare_results(source),\n\t\t\toperands = (operator.operand.length ? $tw.utils.parseStringArray(operator.operand, \"true\") : [\"\"]),\n\t\t\tstep = $tw.utils.getInt(operator.operands[1]||\"\",1);\n\t\tif(step < 0) {\n\t\t\toperands.reverse();\n\t\t\tstep = Math.abs(step);\n\t\t}\t\n\t\treturn cycleValueInArray(results,operands,step);\n\t}\n\t\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters.js": {
"title": "$:/core/modules/filters.js",
"text": "/*\\\ntitle: $:/core/modules/filters.js\ntype: application/javascript\nmodule-type: wikimethod\n\nAdds tiddler filtering methods to the $tw.Wiki object.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParses an operation (i.e. a run) within a filter string\n\toperators: Array of array of operator nodes into which results should be inserted\n\tfilterString: filter string\n\tp: start position within the string\nReturns the new start position, after the parsed operation\n*/\nfunction parseFilterOperation(operators,filterString,p) {\n\tvar nextBracketPos, operator;\n\t// Skip the starting square bracket\n\tif(filterString.charAt(p++) !== \"[\") {\n\t\tthrow \"Missing [ in filter expression\";\n\t}\n\t// Process each operator in turn\n\tdo {\n\t\toperator = {};\n\t\t// Check for an operator prefix\n\t\tif(filterString.charAt(p) === \"!\") {\n\t\t\toperator.prefix = filterString.charAt(p++);\n\t\t}\n\t\t// Get the operator name\n\t\tnextBracketPos = filterString.substring(p).search(/[\\[\\{<\\/]/);\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing [ in filter expression\";\n\t\t}\n\t\tnextBracketPos += p;\n\t\tvar bracket = filterString.charAt(nextBracketPos);\n\t\toperator.operator = filterString.substring(p,nextBracketPos);\n\t\t// Any suffix?\n\t\tvar colon = operator.operator.indexOf(':');\n\t\tif(colon > -1) {\n\t\t\t// The raw suffix for older filters\n\t\t\toperator.suffix = operator.operator.substring(colon + 1);\n\t\t\toperator.operator = operator.operator.substring(0,colon) || \"field\";\n\t\t\t// The processed suffix for newer filters\n\t\t\toperator.suffixes = [];\n\t\t\t$tw.utils.each(operator.suffix.split(\":\"),function(subsuffix) {\n\t\t\t\toperator.suffixes.push([]);\n\t\t\t\t$tw.utils.each(subsuffix.split(\",\"),function(entry) {\n\t\t\t\t\tentry = $tw.utils.trim(entry);\n\t\t\t\t\tif(entry) {\n\t\t\t\t\t\toperator.suffixes[operator.suffixes.length - 1].push(entry); \n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\t// Empty operator means: title\n\t\telse if(operator.operator === \"\") {\n\t\t\toperator.operator = \"title\";\n\t\t}\n\t\toperator.operands = [];\n\t\tfunction parseOperand(bracketType) {\n\t\t\tvar operand = {};\n\t\t\tswitch (bracketType) {\n\t\t\t\tcase \"{\": // Curly brackets\n\t\t\t\t\toperand.indirect = true;\n\t\t\t\t\tnextBracketPos = filterString.indexOf(\"}\",p);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"[\": // Square brackets\n\t\t\t\t\tnextBracketPos = filterString.indexOf(\"]\",p);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"<\": // Angle brackets\n\t\t\t\t\toperand.variable = true;\n\t\t\t\t\tnextBracketPos = filterString.indexOf(\">\",p);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"/\": // regexp brackets\n\t\t\t\t\tvar rex = /^((?:[^\\\\\\/]*|\\\\.)*)\\/(?:\\(([mygi]+)\\))?/g,\n\t\t\t\t\t\trexMatch = rex.exec(filterString.substring(p));\n\t\t\t\t\tif(rexMatch) {\n\t\t\t\t\t\toperator.regexp = new RegExp(rexMatch[1], rexMatch[2]);\n\t// DEPRECATION WARNING\n\tconsole.log(\"WARNING: Filter\",operator.operator,\"has a deprecated regexp operand\",operator.regexp);\n\t\t\t\t\t\tnextBracketPos = p + rex.lastIndex - 1;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow \"Unterminated regular expression in filter expression\";\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif(nextBracketPos === -1) {\n\t\t\t\tthrow \"Missing closing bracket in filter expression\";\n\t\t\t}\n\t\t\tif(!operator.regexp) {\n\t\t\t\toperand.text = filterString.substring(p,nextBracketPos);\n\t\t\t\toperator.operands.push(operand);\n\t\t\t}\n\t\t\tp = nextBracketPos + 1;\n\t\t}\n\t\t\n\t\tp = nextBracketPos + 1;\n\t\tparseOperand(bracket);\n\t\t\n\t\t// Check for multiple operands\n\t\twhile(filterString.charAt(p) === \",\") {\n\t\t\tp++;\n\t\t\tif(/^[\\[\\{<\\/]/.test(filterString.substring(p))) {\n\t\t\t\tnextBracketPos = p;\n\t\t\t\tp++;\n\t\t\t\tparseOperand(filterString.charAt(nextBracketPos));\n\t\t\t} else {\n\t\t\t\tthrow \"Missing [ in filter expression\";\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Push this operator\n\t\toperators.push(operator);\n\t} while(filterString.charAt(p) !== \"]\");\n\t// Skip the ending square bracket\n\tif(filterString.charAt(p++) !== \"]\") {\n\t\tthrow \"Missing ] in filter expression\";\n\t}\n\t// Return the parsing position\n\treturn p;\n}\n\n/*\nParse a filter string\n*/\nexports.parseFilter = function(filterString) {\n\tfilterString = filterString || \"\";\n\tvar results = [], // Array of arrays of operator nodes {operator:,operand:}\n\t\tp = 0, // Current position in the filter string\n\t\tmatch;\n\tvar whitespaceRegExp = /(\\s+)/mg,\n\t\toperandRegExp = /((?:\\+|\\-|~|=|\\:(\\w+))?)(?:(\\[)|(?:\"([^\"]*)\")|(?:'([^']*)')|([^\\s\\[\\]]+))/mg;\n\twhile(p < filterString.length) {\n\t\t// Skip any whitespace\n\t\twhitespaceRegExp.lastIndex = p;\n\t\tmatch = whitespaceRegExp.exec(filterString);\n\t\tif(match && match.index === p) {\n\t\t\tp = p + match[0].length;\n\t\t}\n\t\t// Match the start of the operation\n\t\tif(p < filterString.length) {\n\t\t\toperandRegExp.lastIndex = p;\n\t\t\tmatch = operandRegExp.exec(filterString);\n\t\t\tif(!match || match.index !== p) {\n\t\t\t\tthrow $tw.language.getString(\"Error/FilterSyntax\");\n\t\t\t}\n\t\t\tvar operation = {\n\t\t\t\tprefix: \"\",\n\t\t\t\toperators: []\n\t\t\t};\n\t\t\tif(match[1]) {\n\t\t\t\toperation.prefix = match[1];\n\t\t\t\tp = p + operation.prefix.length;\n\t\t\t\tif(match[2]) {\n\t\t\t\t\toperation.namedPrefix = match[2];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(match[3]) { // Opening square bracket\n\t\t\t\tp = parseFilterOperation(operation.operators,filterString,p);\n\t\t\t} else {\n\t\t\t\tp = match.index + match[0].length;\n\t\t\t}\n\t\t\tif(match[4] || match[5] || match[6]) { // Double quoted string, single quoted string or unquoted title\n\t\t\t\toperation.operators.push(\n\t\t\t\t\t{operator: \"title\", operands: [{text: match[4] || match[5] || match[6]}]}\n\t\t\t\t);\n\t\t\t}\n\t\t\tresults.push(operation);\n\t\t}\n\t}\n\treturn results;\n};\n\nexports.getFilterOperators = function() {\n\tif(!this.filterOperators) {\n\t\t$tw.Wiki.prototype.filterOperators = {};\n\t\t$tw.modules.applyMethods(\"filteroperator\",this.filterOperators);\n\t}\n\treturn this.filterOperators;\n};\n\nexports.getFilterRunPrefixes = function() {\n\tif(!this.filterRunPrefixes) {\n\t\t$tw.Wiki.prototype.filterRunPrefixes = {};\n\t\t$tw.modules.applyMethods(\"filterrunprefix\",this.filterRunPrefixes);\n\t}\n\treturn this.filterRunPrefixes;\n}\n\nexports.filterTiddlers = function(filterString,widget,source) {\n\tvar fn = this.compileFilter(filterString);\n\treturn fn.call(this,source,widget);\n};\n\n/*\nCompile a filter into a function with the signature fn(source,widget) where:\nsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\nwidget: an optional widget node for retrieving the current tiddler etc.\n*/\nexports.compileFilter = function(filterString) {\n\tvar filterParseTree;\n\ttry {\n\t\tfilterParseTree = this.parseFilter(filterString);\n\t} catch(e) {\n\t\treturn function(source,widget) {\n\t\t\treturn [$tw.language.getString(\"Error/Filter\") + \": \" + e];\n\t\t};\n\t}\n\t// Get the hashmap of filter operator functions\n\tvar filterOperators = this.getFilterOperators();\n\t// Assemble array of functions, one for each operation\n\tvar operationFunctions = [];\n\t// Step through the operations\n\tvar self = this;\n\t$tw.utils.each(filterParseTree,function(operation) {\n\t\t// Create a function for the chain of operators in the operation\n\t\tvar operationSubFunction = function(source,widget) {\n\t\t\tvar accumulator = source,\n\t\t\t\tresults = [],\n\t\t\t\tcurrTiddlerTitle = widget && widget.getVariable(\"currentTiddler\");\n\t\t\t$tw.utils.each(operation.operators,function(operator) {\n\t\t\t\tvar operands = [],\n\t\t\t\t\toperatorFunction;\n\t\t\t\tif(!operator.operator) {\n\t\t\t\t\toperatorFunction = filterOperators.title;\n\t\t\t\t} else if(!filterOperators[operator.operator]) {\n\t\t\t\t\toperatorFunction = filterOperators.field;\n\t\t\t\t} else {\n\t\t\t\t\toperatorFunction = filterOperators[operator.operator];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t$tw.utils.each(operator.operands,function(operand) {\n\t\t\t\t\tif(operand.indirect) {\n\t\t\t\t\t\toperand.value = self.getTextReference(operand.text,\"\",currTiddlerTitle);\n\t\t\t\t\t} else if(operand.variable) {\n\t\t\t\t\t\toperand.value = widget.getVariable(operand.text,{defaultValue: \"\"});\n\t\t\t\t\t} else {\n\t\t\t\t\t\toperand.value = operand.text;\n\t\t\t\t\t}\n\t\t\t\t\toperands.push(operand.value);\n\t\t\t\t});\n\n\t\t\t\t// Invoke the appropriate filteroperator module\n\t\t\t\tresults = operatorFunction(accumulator,{\n\t\t\t\t\t\t\toperator: operator.operator,\n\t\t\t\t\t\t\toperand: operands.length > 0 ? operands[0] : undefined,\n\t\t\t\t\t\t\toperands: operands,\n\t\t\t\t\t\t\tprefix: operator.prefix,\n\t\t\t\t\t\t\tsuffix: operator.suffix,\n\t\t\t\t\t\t\tsuffixes: operator.suffixes,\n\t\t\t\t\t\t\tregexp: operator.regexp\n\t\t\t\t\t\t},{\n\t\t\t\t\t\t\twiki: self,\n\t\t\t\t\t\t\twidget: widget\n\t\t\t\t\t\t});\n\t\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\t\taccumulator = self.makeTiddlerIterator(results);\n\t\t\t\t} else {\n\t\t\t\t\taccumulator = results;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\treturn results;\n\t\t\t} else {\n\t\t\t\tvar resultArray = [];\n\t\t\t\tresults(function(tiddler,title) {\n\t\t\t\t\tresultArray.push(title);\n\t\t\t\t});\n\t\t\t\treturn resultArray;\n\t\t\t}\n\t\t};\n\t\tvar filterRunPrefixes = self.getFilterRunPrefixes();\n\t\t// Wrap the operator functions in a wrapper function that depends on the prefix\n\t\toperationFunctions.push((function() {\n\t\t\tvar options = {wiki: self};\n\t\t\tswitch(operation.prefix || \"\") {\n\t\t\t\tcase \"\": // No prefix means that the operation is unioned into the result\n\t\t\t\t\treturn filterRunPrefixes[\"or\"](operationSubFunction, options);\n\t\t\t\tcase \"=\": // The results of the operation are pushed into the result without deduplication\n\t\t\t\t\treturn filterRunPrefixes[\"all\"](operationSubFunction, options);\n\t\t\t\tcase \"-\": // The results of this operation are removed from the main result\n\t\t\t\t\treturn filterRunPrefixes[\"except\"](operationSubFunction, options);\n\t\t\t\tcase \"+\": // This operation is applied to the main results so far\n\t\t\t\t\treturn filterRunPrefixes[\"and\"](operationSubFunction, options);\n\t\t\t\tcase \"~\": // This operation is unioned into the result only if the main result so far is empty\n\t\t\t\t\treturn filterRunPrefixes[\"else\"](operationSubFunction, options);\n\t\t\t\tdefault: \n\t\t\t\t\tif(operation.namedPrefix && filterRunPrefixes[operation.namedPrefix]) {\n\t\t\t\t\t\treturn filterRunPrefixes[operation.namedPrefix](operationSubFunction, options);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t\tresults.clear();\n\t\t\t\t\t\t\tresults.push($tw.language.getString(\"Error/FilterRunPrefix\"));\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t}\n\t\t})());\n\t});\n\t// Return a function that applies the operations to a source iterator of tiddler titles\n\treturn $tw.perf.measure(\"filter: \" + filterString,function filterFunction(source,widget) {\n\t\tif(!source) {\n\t\t\tsource = self.each;\n\t\t} else if(typeof source === \"object\") { // Array or hashmap\n\t\t\tsource = self.makeTiddlerIterator(source);\n\t\t}\n\t\tvar results = new $tw.utils.LinkedList();\n\t\t$tw.utils.each(operationFunctions,function(operationFunction) {\n\t\t\toperationFunction(results,source,widget);\n\t\t});\n\t\treturn results.toArray();\n\t});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikimethod"
},
"$:/core/modules/indexers/backlinks-indexer.js": {
"title": "$:/core/modules/indexers/backlinks-indexer.js",
"text": "/*\\\ntitle: $:/core/modules/indexers/backlinks-indexer.js\ntype: application/javascript\nmodule-type: indexer\n\nIndexes the tiddlers' backlinks\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global modules: false */\n\"use strict\";\n\n\nfunction BacklinksIndexer(wiki) {\n\tthis.wiki = wiki;\n}\n\nBacklinksIndexer.prototype.init = function() {\n\tthis.index = null;\n}\n\nBacklinksIndexer.prototype.rebuild = function() {\n\tthis.index = null;\n}\n\nBacklinksIndexer.prototype._getLinks = function(tiddler) {\n\tvar parser = this.wiki.parseText(tiddler.fields.type, tiddler.fields.text, {});\n\tif(parser) {\n\t\treturn this.wiki.extractLinks(parser.tree);\n\t}\n\treturn [];\n}\n\nBacklinksIndexer.prototype.update = function(updateDescriptor) {\n\tif(!this.index) {\n\t\treturn;\n\t}\n\tvar newLinks = [],\n\t oldLinks = [],\n\t self = this;\n\tif(updateDescriptor.old.exists) {\n\t\toldLinks = this._getLinks(updateDescriptor.old.tiddler);\n\t}\n\tif(updateDescriptor.new.exists) {\n\t\tnewLinks = this._getLinks(updateDescriptor.new.tiddler);\n\t}\n\n\t$tw.utils.each(oldLinks,function(link) {\n\t\tif(self.index[link]) {\n\t\t\tdelete self.index[link][updateDescriptor.old.tiddler.fields.title];\n\t\t}\n\t});\n\t$tw.utils.each(newLinks,function(link) {\n\t\tif(!self.index[link]) {\n\t\t\tself.index[link] = Object.create(null);\n\t\t}\n\t\tself.index[link][updateDescriptor.new.tiddler.fields.title] = true;\n\t});\n}\n\nBacklinksIndexer.prototype.lookup = function(title) {\n\tif(!this.index) {\n\t\tthis.index = Object.create(null);\n\t\tvar self = this;\n\t\tthis.wiki.forEachTiddler(function(title,tiddler) {\n\t\t\tvar links = self._getLinks(tiddler);\n\t\t\t$tw.utils.each(links, function(link) {\n\t\t\t\tif(!self.index[link]) {\n\t\t\t\t\tself.index[link] = Object.create(null);\n\t\t\t\t}\n\t\t\t\tself.index[link][title] = true;\n\t\t\t});\n\t\t});\n\t}\n\tif(this.index[title]) {\n\t\treturn Object.keys(this.index[title]);\n\t} else {\n\t\treturn [];\n\t}\n}\n\nexports.BacklinksIndexer = BacklinksIndexer;\n\n})();\n",
"type": "application/javascript",
"module-type": "indexer"
},
"$:/core/modules/indexers/field-indexer.js": {
"title": "$:/core/modules/indexers/field-indexer.js",
"text": "/*\\\ntitle: $:/core/modules/indexers/field-indexer.js\ntype: application/javascript\nmodule-type: indexer\n\nIndexes the tiddlers with each field value\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global modules: false */\n\"use strict\";\n\nvar DEFAULT_MAXIMUM_INDEXED_VALUE_LENGTH = 128;\n\nfunction FieldIndexer(wiki) {\n\tthis.wiki = wiki;\n}\n\nFieldIndexer.prototype.init = function() {\n\tthis.index = null;\n\tthis.maxIndexedValueLength = DEFAULT_MAXIMUM_INDEXED_VALUE_LENGTH;\n\tthis.addIndexMethods();\n}\n\n// Provided for testing\nFieldIndexer.prototype.setMaxIndexedValueLength = function(length) {\n\tthis.index = null;\n\tthis.maxIndexedValueLength = length;\n};\n\nFieldIndexer.prototype.addIndexMethods = function() {\n\tvar self = this;\n\tthis.wiki.each.byField = function(name,value) {\n\t\tvar titles = self.wiki.allTitles(),\n\t\t\tlookup = self.lookup(name,value);\n\t\treturn lookup && lookup.filter(function(title) {\n\t\t\treturn titles.indexOf(title) !== -1;\n\t\t});\n\t};\n\tthis.wiki.eachShadow.byField = function(name,value) {\n\t\tvar titles = self.wiki.allShadowTitles(),\n\t\t\tlookup = self.lookup(name,value);\n\t\treturn lookup && lookup.filter(function(title) {\n\t\t\treturn titles.indexOf(title) !== -1;\n\t\t});\n\t};\n\tthis.wiki.eachTiddlerPlusShadows.byField = function(name,value) {\n\t\tvar lookup = self.lookup(name,value);\n\t\treturn lookup ? lookup.slice(0) : null;\n\t};\n\tthis.wiki.eachShadowPlusTiddlers.byField = function(name,value) {\n\t\tvar lookup = self.lookup(name,value);\n\t\treturn lookup ? lookup.slice(0) : null;\n\t};\n};\n\n/*\nTear down and then rebuild the index as if all tiddlers have changed\n*/\nFieldIndexer.prototype.rebuild = function() {\n\t// Invalidate the index so that it will be rebuilt when it is next used\n\tthis.index = null;\n};\n\n/*\nBuild the index for a particular field\n*/\nFieldIndexer.prototype.buildIndexForField = function(name) {\n\tvar self = this;\n\t// Hashmap by field name of hashmap by field value of array of tiddler titles\n\tthis.index = this.index || Object.create(null);\n\tthis.index[name] = Object.create(null);\n\tvar baseIndex = this.index[name];\n\t// Update the index for each tiddler\n\tthis.wiki.eachTiddlerPlusShadows(function(tiddler,title) {\n\t\tif(name in tiddler.fields) {\n\t\t\tvar value = tiddler.getFieldString(name);\n\t\t\t// Skip any values above the maximum length\n\t\t\tif(value.length < self.maxIndexedValueLength) {\n\t\t\t\tbaseIndex[value] = baseIndex[value] || [];\n\t\t\t\tbaseIndex[value].push(title);\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nUpdate the index in the light of a tiddler value changing; note that the title must be identical. (Renames are handled as a separate delete and create)\nupdateDescriptor: {old: {tiddler: <tiddler>, shadow: <boolean>, exists: <boolean>},new: {tiddler: <tiddler>, shadow: <boolean>, exists: <boolean>}}\n*/\nFieldIndexer.prototype.update = function(updateDescriptor) {\n\tvar self = this;\n\t// Don't do anything if the index hasn't been built yet\n\tif(this.index === null) {\n\t\treturn;\n\t}\n\t// Remove the old tiddler from the index\n\tif(updateDescriptor.old.tiddler) {\n\t\t$tw.utils.each(this.index,function(indexEntry,name) {\n\t\t\tif(name in updateDescriptor.old.tiddler.fields) {\n\t\t\t\tvar value = updateDescriptor.old.tiddler.getFieldString(name),\n\t\t\t\t\ttiddlerList = indexEntry[value];\n\t\t\t\tif(tiddlerList) {\n\t\t\t\t\tvar index = tiddlerList.indexOf(updateDescriptor.old.tiddler.fields.title);\n\t\t\t\t\tif(index !== -1) {\n\t\t\t\t\t\ttiddlerList.splice(index,1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t// Add the new tiddler to the index\n\tif(updateDescriptor[\"new\"].tiddler) {\n\t\t$tw.utils.each(this.index,function(indexEntry,name) {\n\t\t\tif(name in updateDescriptor[\"new\"].tiddler.fields) {\n\t\t\t\tvar value = updateDescriptor[\"new\"].tiddler.getFieldString(name);\n\t\t\t\tif(value.length < self.maxIndexedValueLength) {\n\t\t\t\t\tindexEntry[value] = indexEntry[value] || [];\n\t\t\t\t\tindexEntry[value].push(updateDescriptor[\"new\"].tiddler.fields.title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\t\t\n\t}\n};\n\n// Lookup the given field returning a list of tiddler titles\nFieldIndexer.prototype.lookup = function(name,value) {\n\t// Fail the lookup if the value is too long\n\tif(value.length >= this.maxIndexedValueLength) {\n\t\treturn null;\n\t}\n\t// Update the index if it has yet to be built\n\tif(this.index === null || !this.index[name]) {\n\t\tthis.buildIndexForField(name);\n\t}\n\treturn this.index[name][value] || [];\n};\n\nexports.FieldIndexer = FieldIndexer;\n\n})();\n",
"type": "application/javascript",
"module-type": "indexer"
},
"$:/core/modules/indexers/tag-indexer.js": {
"title": "$:/core/modules/indexers/tag-indexer.js",
"text": "/*\\\ntitle: $:/core/modules/indexers/tag-indexer.js\ntype: application/javascript\nmodule-type: indexer\n\nIndexes the tiddlers with each tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global modules: false */\n\"use strict\";\n\nfunction TagIndexer(wiki) {\n\tthis.wiki = wiki;\n}\n\nTagIndexer.prototype.init = function() {\n\tthis.subIndexers = [\n\t\tnew TagSubIndexer(this,\"each\"),\n\t\tnew TagSubIndexer(this,\"eachShadow\"),\n\t\tnew TagSubIndexer(this,\"eachTiddlerPlusShadows\"),\n\t\tnew TagSubIndexer(this,\"eachShadowPlusTiddlers\")\n\t];\n\t$tw.utils.each(this.subIndexers,function(subIndexer) {\n\t\tsubIndexer.addIndexMethod();\n\t});\n};\n\nTagIndexer.prototype.rebuild = function() {\n\t$tw.utils.each(this.subIndexers,function(subIndexer) {\n\t\tsubIndexer.rebuild();\n\t});\n};\n\nTagIndexer.prototype.update = function(updateDescriptor) {\n\t$tw.utils.each(this.subIndexers,function(subIndexer) {\n\t\tsubIndexer.update(updateDescriptor);\n\t});\n};\n\nfunction TagSubIndexer(indexer,iteratorMethod) {\n\tthis.indexer = indexer;\n\tthis.iteratorMethod = iteratorMethod;\n\tthis.index = null; // Hashmap of tag title to {isSorted: bool, titles: [array]} or null if not yet initialised\n}\n\nTagSubIndexer.prototype.addIndexMethod = function() {\n\tvar self = this;\n\tthis.indexer.wiki[this.iteratorMethod].byTag = function(tag) {\n\t\treturn self.lookup(tag).slice(0);\n\t};\n};\n\nTagSubIndexer.prototype.rebuild = function() {\n\tvar self = this;\n\t// Hashmap by tag of array of {isSorted:, titles:[]}\n\tthis.index = Object.create(null);\n\t// Add all the tags\n\tthis.indexer.wiki[this.iteratorMethod](function(tiddler,title) {\n\t\t$tw.utils.each(tiddler.fields.tags,function(tag) {\n\t\t\tif(!self.index[tag]) {\n\t\t\t\tself.index[tag] = {isSorted: false, titles: [title]};\n\t\t\t} else {\n\t\t\t\tself.index[tag].titles.push(title);\n\t\t\t}\n\t\t});\t\t\n\t});\n};\n\nTagSubIndexer.prototype.update = function(updateDescriptor) {\n\tthis.index = null;\n};\n\nTagSubIndexer.prototype.lookup = function(tag) {\n\t// Update the index if it has yet to be built\n\tif(this.index === null) {\n\t\tthis.rebuild();\n\t}\n\tvar indexRecord = this.index[tag];\n\tif(indexRecord) {\n\t\tif(!indexRecord.isSorted) {\n\t\t\tif(this.indexer.wiki.sortByList) {\n\t\t\t\tindexRecord.titles = this.indexer.wiki.sortByList(indexRecord.titles,tag);\n\t\t\t}\t\t\t\n\t\t\tindexRecord.isSorted = true;\n\t\t}\n\t\treturn indexRecord.titles;\n\t} else {\n\t\treturn [];\n\t}\n};\n\n\nexports.TagIndexer = TagIndexer;\n\n})();\n",
"type": "application/javascript",
"module-type": "indexer"
},
"$:/core/modules/info/platform.js": {
"title": "$:/core/modules/info/platform.js",
"text": "/*\\\ntitle: $:/core/modules/info/platform.js\ntype: application/javascript\nmodule-type: info\n\nInitialise basic platform $:/info/ tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.getInfoTiddlerFields = function(updateInfoTiddlersCallback) {\n\tvar mapBoolean = function(value) {return value ? \"yes\" : \"no\";},\n\t\tinfoTiddlerFields = [];\n\t// Basics\n\tinfoTiddlerFields.push({title: \"$:/info/browser\", text: mapBoolean(!!$tw.browser)});\n\tinfoTiddlerFields.push({title: \"$:/info/node\", text: mapBoolean(!!$tw.node)});\n\tinfoTiddlerFields.push({title: \"$:/info/startup-timestamp\", text: $tw.utils.stringifyDate(new Date())});\n\tif($tw.browser) {\n\t\t// Document location\n\t\tvar setLocationProperty = function(name,value) {\n\t\t\t\tinfoTiddlerFields.push({title: \"$:/info/url/\" + name, text: value});\t\t\t\n\t\t\t},\n\t\t\tlocation = document.location;\n\t\tsetLocationProperty(\"full\", (location.toString()).split(\"#\")[0]);\n\t\tsetLocationProperty(\"host\", location.host);\n\t\tsetLocationProperty(\"hostname\", location.hostname);\n\t\tsetLocationProperty(\"protocol\", location.protocol);\n\t\tsetLocationProperty(\"port\", location.port);\n\t\tsetLocationProperty(\"pathname\", location.pathname);\n\t\tsetLocationProperty(\"search\", location.search);\n\t\tsetLocationProperty(\"origin\", location.origin);\n\t\t// Screen size\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/screen/width\", text: window.screen.width.toString()});\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/screen/height\", text: window.screen.height.toString()});\n \t\t// Dark mode through event listener on MediaQueryList\n \t\tvar mqList = window.matchMedia(\"(prefers-color-scheme: dark)\"),\n \t\t\tgetDarkModeTiddler = function() {return {title: \"$:/info/darkmode\", text: mqList.matches ? \"yes\" : \"no\"};};\n \t\tinfoTiddlerFields.push(getDarkModeTiddler());\n \t\tmqList.addListener(function(event) {\n \t\t\tupdateInfoTiddlersCallback([getDarkModeTiddler()]);\n \t\t});\n\t\t// Language\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/language\", text: navigator.language || \"\"});\n\t}\n\treturn infoTiddlerFields;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "info"
},
"$:/core/modules/keyboard.js": {
"title": "$:/core/modules/keyboard.js",
"text": "/*\\\ntitle: $:/core/modules/keyboard.js\ntype: application/javascript\nmodule-type: global\n\nKeyboard handling utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar namedKeys = {\n\t\"cancel\": 3,\n\t\"help\": 6,\n\t\"backspace\": 8,\n\t\"tab\": 9,\n\t\"clear\": 12,\n\t\"return\": 13,\n\t\"enter\": 13,\n\t\"pause\": 19,\n\t\"escape\": 27,\n\t\"space\": 32,\n\t\"page_up\": 33,\n\t\"page_down\": 34,\n\t\"end\": 35,\n\t\"home\": 36,\n\t\"left\": 37,\n\t\"up\": 38,\n\t\"right\": 39,\n\t\"down\": 40,\n\t\"printscreen\": 44,\n\t\"insert\": 45,\n\t\"delete\": 46,\n\t\"0\": 48,\n\t\"1\": 49,\n\t\"2\": 50,\n\t\"3\": 51,\n\t\"4\": 52,\n\t\"5\": 53,\n\t\"6\": 54,\n\t\"7\": 55,\n\t\"8\": 56,\n\t\"9\": 57,\n\t\"firefoxsemicolon\": 59,\n\t\"firefoxequals\": 61,\n\t\"a\": 65,\n\t\"b\": 66,\n\t\"c\": 67,\n\t\"d\": 68,\n\t\"e\": 69,\n\t\"f\": 70,\n\t\"g\": 71,\n\t\"h\": 72,\n\t\"i\": 73,\n\t\"j\": 74,\n\t\"k\": 75,\n\t\"l\": 76,\n\t\"m\": 77,\n\t\"n\": 78,\n\t\"o\": 79,\n\t\"p\": 80,\n\t\"q\": 81,\n\t\"r\": 82,\n\t\"s\": 83,\n\t\"t\": 84,\n\t\"u\": 85,\n\t\"v\": 86,\n\t\"w\": 87,\n\t\"x\": 88,\n\t\"y\": 89,\n\t\"z\": 90,\n\t\"numpad0\": 96,\n\t\"numpad1\": 97,\n\t\"numpad2\": 98,\n\t\"numpad3\": 99,\n\t\"numpad4\": 100,\n\t\"numpad5\": 101,\n\t\"numpad6\": 102,\n\t\"numpad7\": 103,\n\t\"numpad8\": 104,\n\t\"numpad9\": 105,\n\t\"multiply\": 106,\n\t\"add\": 107,\n\t\"separator\": 108,\n\t\"subtract\": 109,\n\t\"decimal\": 110,\n\t\"divide\": 111,\n\t\"f1\": 112,\n\t\"f2\": 113,\n\t\"f3\": 114,\n\t\"f4\": 115,\n\t\"f5\": 116,\n\t\"f6\": 117,\n\t\"f7\": 118,\n\t\"f8\": 119,\n\t\"f9\": 120,\n\t\"f10\": 121,\n\t\"f11\": 122,\n\t\"f12\": 123,\n\t\"f13\": 124,\n\t\"f14\": 125,\n\t\"f15\": 126,\n\t\"f16\": 127,\n\t\"f17\": 128,\n\t\"f18\": 129,\n\t\"f19\": 130,\n\t\"f20\": 131,\n\t\"f21\": 132,\n\t\"f22\": 133,\n\t\"f23\": 134,\n\t\"f24\": 135,\n\t\"firefoxminus\": 173,\n\t\"semicolon\": 186,\n\t\"equals\": 187,\n\t\"comma\": 188,\n\t\"dash\": 189,\n\t\"period\": 190,\n\t\"slash\": 191,\n\t\"backquote\": 192,\n\t\"openbracket\": 219,\n\t\"backslash\": 220,\n\t\"closebracket\": 221,\n\t\"quote\": 222\n};\n\nfunction KeyboardManager(options) {\n\tvar self = this;\n\toptions = options || \"\";\n\t// Save the named key hashmap\n\tthis.namedKeys = namedKeys;\n\t// Create a reverse mapping of code to keyname\n\tthis.keyNames = [];\n\t$tw.utils.each(namedKeys,function(keyCode,name) {\n\t\tself.keyNames[keyCode] = name.substr(0,1).toUpperCase() + name.substr(1);\n\t});\n\t// Save the platform-specific name of the \"meta\" key\n\tthis.metaKeyName = $tw.platform.isMac ? \"cmd-\" : \"win-\";\n\tthis.shortcutKeysList = [], // Stores the shortcut-key descriptors\n\tthis.shortcutActionList = [], // Stores the corresponding action strings\n\tthis.shortcutParsedList = []; // Stores the parsed key descriptors\n\tthis.lookupNames = [\"shortcuts\"];\n\tthis.lookupNames.push($tw.platform.isMac ? \"shortcuts-mac\" : \"shortcuts-not-mac\")\n\tthis.lookupNames.push($tw.platform.isWindows ? \"shortcuts-windows\" : \"shortcuts-not-windows\");\n\tthis.lookupNames.push($tw.platform.isLinux ? \"shortcuts-linux\" : \"shortcuts-not-linux\");\n\tthis.updateShortcutLists(this.getShortcutTiddlerList());\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tself.handleShortcutChanges(changes);\n\t});\n}\n\n/*\nReturn an array of keycodes for the modifier keys ctrl, shift, alt, meta\n*/\nKeyboardManager.prototype.getModifierKeys = function() {\n\treturn [\n\t\t16, // Shift\n\t\t17, // Ctrl\n\t\t18, // Alt\n\t\t20, // CAPS LOCK\n\t\t91, // Meta (left)\n\t\t93, // Meta (right)\n\t\t224 // Meta (Firefox)\n\t]\n};\n\n/*\nParses a key descriptor into the structure:\n{\n\tkeyCode: numeric keycode\n\tshiftKey: boolean\n\taltKey: boolean\n\tctrlKey: boolean\n\tmetaKey: boolean\n}\nKey descriptors have the following format:\n\tctrl+enter\n\tctrl+shift+alt+A\n*/\nKeyboardManager.prototype.parseKeyDescriptor = function(keyDescriptor) {\n\tvar components = keyDescriptor.split(/\\+|\\-/),\n\t\tinfo = {\n\t\t\tkeyCode: 0,\n\t\t\tshiftKey: false,\n\t\t\taltKey: false,\n\t\t\tctrlKey: false,\n\t\t\tmetaKey: false\n\t\t};\n\tfor(var t=0; t<components.length; t++) {\n\t\tvar s = components[t].toLowerCase(),\n\t\t\tc = s.charCodeAt(0);\n\t\t// Look for modifier keys\n\t\tif(s === \"ctrl\") {\n\t\t\tinfo.ctrlKey = true;\n\t\t} else if(s === \"shift\") {\n\t\t\tinfo.shiftKey = true;\n\t\t} else if(s === \"alt\") {\n\t\t\tinfo.altKey = true;\n\t\t} else if(s === \"meta\" || s === \"cmd\" || s === \"win\") {\n\t\t\tinfo.metaKey = true;\n\t\t}\n\t\t// Replace named keys with their code\n\t\tif(this.namedKeys[s]) {\n\t\t\tinfo.keyCode = this.namedKeys[s];\n\t\t}\n\t}\n\tif(info.keyCode) {\n\t\treturn info;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nParse a list of key descriptors into an array of keyInfo objects. The key descriptors can be passed as an array of strings or a space separated string\n*/\nKeyboardManager.prototype.parseKeyDescriptors = function(keyDescriptors,options) {\n\tvar self = this;\n\toptions = options || {};\n\toptions.stack = options.stack || [];\n\tvar wiki = options.wiki || $tw.wiki;\n\tif(typeof keyDescriptors === \"string\" && keyDescriptors === \"\") {\n\t\treturn [];\n\t}\n\tif(!$tw.utils.isArray(keyDescriptors)) {\n\t\tkeyDescriptors = keyDescriptors.split(\" \");\n\t}\n\tvar result = [];\n\t$tw.utils.each(keyDescriptors,function(keyDescriptor) {\n\t\t// Look for a named shortcut\n\t\tif(keyDescriptor.substr(0,2) === \"((\" && keyDescriptor.substr(-2,2) === \"))\") {\n\t\t\tif(options.stack.indexOf(keyDescriptor) === -1) {\n\t\t\t\toptions.stack.push(keyDescriptor);\n\t\t\t\tvar name = keyDescriptor.substring(2,keyDescriptor.length - 2),\n\t\t\t\t\tlookupName = function(configName) {\n\t\t\t\t\t\tvar keyDescriptors = wiki.getTiddlerText(\"$:/config/\" + configName + \"/\" + name);\n\t\t\t\t\t\tif(keyDescriptors) {\n\t\t\t\t\t\t\tresult.push.apply(result,self.parseKeyDescriptors(keyDescriptors,options));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t$tw.utils.each(self.lookupNames,function(platformDescriptor) {\n\t\t\t\t\tlookupName(platformDescriptor);\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tresult.push(self.parseKeyDescriptor(keyDescriptor));\n\t\t}\n\t});\n\treturn result;\n};\n\nKeyboardManager.prototype.getPrintableShortcuts = function(keyInfoArray) {\n\tvar self = this,\n\t\tresult = [];\n\t$tw.utils.each(keyInfoArray,function(keyInfo) {\n\t\tif(keyInfo) {\n\t\t\tresult.push((keyInfo.ctrlKey ? \"ctrl-\" : \"\") + \n\t\t\t\t (keyInfo.shiftKey ? \"shift-\" : \"\") + \n\t\t\t\t (keyInfo.altKey ? \"alt-\" : \"\") + \n\t\t\t\t (keyInfo.metaKey ? self.metaKeyName : \"\") + \n\t\t\t\t (self.keyNames[keyInfo.keyCode]));\n\t\t}\n\t});\n\treturn result;\n}\n\nKeyboardManager.prototype.checkKeyDescriptor = function(event,keyInfo) {\n\treturn keyInfo &&\n\t\t\tevent.keyCode === keyInfo.keyCode && \n\t\t\tevent.shiftKey === keyInfo.shiftKey && \n\t\t\tevent.altKey === keyInfo.altKey && \n\t\t\tevent.ctrlKey === keyInfo.ctrlKey && \n\t\t\tevent.metaKey === keyInfo.metaKey;\n};\n\nKeyboardManager.prototype.checkKeyDescriptors = function(event,keyInfoArray) {\n\tfor(var t=0; t<keyInfoArray.length; t++) {\n\t\tif(this.checkKeyDescriptor(event,keyInfoArray[t])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\nKeyboardManager.prototype.getEventModifierKeyDescriptor = function(event) {\n\treturn event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey ? \"ctrl\" : \n\t\tevent.shiftKey && !event.ctrlKey && !event.altKey && !event.metaKey ? \"shift\" : \n\t\tevent.ctrlKey && event.shiftKey && !event.altKey && !event.metaKey ? \"ctrl-shift\" : \n\t\tevent.altKey && !event.shiftKey && !event.ctrlKey && !event.metaKey ? \"alt\" : \n\t\tevent.altKey && event.shiftKey && !event.ctrlKey && !event.metaKey ? \"alt-shift\" : \n\t\tevent.altKey && event.ctrlKey && !event.shiftKey && !event.metaKey ? \"ctrl-alt\" : \n\t\tevent.altKey && event.shiftKey && event.ctrlKey && !event.metaKey ? \"ctrl-alt-shift\" : \n\t\tevent.metaKey && !event.ctrlKey && !event.shiftKey && !event.altKey ? \"meta\" : \n\t\tevent.metaKey && event.ctrlKey && !event.shiftKey && !event.altKey ? \"meta-ctrl\" :\n\t\tevent.metaKey && event.ctrlKey && event.shiftKey && !event.altKey ? \"meta-ctrl-shift\" :\n\t\tevent.metaKey && event.ctrlKey & event.shiftKey && event.altKey ? \"meta-ctrl-alt-shift\" : \"normal\";\n};\n\nKeyboardManager.prototype.getShortcutTiddlerList = function() {\n\treturn $tw.wiki.getTiddlersWithTag(\"$:/tags/KeyboardShortcut\");\n};\n\nKeyboardManager.prototype.updateShortcutLists = function(tiddlerList) {\n\tthis.shortcutTiddlers = tiddlerList;\n\tfor(var i=0; i<tiddlerList.length; i++) {\n\t\tvar title = tiddlerList[i],\n\t\t\ttiddlerFields = $tw.wiki.getTiddler(title).fields;\n\t\tthis.shortcutKeysList[i] = tiddlerFields.key !== undefined ? tiddlerFields.key : undefined;\n\t\tthis.shortcutActionList[i] = tiddlerFields.text;\n\t\tthis.shortcutParsedList[i] = this.shortcutKeysList[i] !== undefined ? this.parseKeyDescriptors(this.shortcutKeysList[i]) : undefined;\n\t}\n};\n\nKeyboardManager.prototype.handleKeydownEvent = function(event) {\n\tvar key, action;\n\tfor(var i=0; i<this.shortcutTiddlers.length; i++) {\n\t\tif(this.shortcutParsedList[i] !== undefined && this.checkKeyDescriptors(event,this.shortcutParsedList[i])) {\n\t\t\tkey = this.shortcutParsedList[i];\n\t\t\taction = this.shortcutActionList[i];\n\t\t}\n\t}\n\tif(key !== undefined) {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\t$tw.rootWidget.invokeActionString(action,$tw.rootWidget);\n\t\treturn true;\n\t}\n\treturn false;\n};\n\nKeyboardManager.prototype.detectNewShortcuts = function(changedTiddlers) {\n\tvar shortcutConfigTiddlers = [],\n\t\thandled = false;\n\t$tw.utils.each(this.lookupNames,function(platformDescriptor) {\n\t\tvar descriptorString = \"$:/config/\" + platformDescriptor + \"/\";\n\t\tObject.keys(changedTiddlers).forEach(function(configTiddler) {\n\t\t\tvar configString = configTiddler.substr(0, configTiddler.lastIndexOf(\"/\") + 1);\n\t\t\tif(configString === descriptorString) {\n\t\t\t\tshortcutConfigTiddlers.push(configTiddler);\n\t\t\t\thandled = true;\n\t\t\t}\n\t\t});\n\t});\n\tif(handled) {\n\t\treturn $tw.utils.hopArray(changedTiddlers,shortcutConfigTiddlers);\n\t} else {\n\t\treturn false;\n\t}\n};\n\nKeyboardManager.prototype.handleShortcutChanges = function(changedTiddlers) {\n\tvar newList = this.getShortcutTiddlerList();\n\tvar hasChanged = $tw.utils.hopArray(changedTiddlers,this.shortcutTiddlers) ? true :\n\t\t($tw.utils.hopArray(changedTiddlers,newList) ? true :\n\t\t(this.detectNewShortcuts(changedTiddlers))\n\t);\n\t// Re-cache shortcuts if something changed\n\tif(hasChanged) {\n\t\tthis.updateShortcutLists(newList);\n\t}\n};\n\nexports.KeyboardManager = KeyboardManager;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/language.js": {
"title": "$:/core/modules/language.js",
"text": "/*\\\ntitle: $:/core/modules/language.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Language() manages translateable strings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate an instance of the language manager. Options include:\nwiki: wiki from which to retrieve translation tiddlers\n*/\nfunction Language(options) {\n\toptions = options || \"\";\n\tthis.wiki = options.wiki || $tw.wiki;\n}\n\n/*\nReturn a wikified translateable string. The title is automatically prefixed with \"$:/language/\"\nOptions include:\nvariables: optional hashmap of variables to supply to the language wikification\n*/\nLanguage.prototype.getString = function(title,options) {\n\toptions = options || {};\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.renderTiddler(\"text/plain\",title,{variables: options.variables});\n};\n\n/*\nReturn a raw, unwikified translateable string. The title is automatically prefixed with \"$:/language/\"\n*/\nLanguage.prototype.getRawString = function(title) {\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.getTiddlerText(title);\n};\n\nexports.Language = Language;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/macros/changecount.js": {
"title": "$:/core/modules/macros/changecount.js",
"text": "/*\\\ntitle: $:/core/modules/macros/changecount.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the changecount for the current tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"changecount\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn this.wiki.getChangeCount(this.getVariable(\"currentTiddler\")) + \"\";\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/contrastcolour.js": {
"title": "$:/core/modules/macros/contrastcolour.js",
"text": "/*\\\ntitle: $:/core/modules/macros/contrastcolour.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to choose which of two colours has the highest contrast with a base colour\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"contrastcolour\";\n\nexports.params = [\n\t{name: \"target\"},\n\t{name: \"fallbackTarget\"},\n\t{name: \"colourA\"},\n\t{name: \"colourB\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(target,fallbackTarget,colourA,colourB) {\n\tvar rgbTarget = $tw.utils.parseCSSColor(target) || $tw.utils.parseCSSColor(fallbackTarget);\n\tif(!rgbTarget) {\n\t\treturn colourA;\n\t}\n\tvar rgbColourA = $tw.utils.parseCSSColor(colourA),\n\t\trgbColourB = $tw.utils.parseCSSColor(colourB);\n\tif(rgbColourA && !rgbColourB) {\n\t\treturn rgbColourA;\n\t}\n\tif(rgbColourB && !rgbColourA) {\n\t\treturn rgbColourB;\n\t}\n\tif(!rgbColourA && !rgbColourB) {\n\t\t// If neither colour is readable, return a crude inverse of the target\n\t\treturn [255 - rgbTarget[0],255 - rgbTarget[1],255 - rgbTarget[2],rgbTarget[3]];\n\t}\n\t// Colour brightness formula derived from http://www.w3.org/WAI/ER/WD-AERT/#color-contrast\n\tvar brightnessTarget = rgbTarget[0] * 0.299 + rgbTarget[1] * 0.587 + rgbTarget[2] * 0.114,\n\t\tbrightnessA = rgbColourA[0] * 0.299 + rgbColourA[1] * 0.587 + rgbColourA[2] * 0.114,\n\t\tbrightnessB = rgbColourB[0] * 0.299 + rgbColourB[1] * 0.587 + rgbColourB[2] * 0.114;\n\treturn Math.abs(brightnessTarget - brightnessA) > Math.abs(brightnessTarget - brightnessB) ? colourA : colourB;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/csvtiddlers.js": {
"title": "$:/core/modules/macros/csvtiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/macros/csvtiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to CSV\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"csvtiddlers\";\n\nexports.params = [\n\t{name: \"filter\"},\n\t{name: \"format\"},\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter,format) {\n\tvar self = this,\n\t\ttiddlers = this.wiki.filterTiddlers(filter),\n\t\ttiddler,\n\t\tfields = [],\n\t\tt,f;\n\t// Collect all the fields\n\tfor(t=0;t<tiddlers.length; t++) {\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\tfor(f in tiddler.fields) {\n\t\t\tif(fields.indexOf(f) === -1) {\n\t\t\t\tfields.push(f);\n\t\t\t}\n\t\t}\n\t}\n\t// Sort the fields and bring the standard ones to the front\n\tfields.sort();\n\t\"title text modified modifier created creator\".split(\" \").reverse().forEach(function(value,index) {\n\t\tvar p = fields.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tfields.splice(p,1);\n\t\t\tfields.unshift(value)\n\t\t}\n\t});\n\t// Output the column headings\n\tvar output = [], row = [];\n\tfields.forEach(function(value) {\n\t\trow.push(quoteAndEscape(value))\n\t});\n\toutput.push(row.join(\",\"));\n\t// Output each tiddler\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\trow = [];\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\t\tfor(f=0; f<fields.length; f++) {\n\t\t\t\trow.push(quoteAndEscape(tiddler ? tiddler.getFieldString(fields[f]) || \"\" : \"\"));\n\t\t\t}\n\t\toutput.push(row.join(\",\"));\n\t}\n\treturn output.join(\"\\n\");\n};\n\nfunction quoteAndEscape(value) {\n\treturn \"\\\"\" + value.replace(/\"/mg,\"\\\"\\\"\") + \"\\\"\";\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/displayshortcuts.js": {
"title": "$:/core/modules/macros/displayshortcuts.js",
"text": "/*\\\ntitle: $:/core/modules/macros/displayshortcuts.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to display a list of keyboard shortcuts in human readable form. Notably, it resolves named shortcuts like `((bold))` to the underlying keystrokes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"displayshortcuts\";\n\nexports.params = [\n\t{name: \"shortcuts\"},\n\t{name: \"prefix\"},\n\t{name: \"separator\"},\n\t{name: \"suffix\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(shortcuts,prefix,separator,suffix) {\n\tvar shortcutArray = $tw.keyboardManager.getPrintableShortcuts($tw.keyboardManager.parseKeyDescriptors(shortcuts,{\n\t\twiki: this.wiki\n\t}));\n\tif(shortcutArray.length > 0) {\n\t\tshortcutArray.sort(function(a,b) {\n\t\t return a.toLowerCase().localeCompare(b.toLowerCase());\n\t\t})\n\t\treturn prefix + shortcutArray.join(separator) + suffix;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/jsontiddler.js": {
"title": "$:/core/modules/macros/jsontiddler.js",
"text": "/*\\\ntitle: $:/core/modules/macros/jsontiddler.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output a single tiddler to JSON\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"jsontiddler\";\n\nexports.params = [\n\t{name: \"title\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(title) {\n\ttitle = title || this.getVariable(\"currentTiddler\");\n\tvar tiddler = !!title && this.wiki.getTiddler(title),\n\t\tfields = new Object();\n\tif(tiddler) {\n\t\tfor(var field in tiddler.fields) {\n\t\t\tfields[field] = tiddler.getFieldString(field);\n\t\t}\n\t}\n\treturn JSON.stringify(fields,null,$tw.config.preferences.jsonSpaces);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/jsontiddlers.js": {
"title": "$:/core/modules/macros/jsontiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/macros/jsontiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to JSON\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"jsontiddlers\";\n\nexports.params = [\n\t{name: \"filter\"},\n\t{name: \"spaces\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter,spaces) {\n\treturn this.wiki.getTiddlersAsJson(filter,$tw.utils.parseInt(spaces));\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/makedatauri.js": {
"title": "$:/core/modules/macros/makedatauri.js",
"text": "/*\\\ntitle: $:/core/modules/macros/makedatauri.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to convert a string of text to a data URI\n\n<<makedatauri text:\"Text to be converted\" type:\"text/vnd.tiddlywiki\">>\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"makedatauri\";\n\nexports.params = [\n\t{name: \"text\"},\n\t{name: \"type\"},\n\t{name: \"_canonical_uri\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(text,type,_canonical_uri) {\n\treturn $tw.utils.makeDataUri(text,type,_canonical_uri);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/now.js": {
"title": "$:/core/modules/macros/now.js",
"text": "/*\\\ntitle: $:/core/modules/macros/now.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return a formatted version of the current time\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"now\";\n\nexports.params = [\n\t{name: \"format\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(format) {\n\treturn $tw.utils.formatDateString(new Date(),format || \"0hh:0mm, DDth MMM YYYY\");\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/qualify.js": {
"title": "$:/core/modules/macros/qualify.js",
"text": "/*\\\ntitle: $:/core/modules/macros/qualify.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to qualify a state tiddler title according\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"qualify\";\n\nexports.params = [\n\t{name: \"title\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(title) {\n\treturn title + \"-\" + this.getStateQualifier();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/resolvepath.js": {
"title": "$:/core/modules/macros/resolvepath.js",
"text": "/*\\\ntitle: $:/core/modules/macros/resolvepath.js\ntype: application/javascript\nmodule-type: macro\n\nResolves a relative path for an absolute rootpath.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"resolvepath\";\n\nexports.params = [\n\t{name: \"source\"},\n\t{name: \"root\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(source, root) {\n\treturn $tw.utils.resolvePath(source, root);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/unusedtitle.js": {
"title": "$:/core/modules/macros/unusedtitle.js",
"text": "/*\\\ntitle: $:/core/modules/macros/unusedtitle.js\ntype: application/javascript\nmodule-type: macro\nMacro to return a new title that is unused in the wiki. It can be given a name as a base.\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"unusedtitle\";\n\nexports.params = [\n\t{name: \"baseName\"},\n\t{name: \"options\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(baseName, options) {\n\tif(!baseName) {\n\t\tbaseName = $tw.language.getString(\"DefaultNewTiddlerTitle\");\n\t}\n\treturn this.wiki.generateNewTitle(baseName, options);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/version.js": {
"title": "$:/core/modules/macros/version.js",
"text": "/*\\\ntitle: $:/core/modules/macros/version.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the TiddlyWiki core version number\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"version\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn $tw.version;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/parsers/audioparser.js": {
"title": "$:/core/modules/parsers/audioparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/audioparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe audio parser parses an audio tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar AudioParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"audio\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"},\n\t\t\t\tstyle: {type: \"string\", value: \"width: 100%; object-fit: contain\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"audio/ogg\"] = AudioParser;\nexports[\"audio/mpeg\"] = AudioParser;\nexports[\"audio/mp3\"] = AudioParser;\nexports[\"audio/mp4\"] = AudioParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/binaryparser.js": {
"title": "$:/core/modules/parsers/binaryparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/binaryparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe binary parser parses a binary tiddler into a warning message and download link\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar BINARY_WARNING_MESSAGE = \"$:/core/ui/BinaryWarning\";\nvar EXPORT_BUTTON_IMAGE = \"$:/core/images/export-button\";\n\nvar BinaryParser = function(type,text,options) {\n\t// Transclude the binary data tiddler warning message\n\tvar warn = {\n\t\ttype: \"element\",\n\t\ttag: \"p\",\n\t\tchildren: [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: BINARY_WARNING_MESSAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Create download link based on binary tiddler title\n\tvar link = {\n\t\ttype: \"element\",\n\t\ttag: \"a\",\n\t\tattributes: {\n\t\t\ttitle: {type: \"indirect\", textReference: \"!!title\"},\n\t\t\tdownload: {type: \"indirect\", textReference: \"!!title\"}\n\t\t},\n\t\tchildren: [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: EXPORT_BUTTON_IMAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Set the link href to external or internal data URI\n\tif(options._canonical_uri) {\n\t\tlink.attributes.href = {\n\t\t\ttype: \"string\", \n\t\t\tvalue: options._canonical_uri\n\t\t};\n\t} else if(text) {\n\t\tlink.attributes.href = {\n\t\t\ttype: \"string\", \n\t\t\tvalue: \"data:\" + type + \";base64,\" + text\n\t\t};\n\t}\n\t// Combine warning message and download link in a div\n\tvar element = {\n\t\ttype: \"element\",\n\t\ttag: \"div\",\n\t\tattributes: {\n\t\t\tclass: {type: \"string\", value: \"tc-binary-warning\"}\n\t\t},\n\t\tchildren: [warn, link]\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"application/octet-stream\"] = BinaryParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/csvparser.js": {
"title": "$:/core/modules/parsers/csvparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/csvparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe CSV text parser processes CSV files into a table wrapped in a scrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar CsvParser = function(type,text,options) {\n\t// Table framework\n\tthis.tree = [{\n\t\t\"type\": \"scrollable\", \"children\": [{\n\t\t\t\"type\": \"element\", \"tag\": \"table\", \"children\": [{\n\t\t\t\t\"type\": \"element\", \"tag\": \"tbody\", \"children\": []\n\t\t\t}], \"attributes\": {\n\t\t\t\t\"class\": {\"type\": \"string\", \"value\": \"tc-csv-table\"}\n\t\t\t}\n\t\t}]\n\t}];\n\t// Split the text into lines\n\tvar lines = text.split(/\\r?\\n/mg),\n\t\ttag = \"th\";\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar lineText = lines[line];\n\t\tif(lineText) {\n\t\t\tvar row = {\n\t\t\t\t\t\"type\": \"element\", \"tag\": \"tr\", \"children\": []\n\t\t\t\t};\n\t\t\tvar columns = lineText.split(\",\");\n\t\t\tfor(var column=0; column<columns.length; column++) {\n\t\t\t\trow.children.push({\n\t\t\t\t\t\t\"type\": \"element\", \"tag\": tag, \"children\": [{\n\t\t\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\t\t\"text\": columns[column]\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t}\n\t\t\ttag = \"td\";\n\t\t\tthis.tree[0].children[0].children[0].children.push(row);\n\t\t}\n\t}\n};\n\nexports[\"text/csv\"] = CsvParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/htmlparser.js": {
"title": "$:/core/modules/parsers/htmlparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/htmlparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe HTML parser displays text as raw HTML\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HtmlParser = function(type,text,options) {\n\tvar src;\n\tif(options._canonical_uri) {\n\t\tsrc = options._canonical_uri;\n\t} else if(text) {\n\t\tsrc = \"data:text/html;charset=utf-8,\" + encodeURIComponent(text);\n\t}\n\tthis.tree = [{\n\t\ttype: \"element\",\n\t\ttag: \"iframe\",\n\t\tattributes: {\n\t\t\tsrc: {type: \"string\", value: src},\n\t\t\tsandbox: {type: \"string\", value: \"\"}\n\t\t}\n\t}];\n};\n\nexports[\"text/html\"] = HtmlParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/imageparser.js": {
"title": "$:/core/modules/parsers/imageparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/imageparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe image parser parses an image into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ImageParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"img\",\n\t\t\tattributes: {}\n\t\t};\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\tif(type === \"image/svg+xml\" || type === \".svg\") {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:image/svg+xml,\" + encodeURIComponent(text)};\n\t\t} else {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t\t}\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"image/svg+xml\"] = ImageParser;\nexports[\"image/jpg\"] = ImageParser;\nexports[\"image/jpeg\"] = ImageParser;\nexports[\"image/png\"] = ImageParser;\nexports[\"image/gif\"] = ImageParser;\nexports[\"image/webp\"] = ImageParser;\nexports[\"image/heic\"] = ImageParser;\nexports[\"image/heif\"] = ImageParser;\nexports[\"image/x-icon\"] = ImageParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/utils/parseutils.js": {
"title": "$:/core/modules/utils/parseutils.js",
"text": "/*\\\ntitle: $:/core/modules/utils/parseutils.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions concerned with parsing text into tokens.\n\nMost functions have the following pattern:\n\n* The parameters are:\n** `source`: the source string being parsed\n** `pos`: the current parse position within the string\n** Any further parameters are used to identify the token that is being parsed\n* The return value is:\n** null if the token was not found at the specified position\n** an object representing the token with the following standard fields:\n*** `type`: string indicating the type of the token\n*** `start`: start position of the token in the source string\n*** `end`: end position of the token in the source string\n*** Any further fields required to describe the token\n\nThe exception is `skipWhiteSpace`, which just returns the position after the whitespace.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for a whitespace token. Returns null if not found, otherwise returns {type: \"whitespace\", start:, end:,}\n*/\nexports.parseWhiteSpace = function(source,pos) {\n\tvar p = pos,c;\n\twhile(true) {\n\t\tc = source.charAt(p);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tp++;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\tif(p === pos) {\n\t\treturn null;\n\t} else {\n\t\treturn {\n\t\t\ttype: \"whitespace\",\n\t\t\tstart: pos,\n\t\t\tend: p\n\t\t}\n\t}\n};\n\n/*\nConvenience wrapper for parseWhiteSpace. Returns the position after the whitespace\n*/\nexports.skipWhiteSpace = function(source,pos) {\n\tvar c;\n\twhile(true) {\n\t\tc = source.charAt(pos);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tpos++;\n\t\t} else {\n\t\t\treturn pos;\n\t\t}\n\t}\n};\n\n/*\nLook for a given string token. Returns null if not found, otherwise returns {type: \"token\", value:, start:, end:,}\n*/\nexports.parseTokenString = function(source,pos,token) {\n\tvar match = source.indexOf(token,pos) === pos;\n\tif(match) {\n\t\treturn {\n\t\t\ttype: \"token\",\n\t\t\tvalue: token,\n\t\t\tstart: pos,\n\t\t\tend: pos + token.length\n\t\t};\n\t}\n\treturn null;\n};\n\n/*\nLook for a token matching a regex. Returns null if not found, otherwise returns {type: \"regexp\", match:, start:, end:,}\n*/\nexports.parseTokenRegExp = function(source,pos,reToken) {\n\tvar node = {\n\t\ttype: \"regexp\",\n\t\tstart: pos\n\t};\n\treToken.lastIndex = pos;\n\tnode.match = reToken.exec(source);\n\tif(node.match && node.match.index === pos) {\n\t\tnode.end = pos + node.match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a string literal. Returns null if not found, otherwise returns {type: \"string\", value:, start:, end:,}\n*/\nexports.parseStringLiteral = function(source,pos) {\n\tvar node = {\n\t\ttype: \"string\",\n\t\tstart: pos\n\t};\n\tvar reString = /(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\")|(?:'([^']*)')/g;\n\treString.lastIndex = pos;\n\tvar match = reString.exec(source);\n\tif(match && match.index === pos) {\n\t\tnode.value = match[1] !== undefined ? match[1] :(\n\t\t\tmatch[2] !== undefined ? match[2] : match[3] \n\t\t\t\t\t);\n\t\tnode.end = pos + match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a macro invocation parameter. Returns null if not found, or {type: \"macro-parameter\", name:, value:, start:, end:}\n*/\nexports.parseMacroParameter = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macro-parameter\",\n\t\tstart: pos\n\t};\n\t// Define our regexp\n\tvar reMacroParameter = /(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\\s>\"'=]+)))/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the parameter\n\tvar token = $tw.utils.parseTokenRegExp(source,pos,reMacroParameter);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the parameter details\n\tnode.value = token.match[2] !== undefined ? token.match[2] : (\n\t\t\t\t\ttoken.match[3] !== undefined ? token.match[3] : (\n\t\t\t\t\t\ttoken.match[4] !== undefined ? token.match[4] : (\n\t\t\t\t\t\t\ttoken.match[5] !== undefined ? token.match[5] : (\n\t\t\t\t\t\t\t\ttoken.match[6] !== undefined ? token.match[6] : (\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\tif(token.match[1]) {\n\t\tnode.name = token.match[1];\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for a macro invocation. Returns null if not found, or {type: \"macrocall\", name:, parameters:, start:, end:}\n*/\nexports.parseMacroInvocation = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macrocall\",\n\t\tstart: pos,\n\t\tparams: []\n\t};\n\t// Define our regexps\n\tvar reMacroName = /([^\\s>\"'=]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double less than sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"<<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the macro name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reMacroName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Process parameters\n\tvar parameter = $tw.utils.parseMacroParameter(source,pos);\n\twhile(parameter) {\n\t\tnode.params.push(parameter);\n\t\tpos = parameter.end;\n\t\t// Get the next parameter\n\t\tparameter = $tw.utils.parseMacroParameter(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">>\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for an HTML attribute definition. Returns null if not found, otherwise returns {type: \"attribute\", name:, valueType: \"string|indirect|macro\", value:, start:, end:,}\n*/\nexports.parseAttribute = function(source,pos) {\n\tvar node = {\n\t\tstart: pos\n\t};\n\t// Define our regexps\n\tvar reAttributeName = /([^\\/\\s>\"'=]+)/g,\n\t\treUnquotedAttribute = /([^\\/\\s<>\"'=]+)/g,\n\t\treFilteredValue = /\\{\\{\\{(.+?)\\}\\}\\}/g,\n\t\treIndirectValue = /\\{\\{([^\\}]+)\\}\\}/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the attribute name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reAttributeName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for an equals sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"=\");\n\tif(token) {\n\t\tpos = token.end;\n\t\t// Skip whitespace\n\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t// Look for a string literal\n\t\tvar stringLiteral = $tw.utils.parseStringLiteral(source,pos);\n\t\tif(stringLiteral) {\n\t\t\tpos = stringLiteral.end;\n\t\t\tnode.type = \"string\";\n\t\t\tnode.value = stringLiteral.value;\n\t\t} else {\n\t\t\t// Look for a filtered value\n\t\t\tvar filteredValue = $tw.utils.parseTokenRegExp(source,pos,reFilteredValue);\n\t\t\tif(filteredValue) {\n\t\t\t\tpos = filteredValue.end;\n\t\t\t\tnode.type = \"filtered\";\n\t\t\t\tnode.filter = filteredValue.match[1];\n\t\t\t} else {\n\t\t\t\t// Look for an indirect value\n\t\t\t\tvar indirectValue = $tw.utils.parseTokenRegExp(source,pos,reIndirectValue);\n\t\t\t\tif(indirectValue) {\n\t\t\t\t\tpos = indirectValue.end;\n\t\t\t\t\tnode.type = \"indirect\";\n\t\t\t\t\tnode.textReference = indirectValue.match[1];\n\t\t\t\t} else {\n\t\t\t\t\t// Look for a unquoted value\n\t\t\t\t\tvar unquotedValue = $tw.utils.parseTokenRegExp(source,pos,reUnquotedAttribute);\n\t\t\t\t\tif(unquotedValue) {\n\t\t\t\t\t\tpos = unquotedValue.end;\n\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\tnode.value = unquotedValue.match[1];\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Look for a macro invocation value\n\t\t\t\t\t\tvar macroInvocation = $tw.utils.parseMacroInvocation(source,pos);\n\t\t\t\t\t\tif(macroInvocation) {\n\t\t\t\t\t\t\tpos = macroInvocation.end;\n\t\t\t\t\t\t\tnode.type = \"macro\";\n\t\t\t\t\t\t\tnode.value = macroInvocation;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\t\tnode.value = \"true\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tnode.type = \"string\";\n\t\tnode.value = \"true\";\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/parsers/pdfparser.js": {
"title": "$:/core/modules/parsers/pdfparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/pdfparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe PDF parser embeds a PDF viewer\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ImageParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"embed\",\n\t\t\tattributes: {}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:application/pdf;base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"application/pdf\"] = ImageParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/textparser.js": {
"title": "$:/core/modules/parsers/textparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/textparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe plain text parser processes blocks of source text into a degenerate parse tree consisting of a single text node\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar TextParser = function(type,text,options) {\n\tthis.tree = [{\n\t\ttype: \"codeblock\",\n\t\tattributes: {\n\t\t\tcode: {type: \"string\", value: text},\n\t\t\tlanguage: {type: \"string\", value: type}\n\t\t}\n\t}];\n};\n\nexports[\"text/plain\"] = TextParser;\nexports[\"text/x-tiddlywiki\"] = TextParser;\nexports[\"application/javascript\"] = TextParser;\nexports[\"application/json\"] = TextParser;\nexports[\"text/css\"] = TextParser;\nexports[\"application/x-tiddler-dictionary\"] = TextParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/videoparser.js": {
"title": "$:/core/modules/parsers/videoparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/videoparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe video parser parses a video tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar VideoParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"video\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"},\n\t\t\t\tstyle: {type: \"string\", value: \"width: 100%; object-fit: contain\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"video/ogg\"] = VideoParser;\nexports[\"video/webm\"] = VideoParser;\nexports[\"video/mp4\"] = VideoParser;\nexports[\"video/quicktime\"] = VideoParser;\n\n})();\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/wikiparser/rules/codeblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/codeblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for code blocks. For example:\n\n```\n\t```\n\tThis text will not be //wikified//\n\t```\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match and get language if defined\n\tthis.matchRegExp = /```([\\w-]*)\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\\r?\\n```$)/mg;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Return the $codeblock widget\n\treturn [{\n\t\t\ttype: \"codeblock\",\n\t\t\tattributes: {\n\t\t\t\t\tcode: {type: \"string\", value: text},\n\t\t\t\t\tlanguage: {type: \"string\", value: this.match[1]}\n\t\t\t}\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/codeinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/codeinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for code runs. For example:\n\n```\n\tThis is a `code run`.\n\tThis is another ``code run``\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(``?)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar reEnd = new RegExp(this.match[1], \"mg\");\n\t// Look for the end marker\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the text\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"code\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: text\n\t\t}]\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/commentblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/commentblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/commentinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/commentinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/dash.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/dash.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/dash.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for dashes. For example:\n\n```\nThis is an en-dash: --\n\nThis is an em-dash: ---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"dash\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{2,3}(?!-)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar dash = this.match[0].length === 2 ? \"–\" : \"—\";\n\treturn [{\n\t\ttype: \"entity\",\n\t\tentity: dash\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/bold.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - bold. For example:\n\n```\n\tThis is ''bold'' text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except bold \n\\rules only bold \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"bold\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /''/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/''/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strong\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/italic.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - italic. For example:\n\n```\n\tThis is //italic// text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except italic\n\\rules only italic\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"italic\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\/\\//mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\/\\//mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"em\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - strikethrough. For example:\n\n```\n\tThis is ~~strikethrough~~ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except strikethrough \n\\rules only strikethrough \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"strikethrough\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~~/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/~~/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strike\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - subscript. For example:\n\n```\n\tThis is ,,subscript,, text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except subscript \n\\rules only subscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"subscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /,,/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/,,/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sub\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - superscript. For example:\n\n```\n\tThis is ^^superscript^^ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except superscript \n\\rules only superscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"superscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\^\\^/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\^\\^/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sup\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - underscore. For example:\n\n```\n\tThis is __underscore__ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except underscore \n\\rules only underscore\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"underscore\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /__/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/__/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"u\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/entity.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/entity.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/entity.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML entities. For example:\n\n```\n\tThis is a copyright symbol: ©\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"entity\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(&#?[a-zA-Z0-9]{2,8};)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar entityString = this.match[1];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Return the entity\n\treturn [{type: \"entity\", entity: this.match[0]}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/extlink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/extlink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/extlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\nAn external link: https://www.tiddlywiki.com/\n\nA suppressed external link: ~http://www.tiddlyspace.com/\n```\n\nExternal links can be suppressed by preceding them with `~`.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"extlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~?(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|\"\\\\^]+(?:\\/|\\b)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(this.match[0].substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: this.match[0].substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: this.match[0]},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"},\n\t\t\t\trel: {type: \"string\", value: \"noopener noreferrer\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: this.match[0]\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t},\n\t\tisBlock: true\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t}\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for marking areas with hard line breaks. For example:\n\n```\n\"\"\"\nThis is some text\nThat is set like\nIt is a Poem\nWhen it is\nClearly\nNot\n\"\"\"\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"hardlinebreaks\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\"\"\"(?:\\r?\\n)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\"\"\")|(\\r?\\n)/mg,\n\t\ttree = [],\n\t\tmatch;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tdo {\n\t\t// Parse the run up to the terminator\n\t\ttree.push.apply(tree,this.parser.parseInlineRun(reEnd,{eatTerminator: false}));\n\t\t// Redo the terminator match\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tmatch = reEnd.exec(this.parser.source);\n\t\tif(match) {\n\t\t\tthis.parser.pos = reEnd.lastIndex;\n\t\t\t// Add a line break if the terminator was a line break\n\t\t\tif(match[2]) {\n\t\t\t\ttree.push({type: \"element\", tag: \"br\"});\n\t\t\t}\n\t\t}\n\t} while(match && !match[1]);\n\t// Return the nodes\n\treturn tree;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/heading.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/heading.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/heading.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for headings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"heading\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(!{1,6})/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar headingLevel = this.match[1].length;\n\t// Move past the !s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse any classes, whitespace and then the heading itself\n\tvar classes = this.parser.parseClasses();\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// Return the heading\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"h\" + headingLevel, \n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: classes.join(\" \")}\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/horizrule.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/horizrule.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/horizrule.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for rules. For example:\n\n```\n---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"horizrule\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{3,}\\r?(?:\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\treturn [{type: \"element\", tag: \"hr\"}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/html.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/html.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/html.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for HTML elements and widgets. For example:\n\n{{{\n<aside>\nThis is an HTML5 aside element\n</aside>\n\n<$slider target=\"MyTiddler\">\nThis is a widget invocation\n</$slider>\n\n}}}\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"html\";\nexports.types = {inline: true, block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextTag = this.findNextTag(this.parser.source,startPos,{\n\t\trequireLineBreak: this.is.block\n\t});\n\treturn this.nextTag ? this.nextTag.start : undefined;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Retrieve the most recent match so that recursive calls don't overwrite it\n\tvar tag = this.nextTag;\n\tthis.nextTag = null;\n\t// Advance the parser position to past the tag\n\tthis.parser.pos = tag.end;\n\t// Check for an immediately following double linebreak\n\tvar hasLineBreak = !tag.isSelfClosing && !!$tw.utils.parseTokenRegExp(this.parser.source,this.parser.pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t// Set whether we're in block mode\n\ttag.isBlock = this.is.block || hasLineBreak;\n\t// Parse the body if we need to\n\tif(!tag.isSelfClosing && $tw.config.htmlVoidElements.indexOf(tag.tag) === -1) {\n\t\t\tvar reEndString = \"</\" + $tw.utils.escapeRegExp(tag.tag) + \">\",\n\t\t\t\treEnd = new RegExp(\"(\" + reEndString + \")\",\"mg\");\n\t\tif(hasLineBreak) {\n\t\t\ttag.children = this.parser.parseBlocks(reEndString);\n\t\t} else {\n\t\t\ttag.children = this.parser.parseInlineRun(reEnd);\n\t\t}\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tvar endMatch = reEnd.exec(this.parser.source);\n\t\tif(endMatch && endMatch.index === this.parser.pos) {\n\t\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t\t}\n\t}\n\t// Return the tag\n\treturn [tag];\n};\n\n/*\nLook for an HTML tag. Returns null if not found, otherwise returns {type: \"element\", name:, attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseTag = function(source,pos,options) {\n\toptions = options || {};\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Define our regexps\n\tvar reTagName = /([a-zA-Z0-9\\-\\$]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a less than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\"<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the tag name\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,reTagName);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tnode.tag = token.match[1];\n\tif(node.tag.slice(1).indexOf(\"$\") !== -1) {\n\t\treturn null;\n\t}\n\tif(node.tag.charAt(0) === \"$\") {\n\t\tnode.type = node.tag.substr(1);\n\t}\n\tpos = token.end;\n\t// Check that the tag is terminated by a space, / or >\n\tif(!$tw.utils.parseWhiteSpace(source,pos) && !(source.charAt(pos) === \"/\") && !(source.charAt(pos) === \">\") ) {\n\t\treturn null;\n\t}\n\t// Process attributes\n\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\twhile(attribute) {\n\t\tnode.attributes[attribute.name] = attribute;\n\t\tpos = attribute.end;\n\t\t// Get the next attribute\n\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a closing slash\n\ttoken = $tw.utils.parseTokenString(source,pos,\"/\");\n\tif(token) {\n\t\tpos = token.end;\n\t\tnode.isSelfClosing = true;\n\t}\n\t// Look for a greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Check for a required line break\n\tif(options.requireLineBreak) {\n\t\ttoken = $tw.utils.parseTokenRegExp(source,pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t\tif(!token) {\n\t\t\treturn null;\n\t\t}\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\nexports.findNextTag = function(source,pos,options) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /<([a-zA-Z\\-\\$]+)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseTag(source,match.index,options);\n\t\t// Return success\n\t\tif(tag && this.isLegalTag(tag)) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\nexports.isLegalTag = function(tag) {\n\t// Widgets are always OK\n\tif(tag.type !== \"element\") {\n\t\treturn true;\n\t// If it's an HTML tag that starts with a dash then it's not legal\n\t} else if(tag.tag.charAt(0) === \"-\") {\n\t\treturn false;\n\t} else {\n\t\t// Otherwise it's OK\n\t\treturn true;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/image.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/image.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/image.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for embedding images. For example:\n\n```\n[img[https://tiddlywiki.com/fractalveg.jpg]]\n[img width=23 height=24 [https://tiddlywiki.com/fractalveg.jpg]]\n[img width={{!!width}} height={{!!height}} [https://tiddlywiki.com/fractalveg.jpg]]\n[img[Description of image|https://tiddlywiki.com/fractalveg.jpg]]\n[img[TiddlerTitle]]\n[img[Description of image|TiddlerTitle]]\n```\n\nGenerates the `<$image>` widget.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"image\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextImage = this.findNextImage(this.parser.source,startPos);\n\treturn this.nextImage ? this.nextImage.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextImage.end;\n\tvar node = {\n\t\ttype: \"image\",\n\t\tattributes: this.nextImage.attributes\n\t};\n\treturn [node];\n};\n\n/*\nFind the next image from the current position\n*/\nexports.findNextImage = function(source,pos) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /(\\[img)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseImage(source,match.index);\n\t\t// Return success\n\t\tif(tag) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an image at the specified position. Returns null if not found, otherwise returns {type: \"image\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseImage = function(source,pos) {\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"image\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[img`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[img\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Process attributes\n\tif(source.charAt(pos) !== \"[\") {\n\t\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\t\twhile(attribute) {\n\t\t\tnode.attributes[attribute.name] = attribute;\n\t\t\tpos = attribute.end;\n\t\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t\tif(source.charAt(pos) !== \"[\") {\n\t\t\t\t// Get the next attribute\n\t\t\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t\t\t} else {\n\t\t\t\tattribute = null;\n\t\t\t}\n\t\t}\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[` after the attributes\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the source up to the terminating `]]`\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,/(?:([^|\\]]*?)\\|)?([^\\]]+?)\\]\\]/g);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\tif(token.match[1]) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: token.match[1].trim()};\n\t}\n\tnode.attributes.source = {type: \"string\", value: (token.match[2] || \"\").trim()};\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/import.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/import.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/import.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for importing variable definitions\n\n```\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"import\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\import[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\tvar self = this;\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the filter terminated by a line break\n\tvar reMatch = /(.*)(\\r?\\n)|$/mg;\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\tthis.parser.pos = reMatch.lastIndex;\n\t// Parse tree nodes to return\n\treturn [{\n\t\ttype: \"importvariables\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: match[1]}\n\t\t},\n\t\tchildren: []\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/list.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/list.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/list.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for lists. For example:\n\n```\n* This is an unordered list\n* It has two items\n\n# This is a numbered list\n## With a subitem\n# And a third item\n\n; This is a term that is being defined\n: This is the definition of that term\n```\n\nNote that lists can be nested arbitrarily:\n\n```\n#** One\n#* Two\n#** Three\n#**** Four\n#**# Five\n#**## Six\n## Seven\n### Eight\n## Nine\n```\n\nA CSS class can be applied to a list item as follows:\n\n```\n* List item one\n*.active List item two has the class `active`\n* List item three\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"list\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /([\\*#;:>]+)/mg;\n};\n\nvar listTypes = {\n\t\"*\": {listTag: \"ul\", itemTag: \"li\"},\n\t\"#\": {listTag: \"ol\", itemTag: \"li\"},\n\t\";\": {listTag: \"dl\", itemTag: \"dt\"},\n\t\":\": {listTag: \"dl\", itemTag: \"dd\"},\n\t\">\": {listTag: \"blockquote\", itemTag: \"div\"}\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Array of parse tree nodes for the previous row of the list\n\tvar listStack = [];\n\t// Cycle through the items in the list\n\twhile(true) {\n\t\t// Match the list marker\n\t\tvar reMatch = /([\\*#;:>]+)/mg;\n\t\treMatch.lastIndex = this.parser.pos;\n\t\tvar match = reMatch.exec(this.parser.source);\n\t\tif(!match || match.index !== this.parser.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check whether the list type of the top level matches\n\t\tvar listInfo = listTypes[match[0].charAt(0)];\n\t\tif(listStack.length > 0 && listStack[0].tag !== listInfo.listTag) {\n\t\t\tbreak;\n\t\t}\n\t\t// Move past the list marker\n\t\tthis.parser.pos = match.index + match[0].length;\n\t\t// Walk through the list markers for the current row\n\t\tfor(var t=0; t<match[0].length; t++) {\n\t\t\tlistInfo = listTypes[match[0].charAt(t)];\n\t\t\t// Remove any stacked up element if we can't re-use it because the list type doesn't match\n\t\t\tif(listStack.length > t && listStack[t].tag !== listInfo.listTag) {\n\t\t\t\tlistStack.splice(t,listStack.length - t);\n\t\t\t}\n\t\t\t// Construct the list element or reuse the previous one at this level\n\t\t\tif(listStack.length <= t) {\n\t\t\t\tvar listElement = {type: \"element\", tag: listInfo.listTag, children: [\n\t\t\t\t\t{type: \"element\", tag: listInfo.itemTag, children: []}\n\t\t\t\t]};\n\t\t\t\t// Link this list element into the last child item of the parent list item\n\t\t\t\tif(t) {\n\t\t\t\t\tvar prevListItem = listStack[t-1].children[listStack[t-1].children.length-1];\n\t\t\t\t\tprevListItem.children.push(listElement);\n\t\t\t\t}\n\t\t\t\t// Save this element in the stack\n\t\t\t\tlistStack[t] = listElement;\n\t\t\t} else if(t === (match[0].length - 1)) {\n\t\t\t\tlistStack[t].children.push({type: \"element\", tag: listInfo.itemTag, children: []});\n\t\t\t}\n\t\t}\n\t\tif(listStack.length > match[0].length) {\n\t\t\tlistStack.splice(match[0].length,listStack.length - match[0].length);\n\t\t}\n\t\t// Process the body of the list item into the last list item\n\t\tvar lastListChildren = listStack[listStack.length-1].children,\n\t\t\tlastListItem = lastListChildren[lastListChildren.length-1],\n\t\t\tclasses = this.parser.parseClasses();\n\t\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\t\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t\tlastListItem.children.push.apply(lastListItem.children,tree);\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(lastListItem,classes.join(\" \"));\n\t\t}\n\t\t// Consume any whitespace following the list item\n\t\tthis.parser.skipWhitespace();\n\t}\n\t// Return the root element of the list\n\treturn [listStack[0]];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/macrocallblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/macrocallblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for block macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^>\\s]+)(?:\\s*)((?:[^>]|(?:>(?!>)))*?)>>(?:\\r?\\n|$)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params,\n\t\tisBlock: true\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/macrocallinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/macrocallinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^\\s>]+)\\s*([\\s\\S]*?)>>/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5]|| paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/macrodef.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/macrodef.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrodef.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for macro definitions\n\n```\n\\define name(param:defaultvalue,param2:defaultvalue)\ndefinition text, including $param$ markers\n\\end\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrodef\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\define\\s+([^(\\s]+)\\(\\s*([^)]*)\\)(\\s*\\r?\\n)?/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the macro name and parameters\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the parameters\n\tvar paramString = this.match[2],\n\t\tparams = [];\n\tif(paramString !== \"\") {\n\t\tvar reParam = /\\s*([A-Za-z0-9\\-_]+)(?:\\s*:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))?/mg,\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\twhile(paramMatch) {\n\t\t\t// Save the parameter details\n\t\t\tvar paramInfo = {name: paramMatch[1]},\n\t\t\t\tdefaultValue = paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6];\n\t\t\tif(defaultValue) {\n\t\t\t\tparamInfo[\"default\"] = defaultValue;\n\t\t\t}\n\t\t\tparams.push(paramInfo);\n\t\t\t// Look for the next parameter\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\t}\n\t}\n\t// Is this a multiline definition?\n\tvar reEnd;\n\tif(this.match[3]) {\n\t\t// If so, the end of the body is marked with \\end\n\t\treEnd = /(\\r?\\n\\\\end[^\\S\\n\\r]*(?:$|\\r?\\n))/mg;\n\t} else {\n\t\t// Otherwise, the end of the definition is marked by the end of the line\n\t\treEnd = /($|\\r?\\n)/mg;\n\t\t// Move past any whitespace\n\t\tthis.parser.pos = $tw.utils.skipWhiteSpace(this.parser.source,this.parser.pos);\n\t}\n\t// Find the end of the definition\n\treEnd.lastIndex = this.parser.pos;\n\tvar text,\n\t\tendMatch = reEnd.exec(this.parser.source);\n\tif(endMatch) {\n\t\ttext = this.parser.source.substring(this.parser.pos,endMatch.index);\n\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t} else {\n\t\t// We didn't find the end of the definition, so we'll make it blank\n\t\ttext = \"\";\n\t}\n\t// Save the macro definition\n\treturn [{\n\t\ttype: \"set\",\n\t\tattributes: {\n\t\t\tname: {type: \"string\", value: this.match[1]},\n\t\t\tvalue: {type: \"string\", value: text}\n\t\t},\n\t\tchildren: [],\n\t\tparams: params,\n\t\tisMacroDefinition: true\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/prettyextlink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/prettyextlink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettyextlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\n[ext[https://tiddlywiki.com/fractalveg.jpg]]\n[ext[Tooltip|https://tiddlywiki.com/fractalveg.jpg]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettyextlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextLink = this.findNextLink(this.parser.source,startPos);\n\treturn this.nextLink ? this.nextLink.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextLink.end;\n\treturn [this.nextLink];\n};\n\n/*\nFind the next link from the current position\n*/\nexports.findNextLink = function(source,pos) {\n\t// A regexp for finding candidate links\n\tvar reLookahead = /(\\[ext\\[)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a link\n\t\tvar link = this.parseLink(source,match.index);\n\t\t// Return success\n\t\tif(link) {\n\t\t\treturn link;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an link at the specified position. Returns null if not found, otherwise returns {type: \"element\", tag: \"a\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseLink = function(source,pos) {\n\tvar token,\n\t\ttextNode = {\n\t\t\ttype: \"text\"\n\t\t},\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tstart: pos,\n\t\t\tattributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t},\n\t\t\tchildren: [textNode]\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[ext[`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[ext[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Look ahead for the terminating `]]`\n\tvar closePos = source.indexOf(\"]]\",pos);\n\tif(closePos === -1) {\n\t\treturn null;\n\t}\n\t// Look for a `|` separating the tooltip\n\tvar splitPos = source.indexOf(\"|\",pos);\n\tif(splitPos === -1 || splitPos > closePos) {\n\t\tsplitPos = null;\n\t}\n\t// Pull out the tooltip and URL\n\tvar tooltip, URL;\n\tif(splitPos) {\n\t\tURL = source.substring(splitPos + 1,closePos).trim();\n\t\ttextNode.text = source.substring(pos,splitPos).trim();\n\t} else {\n\t\tURL = source.substring(pos,closePos).trim();\n\t\ttextNode.text = URL;\n\t}\n\tnode.attributes.href = {type: \"string\", value: URL};\n\tnode.attributes.target = {type: \"string\", value: \"_blank\"};\n\tnode.attributes.rel = {type: \"string\", value: \"noopener noreferrer\"};\n\t// Update the end position\n\tnode.end = closePos + 2;\n\treturn node;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/prettylink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/prettylink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettylink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for pretty links. For example:\n\n```\n[[Introduction]]\n\n[[Link description|TiddlerTitle]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettylink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\[\\[(.*?)(?:\\|(.*?))?\\]\\]/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Process the link\n\tvar text = this.match[1],\n\t\tlink = this.match[2] || text;\n\tif($tw.utils.isLinkExternal(link)) {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: link},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"},\n\t\t\t\trel: {type: \"string\", value: \"noopener noreferrer\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: link}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/quoteblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/quoteblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/quoteblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for quote blocks. For example:\n\n```\n\t<<<.optionalClass(es) optional cited from\n\ta quote\n\t<<<\n\t\n\t<<<.optionalClass(es)\n\ta quote\n\t<<< optional cited from\n```\n\nQuotes can be quoted by putting more <s\n\n```\n\t<<<\n\tQuote Level 1\n\t\n\t<<<<\n\tQuoteLevel 2\n\t<<<<\n\t\n\t<<<\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"quoteblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(<<<+)/mg;\n};\n\nexports.parse = function() {\n\tvar classes = [\"tc-quote\"];\n\t// Get all the details of the match\n\tvar reEndString = \"^\" + this.match[1] + \"(?!<)\";\n\t// Move past the <s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\n\t// Parse any classes, whitespace and then the optional cite itself\n\tclasses.push.apply(classes, this.parser.parseClasses());\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar cite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// before handling the cite, parse the body of the quote\n\tvar tree= this.parser.parseBlocks(reEndString);\n\t// If we got a cite, put it before the text\n\tif(cite.length > 0) {\n\t\ttree.unshift({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Parse any optional cite\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tcite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// If we got a cite, push it\n\tif(cite.length > 0) {\n\t\ttree.push({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Return the blockquote element\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"blockquote\",\n\t\tattributes: {\n\t\t\tclass: { type: \"string\", value: classes.join(\" \") },\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/rules.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/rules.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/rules.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for rules specifications\n\n```\n\\rules except ruleone ruletwo rulethree\n\\rules only ruleone ruletwo rulethree\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"rules\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\rules[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse whitespace delimited tokens terminated by a line break\n\tvar reMatch = /[^\\S\\n]*(\\S+)|(\\r?\\n)/mg,\n\t\ttokens = [];\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\twhile(match && match.index === this.parser.pos) {\n\t\tthis.parser.pos = reMatch.lastIndex;\n\t\t// Exit if we've got the line break\n\t\tif(match[2]) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the token\n\t\tif(match[1]) {\n\t\t\ttokens.push(match[1]);\n\t\t}\n\t\t// Match the next token\n\t\tmatch = reMatch.exec(this.parser.source);\n\t}\n\t// Process the tokens\n\tif(tokens.length > 0) {\n\t\tthis.parser.amendRules(tokens[0],tokens.slice(1));\n\t}\n\t// No parse tree nodes to return\n\treturn [];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/styleblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/styleblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for assigning styles and classes to paragraphs and other blocks. For example:\n\n```\n@@.myClass\n@@background-color:red;\nThis paragraph will have the CSS class `myClass`.\n\n* The `<ul>` around this list will also have the class `myClass`\n* List item 2\n\n@@\n```\n\nNote that classes and styles can be mixed subject to the rule that styles must precede classes. For example\n\n```\n@@.myFirstClass.mySecondClass\n@@width:100px;.myThirdClass\nThis is a paragraph\n@@\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(?:\\.([^\\r\\n\\s]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEndString = \"^@@(?:\\\\r?\\\\n)?\";\n\tvar classes = [], styles = [];\n\tdo {\n\t\t// Get the class and style\n\t\tif(this.match[1]) {\n\t\t\tstyles.push(this.match[1]);\n\t\t}\n\t\tif(this.match[2]) {\n\t\t\tclasses.push(this.match[2].split(\".\").join(\" \"));\n\t\t}\n\t\t// Move past the match\n\t\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\t// Look for another line of classes and styles\n\t\tthis.match = this.matchRegExp.exec(this.parser.source);\n\t} while(this.match && this.match.index === this.parser.pos);\n\t// Parse the body\n\tvar tree = this.parser.parseBlocks(reEndString);\n\tfor(var t=0; t<tree.length; t++) {\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(tree[t],classes.join(\" \"));\n\t\t}\n\t\tif(styles.length > 0) {\n\t\t\t$tw.utils.addAttributeToParseTreeNode(tree[t],\"style\",styles.join(\"\"));\n\t\t}\n\t}\n\treturn tree;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/styleinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/styleinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for assigning styles and classes to inline runs. For example:\n\n```\n@@.myClass This is some text with a class@@\n@@background-color:red;This is some text with a background colour@@\n@@width:100px;.myClass This is some text with a class and a width@@\n```\n\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(\\.(?:[^\\r\\n\\s]+)\\s+)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /@@/g;\n\t// Get the styles and class\n\tvar stylesString = this.match[1],\n\t\tclassString = this.match[2] ? this.match[2].split(\".\").join(\" \") : undefined;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the run up to the terminator\n\tvar tree = this.parser.parseInlineRun(reEnd,{eatTerminator: true});\n\t// Return the classed span\n\tvar node = {\n\t\ttype: \"element\",\n\t\ttag: \"span\",\n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: \"tc-inline-style\"}\n\t\t},\n\t\tchildren: tree\n\t};\n\tif(classString) {\n\t\t$tw.utils.addClassToParseTreeNode(node,classString);\n\t}\n\tif(stylesString) {\n\t\t$tw.utils.addAttributeToParseTreeNode(node,\"style\",stylesString);\n\t}\n\treturn [node];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/syslink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/syslink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/syslink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for system tiddler links.\nCan be suppressed preceding them with `~`.\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"syslink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp(\n\t\t\"~?\\\\$:\\\\/[\" +\n\t\t$tw.config.textPrimitives.anyLetter.substr(1,$tw.config.textPrimitives.anyLetter.length - 2) +\n\t\t\"\\/._-]+\",\n\t\t\"mg\"\n\t);\n};\n\nexports.parse = function() {\n\tvar match = this.match[0];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(match.substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: match.substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: match}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: match\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/table.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/table.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/table.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for tables.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"table\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\|(?:[^\\n]*)\\|(?:[fhck]?)\\r?(?:\\n|$)/mg;\n};\n\nvar processRow = function(prevColumns) {\n\tvar cellRegExp = /(?:\\|([^\\n\\|]*)\\|)|(\\|[fhck]?\\r?(?:\\n|$))/mg,\n\t\tcellTermRegExp = /((?:\\x20*)\\|)/mg,\n\t\ttree = [],\n\t\tcol = 0,\n\t\tcolSpanCount = 1,\n\t\tprevCell,\n\t\tvAlign;\n\t// Match a single cell\n\tcellRegExp.lastIndex = this.parser.pos;\n\tvar cellMatch = cellRegExp.exec(this.parser.source);\n\twhile(cellMatch && cellMatch.index === this.parser.pos) {\n\t\tif(cellMatch[1] === \"~\") {\n\t\t\t// Rowspan\n\t\t\tvar last = prevColumns[col];\n\t\t\tif(last) {\n\t\t\t\tlast.rowSpanCount++;\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"rowspan\",last.rowSpanCount);\n\t\t\t\tvAlign = $tw.utils.getAttributeValueFromParseTreeNode(last.element,\"valign\",\"center\");\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"valign\",vAlign);\n\t\t\t\tif(colSpanCount > 1) {\n\t\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"colspan\",colSpanCount);\n\t\t\t\t\tcolSpanCount = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \">\") {\n\t\t\t// Colspan\n\t\t\tcolSpanCount++;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \"<\" && prevCell) {\n\t\t\tcolSpanCount = 1 + $tw.utils.getAttributeValueFromParseTreeNode(prevCell,\"colspan\",1);\n\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\tcolSpanCount = 1;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[2]) {\n\t\t\t// End of row\n\t\t\tif(prevCell && colSpanCount > 1) {\n\t\t\t\tif(prevCell.attributes && prevCell.attributes && prevCell.attributes.colspan) {\n\t\t\t\t\t\tcolSpanCount += prevCell.attributes.colspan.value;\n\t\t\t\t} else {\n\t\t\t\t\tcolSpanCount -= 1;\n\t\t\t\t}\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\t}\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t\tbreak;\n\t\t} else {\n\t\t\t// For ordinary cells, step beyond the opening `|`\n\t\t\tthis.parser.pos++;\n\t\t\t// Look for a space at the start of the cell\n\t\t\tvar spaceLeft = false;\n\t\t\tvAlign = null;\n\t\t\tif(this.parser.source.substr(this.parser.pos).search(/^\\^([^\\^]|\\^\\^)/) === 0) {\n\t\t\t\tvAlign = \"top\";\n\t\t\t} else if(this.parser.source.substr(this.parser.pos).search(/^,([^,]|,,)/) === 0) {\n\t\t\t\tvAlign = \"bottom\";\n\t\t\t}\n\t\t\tif(vAlign) {\n\t\t\t\tthis.parser.pos++;\n\t\t\t}\n\t\t\tvar chr = this.parser.source.substr(this.parser.pos,1);\n\t\t\twhile(chr === \" \") {\n\t\t\t\tspaceLeft = true;\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tchr = this.parser.source.substr(this.parser.pos,1);\n\t\t\t}\n\t\t\t// Check whether this is a heading cell\n\t\t\tvar cell;\n\t\t\tif(chr === \"!\") {\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tcell = {type: \"element\", tag: \"th\", children: []};\n\t\t\t} else {\n\t\t\t\tcell = {type: \"element\", tag: \"td\", children: []};\n\t\t\t}\n\t\t\ttree.push(cell);\n\t\t\t// Record information about this cell\n\t\t\tprevCell = cell;\n\t\t\tprevColumns[col] = {rowSpanCount:1,element:cell};\n\t\t\t// Check for a colspan\n\t\t\tif(colSpanCount > 1) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"colspan\",colSpanCount);\n\t\t\t\tcolSpanCount = 1;\n\t\t\t}\n\t\t\t// Parse the cell\n\t\t\tcell.children = this.parser.parseInlineRun(cellTermRegExp,{eatTerminator: true});\n\t\t\t// Set the alignment for the cell\n\t\t\tif(vAlign) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"valign\",vAlign);\n\t\t\t}\n\t\t\tif(this.parser.source.substr(this.parser.pos - 2,1) === \" \") { // spaceRight\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",spaceLeft ? \"center\" : \"left\");\n\t\t\t} else if(spaceLeft) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",\"right\");\n\t\t\t}\n\t\t\t// Move back to the closing `|`\n\t\t\tthis.parser.pos--;\n\t\t}\n\t\tcol++;\n\t\tcellRegExp.lastIndex = this.parser.pos;\n\t\tcellMatch = cellRegExp.exec(this.parser.source);\n\t}\n\treturn tree;\n};\n\nexports.parse = function() {\n\tvar rowContainerTypes = {\"c\":\"caption\", \"h\":\"thead\", \"\":\"tbody\", \"f\":\"tfoot\"},\n\t\ttable = {type: \"element\", tag: \"table\", children: []},\n\t\trowRegExp = /^\\|([^\\n]*)\\|([fhck]?)\\r?(?:\\n|$)/mg,\n\t\trowTermRegExp = /(\\|(?:[fhck]?)\\r?(?:\\n|$))/mg,\n\t\tprevColumns = [],\n\t\tcurrRowType,\n\t\trowContainer,\n\t\trowCount = 0;\n\t// Match the row\n\trowRegExp.lastIndex = this.parser.pos;\n\tvar rowMatch = rowRegExp.exec(this.parser.source);\n\twhile(rowMatch && rowMatch.index === this.parser.pos) {\n\t\tvar rowType = rowMatch[2];\n\t\t// Check if it is a class assignment\n\t\tif(rowType === \"k\") {\n\t\t\t$tw.utils.addClassToParseTreeNode(table,rowMatch[1]);\n\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t} else {\n\t\t\t// Otherwise, create a new row if this one is of a different type\n\t\t\tif(rowType !== currRowType) {\n\t\t\t\trowContainer = {type: \"element\", tag: rowContainerTypes[rowType], children: []};\n\t\t\t\ttable.children.push(rowContainer);\n\t\t\t\tcurrRowType = rowType;\n\t\t\t}\n\t\t\t// Is this a caption row?\n\t\t\tif(currRowType === \"c\") {\n\t\t\t\t// If so, move past the opening `|` of the row\n\t\t\t\tthis.parser.pos++;\n\t\t\t\t// Move the caption to the first row if it isn't already\n\t\t\t\tif(table.children.length !== 1) {\n\t\t\t\t\ttable.children.pop(); // Take rowContainer out of the children array\n\t\t\t\t\ttable.children.splice(0,0,rowContainer); // Insert it at the bottom\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t// Set the alignment - TODO: figure out why TW did this\n//\t\t\t\trowContainer.attributes.align = rowCount === 0 ? \"top\" : \"bottom\";\n\t\t\t\t// Parse the caption\n\t\t\t\trowContainer.children = this.parser.parseInlineRun(rowTermRegExp,{eatTerminator: true});\n\t\t\t} else {\n\t\t\t\t// Create the row\n\t\t\t\tvar theRow = {type: \"element\", tag: \"tr\", children: []};\n\t\t\t\t$tw.utils.addClassToParseTreeNode(theRow,rowCount%2 ? \"oddRow\" : \"evenRow\");\n\t\t\t\trowContainer.children.push(theRow);\n\t\t\t\t// Process the row\n\t\t\t\ttheRow.children = processRow.call(this,prevColumns);\n\t\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t\t\t// Increment the row count\n\t\t\t\trowCount++;\n\t\t\t}\n\t\t}\n\t\trowMatch = rowRegExp.exec(this.parser.source);\n\t}\n\treturn [table];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/transcludeblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/transcludeblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {},\n\t\t\tisBlock: true\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tisBlock: true,\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/transcludeinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/transcludeinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {}\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/typedblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/typedblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/typedblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for typed blocks. For example:\n\n```\n$$$.js\nThis will be rendered as JavaScript\n$$$\n\n$$$.svg\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"150\" height=\"100\">\n <circle cx=\"100\" cy=\"50\" r=\"40\" stroke=\"black\" stroke-width=\"2\" fill=\"red\" />\n</svg>\n$$$\n\n$$$text/vnd.tiddlywiki>text/html\nThis will be rendered as an //HTML representation// of WikiText\n$$$\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.name = \"typedblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\$\\$\\$([^ >\\r\\n]*)(?: *> *([^ \\r\\n]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /\\r?\\n\\$\\$\\$\\r?(?:\\n|$)/mg;\n\t// Save the type\n\tvar parseType = this.match[1],\n\t\trenderType = this.match[2];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Parse the block according to the specified type\n\tvar parser = this.parser.wiki.parseText(parseType,text,{defaultType: \"text/plain\"});\n\t// If there's no render type, just return the parse tree\n\tif(!renderType) {\n\t\treturn parser.tree;\n\t} else {\n\t\t// Otherwise, render to the rendertype and return in a <PRE> tag\n\t\tvar widgetNode = this.parser.wiki.makeWidget(parser),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\ttext = renderType === \"text/html\" ? container.innerHTML : container.textContent;\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"pre\",\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/whitespace.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/whitespace.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/whitespace.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for whitespace specifications\n\n```\n\\whitespace trim\n\\whitespace notrim\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"whitespace\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\whitespace[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\tvar self = this;\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse whitespace delimited tokens terminated by a line break\n\tvar reMatch = /[^\\S\\n]*(\\S+)|(\\r?\\n)/mg,\n\t\ttokens = [];\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\twhile(match && match.index === this.parser.pos) {\n\t\tthis.parser.pos = reMatch.lastIndex;\n\t\t// Exit if we've got the line break\n\t\tif(match[2]) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the token\n\t\tif(match[1]) {\n\t\t\ttokens.push(match[1]);\n\t\t}\n\t\t// Match the next token\n\t\tmatch = reMatch.exec(this.parser.source);\n\t}\n\t// Process the tokens\n\t$tw.utils.each(tokens,function(token) {\n\t\tswitch(token) {\n\t\t\tcase \"trim\":\n\t\t\t\tself.parser.configTrimWhiteSpace = true;\n\t\t\t\tbreak;\n\t\t\tcase \"notrim\":\n\t\t\t\tself.parser.configTrimWhiteSpace = false;\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t// No parse tree nodes to return\n\treturn [];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/wikilink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/wikilink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikilink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for wiki links. For example:\n\n```\nAWikiLink\nAnotherLink\n~SuppressedLink\n```\n\nPrecede a camel case word with `~` to prevent it from being recognised as a link.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"wikilink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp($tw.config.textPrimitives.unWikiLink + \"?\" + $tw.config.textPrimitives.wikiLink,\"mg\");\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get the details of the match\n\tvar linkText = this.match[0];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// If the link starts with the unwikilink character then just output it as plain text\n\tif(linkText.substr(0,1) === $tw.config.textPrimitives.unWikiLink) {\n\t\treturn [{type: \"text\", text: linkText.substr(1)}];\n\t}\n\t// If the link has been preceded with a blocked letter then don't treat it as a link\n\tif(this.match.index > 0) {\n\t\tvar preRegExp = new RegExp($tw.config.textPrimitives.blockPrefixLetters,\"mg\");\n\t\tpreRegExp.lastIndex = this.match.index-1;\n\t\tvar preMatch = preRegExp.exec(this.parser.source);\n\t\tif(preMatch && preMatch.index === this.match.index-1) {\n\t\t\treturn [{type: \"text\", text: linkText}];\n\t\t}\n\t}\n\treturn [{\n\t\ttype: \"link\",\n\t\tattributes: {\n\t\t\tto: {type: \"string\", value: linkText}\n\t\t},\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: linkText\n\t\t}]\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/wikiparser.js": {
"title": "$:/core/modules/parsers/wikiparser/wikiparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/wikiparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe wiki text parser processes blocks of source text into a parse tree.\n\nThe parse tree is made up of nested arrays of these JavaScript objects:\n\n\t{type: \"element\", tag: <string>, attributes: {}, children: []} - an HTML element\n\t{type: \"text\", text: <string>} - a text node\n\t{type: \"entity\", value: <string>} - an entity\n\t{type: \"raw\", html: <string>} - raw HTML\n\nAttributes are stored as hashmaps of the following objects:\n\n\t{type: \"string\", value: <string>} - literal string\n\t{type: \"indirect\", textReference: <textReference>} - indirect through a text reference\n\t{type: \"macro\", macro: <TBD>} - indirect through a macro invocation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar WikiParser = function(type,text,options) {\n\tthis.wiki = options.wiki;\n\tvar self = this;\n\t// Check for an externally linked tiddler\n\tif($tw.browser && (text || \"\") === \"\" && options._canonical_uri) {\n\t\tthis.loadRemoteTiddler(options._canonical_uri);\n\t\ttext = $tw.language.getRawString(\"LazyLoadingWarning\");\n\t}\n\t// Initialise the classes if we don't have them already\n\tif(!this.pragmaRuleClasses) {\n\t\tWikiParser.prototype.pragmaRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"pragma\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.pragmaRuleClasses,\"$:/config/WikiParserRules/Pragmas/\");\n\t}\n\tif(!this.blockRuleClasses) {\n\t\tWikiParser.prototype.blockRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"block\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.blockRuleClasses,\"$:/config/WikiParserRules/Block/\");\n\t}\n\tif(!this.inlineRuleClasses) {\n\t\tWikiParser.prototype.inlineRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"inline\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.inlineRuleClasses,\"$:/config/WikiParserRules/Inline/\");\n\t}\n\t// Save the parse text\n\tthis.type = type || \"text/vnd.tiddlywiki\";\n\tthis.source = text || \"\";\n\tthis.sourceLength = this.source.length;\n\t// Flag for ignoring whitespace\n\tthis.configTrimWhiteSpace = false;\n\t// Set current parse position\n\tthis.pos = 0;\n\t// Instantiate the pragma parse rules\n\tthis.pragmaRules = this.instantiateRules(this.pragmaRuleClasses,\"pragma\",0);\n\t// Instantiate the parser block and inline rules\n\tthis.blockRules = this.instantiateRules(this.blockRuleClasses,\"block\",0);\n\tthis.inlineRules = this.instantiateRules(this.inlineRuleClasses,\"inline\",0);\n\t// Parse any pragmas\n\tthis.tree = [];\n\tvar topBranch = this.parsePragmas();\n\t// Parse the text into inline runs or blocks\n\tif(options.parseAsInline) {\n\t\ttopBranch.push.apply(topBranch,this.parseInlineRun());\n\t} else {\n\t\ttopBranch.push.apply(topBranch,this.parseBlocks());\n\t}\n\t// Return the parse tree\n};\n\n/*\n*/\nWikiParser.prototype.loadRemoteTiddler = function(url) {\n\tvar self = this;\n\t$tw.utils.httpRequest({\n\t\turl: url,\n\t\ttype: \"GET\",\n\t\tcallback: function(err,data) {\n\t\t\tif(!err) {\n\t\t\t\tvar tiddlers = self.wiki.deserializeTiddlers(\".tid\",data,self.wiki.getCreationFields());\n\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\ttiddler[\"_canonical_uri\"] = url;\n\t\t\t\t});\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tself.wiki.addTiddlers(tiddlers);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\n*/\nWikiParser.prototype.setupRules = function(proto,configPrefix) {\n\tvar self = this;\n\tif(!$tw.safemode) {\n\t\t$tw.utils.each(proto,function(object,name) {\n\t\t\tif(self.wiki.getTiddlerText(configPrefix + name,\"enable\") !== \"enable\") {\n\t\t\t\tdelete proto[name];\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nInstantiate an array of parse rules\n*/\nWikiParser.prototype.instantiateRules = function(classes,type,startPos) {\n\tvar rulesInfo = [],\n\t\tself = this;\n\t$tw.utils.each(classes,function(RuleClass) {\n\t\t// Instantiate the rule\n\t\tvar rule = new RuleClass(self);\n\t\trule.is = {};\n\t\trule.is[type] = true;\n\t\trule.init(self);\n\t\tvar matchIndex = rule.findNextMatch(startPos);\n\t\tif(matchIndex !== undefined) {\n\t\t\trulesInfo.push({\n\t\t\t\trule: rule,\n\t\t\t\tmatchIndex: matchIndex\n\t\t\t});\n\t\t}\n\t});\n\treturn rulesInfo;\n};\n\n/*\nSkip any whitespace at the current position. Options are:\n\ttreatNewlinesAsNonWhitespace: true if newlines are NOT to be treated as whitespace\n*/\nWikiParser.prototype.skipWhitespace = function(options) {\n\toptions = options || {};\n\tvar whitespaceRegExp = options.treatNewlinesAsNonWhitespace ? /([^\\S\\n]+)/mg : /(\\s+)/mg;\n\twhitespaceRegExp.lastIndex = this.pos;\n\tvar whitespaceMatch = whitespaceRegExp.exec(this.source);\n\tif(whitespaceMatch && whitespaceMatch.index === this.pos) {\n\t\tthis.pos = whitespaceRegExp.lastIndex;\n\t}\n};\n\n/*\nGet the next match out of an array of parse rule instances\n*/\nWikiParser.prototype.findNextMatch = function(rules,startPos) {\n\t// Find the best matching rule by finding the closest match position\n\tvar matchingRule,\n\t\tmatchingRulePos = this.sourceLength;\n\t// Step through each rule\n\tfor(var t=0; t<rules.length; t++) {\n\t\tvar ruleInfo = rules[t];\n\t\t// Ask the rule to get the next match if we've moved past the current one\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex < startPos) {\n\t\t\truleInfo.matchIndex = ruleInfo.rule.findNextMatch(startPos);\n\t\t}\n\t\t// Adopt this match if it's closer than the current best match\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex <= matchingRulePos) {\n\t\t\tmatchingRule = ruleInfo;\n\t\t\tmatchingRulePos = ruleInfo.matchIndex;\n\t\t}\n\t}\n\treturn matchingRule;\n};\n\n/*\nParse any pragmas at the beginning of a block of parse text\n*/\nWikiParser.prototype.parsePragmas = function() {\n\tvar currentTreeBranch = this.tree;\n\twhile(true) {\n\t\t// Skip whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check for the end of the text\n\t\tif(this.pos >= this.sourceLength) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check if we've arrived at a pragma rule match\n\t\tvar nextMatch = this.findNextMatch(this.pragmaRules,this.pos);\n\t\t// If not, just exit\n\t\tif(!nextMatch || nextMatch.matchIndex !== this.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the pragma rule\n\t\tvar subTree = nextMatch.rule.parse();\n\t\tif(subTree.length > 0) {\n\t\t\t// Quick hack; we only cope with a single parse tree node being returned, which is true at the moment\n\t\t\tcurrentTreeBranch.push.apply(currentTreeBranch,subTree);\n\t\t\tsubTree[0].children = [];\n\t\t\tcurrentTreeBranch = subTree[0].children;\n\t\t}\n\t}\n\treturn currentTreeBranch;\n};\n\n/*\nParse a block from the current position\n\tterminatorRegExpString: optional regular expression string that identifies the end of plain paragraphs. Must not include capturing parenthesis\n*/\nWikiParser.prototype.parseBlock = function(terminatorRegExpString) {\n\tvar terminatorRegExp = terminatorRegExpString ? new RegExp(\"(\" + terminatorRegExpString + \"|\\\\r?\\\\n\\\\r?\\\\n)\",\"mg\") : /(\\r?\\n\\r?\\n)/mg;\n\tthis.skipWhitespace();\n\tif(this.pos >= this.sourceLength) {\n\t\treturn [];\n\t}\n\t// Look for a block rule that applies at the current position\n\tvar nextMatch = this.findNextMatch(this.blockRules,this.pos);\n\tif(nextMatch && nextMatch.matchIndex === this.pos) {\n\t\treturn nextMatch.rule.parse();\n\t}\n\t// Treat it as a paragraph if we didn't find a block rule\n\treturn [{type: \"element\", tag: \"p\", children: this.parseInlineRun(terminatorRegExp)}];\n};\n\n/*\nParse a series of blocks of text until a terminating regexp is encountered or the end of the text\n\tterminatorRegExpString: terminating regular expression\n*/\nWikiParser.prototype.parseBlocks = function(terminatorRegExpString) {\n\tif(terminatorRegExpString) {\n\t\treturn this.parseBlocksTerminated(terminatorRegExpString);\n\t} else {\n\t\treturn this.parseBlocksUnterminated();\n\t}\n};\n\n/*\nParse a block from the current position to the end of the text\n*/\nWikiParser.prototype.parseBlocksUnterminated = function() {\n\tvar tree = [];\n\twhile(this.pos < this.sourceLength) {\n\t\ttree.push.apply(tree,this.parseBlock());\n\t}\n\treturn tree;\n};\n\n/*\nParse blocks of text until a terminating regexp is encountered\n*/\nWikiParser.prototype.parseBlocksTerminated = function(terminatorRegExpString) {\n\tvar terminatorRegExp = new RegExp(\"(\" + terminatorRegExpString + \")\",\"mg\"),\n\t\ttree = [];\n\t// Skip any whitespace\n\tthis.skipWhitespace();\n\t// Check if we've got the end marker\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar match = terminatorRegExp.exec(this.source);\n\t// Parse the text into blocks\n\twhile(this.pos < this.sourceLength && !(match && match.index === this.pos)) {\n\t\tvar blocks = this.parseBlock(terminatorRegExpString);\n\t\ttree.push.apply(tree,blocks);\n\t\t// Skip any whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check if we've got the end marker\n\t\tterminatorRegExp.lastIndex = this.pos;\n\t\tmatch = terminatorRegExp.exec(this.source);\n\t}\n\tif(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t}\n\treturn tree;\n};\n\n/*\nParse a run of text at the current position\n\tterminatorRegExp: a regexp at which to stop the run\n\toptions: see below\nOptions available:\n\teatTerminator: move the parse position past any encountered terminator (default false)\n*/\nWikiParser.prototype.parseInlineRun = function(terminatorRegExp,options) {\n\tif(terminatorRegExp) {\n\t\treturn this.parseInlineRunTerminated(terminatorRegExp,options);\n\t} else {\n\t\treturn this.parseInlineRunUnterminated(options);\n\t}\n};\n\nWikiParser.prototype.parseInlineRunUnterminated = function(options) {\n\tvar tree = [];\n\t// Find the next occurrence of an inline rule\n\tvar nextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around the matches until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && nextMatch) {\n\t\t// Process the text preceding the run rule\n\t\tif(nextMatch.matchIndex > this.pos) {\n\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,nextMatch.matchIndex));\n\t\t\tthis.pos = nextMatch.matchIndex;\n\t\t}\n\t\t// Process the run rule\n\t\ttree.push.apply(tree,nextMatch.rule.parse());\n\t\t// Look for the next run rule\n\t\tnextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\tthis.pushTextWidget(tree,this.source.substr(this.pos));\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\nWikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,options) {\n\toptions = options || {};\n\tvar tree = [];\n\t// Find the next occurrence of the terminator\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar terminatorMatch = terminatorRegExp.exec(this.source);\n\t// Find the next occurrence of a inlinerule\n\tvar inlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && (terminatorMatch || inlineRuleMatch)) {\n\t\t// Return if we've found the terminator, and it precedes any inline rule match\n\t\tif(terminatorMatch) {\n\t\t\tif(!inlineRuleMatch || inlineRuleMatch.matchIndex >= terminatorMatch.index) {\n\t\t\t\tif(terminatorMatch.index > this.pos) {\n\t\t\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,terminatorMatch.index));\n\t\t\t\t}\n\t\t\t\tthis.pos = terminatorMatch.index;\n\t\t\t\tif(options.eatTerminator) {\n\t\t\t\t\tthis.pos += terminatorMatch[0].length;\n\t\t\t\t}\n\t\t\t\treturn tree;\n\t\t\t}\n\t\t}\n\t\t// Process any inline rule, along with the text preceding it\n\t\tif(inlineRuleMatch) {\n\t\t\t// Preceding text\n\t\t\tif(inlineRuleMatch.matchIndex > this.pos) {\n\t\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,inlineRuleMatch.matchIndex));\n\t\t\t\tthis.pos = inlineRuleMatch.matchIndex;\n\t\t\t}\n\t\t\t// Process the inline rule\n\t\t\ttree.push.apply(tree,inlineRuleMatch.rule.parse());\n\t\t\t// Look for the next inline rule\n\t\t\tinlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t\t\t// Look for the next terminator match\n\t\t\tterminatorRegExp.lastIndex = this.pos;\n\t\t\tterminatorMatch = terminatorRegExp.exec(this.source);\n\t\t}\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\tthis.pushTextWidget(tree,this.source.substr(this.pos));\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\n/*\nPush a text widget onto an array, respecting the configTrimWhiteSpace setting\n*/\nWikiParser.prototype.pushTextWidget = function(array,text) {\n\tif(this.configTrimWhiteSpace) {\n\t\ttext = $tw.utils.trim(text);\n\t}\n\tif(text) {\n\t\tarray.push({type: \"text\", text: text});\t\t\n\t}\n};\n\n/*\nParse zero or more class specifiers `.classname`\n*/\nWikiParser.prototype.parseClasses = function() {\n\tvar classRegExp = /\\.([^\\s\\.]+)/mg,\n\t\tclassNames = [];\n\tclassRegExp.lastIndex = this.pos;\n\tvar match = classRegExp.exec(this.source);\n\twhile(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t\tclassNames.push(match[1]);\n\t\tmatch = classRegExp.exec(this.source);\n\t}\n\treturn classNames;\n};\n\n/*\nAmend the rules used by this instance of the parser\n\ttype: `only` keeps just the named rules, `except` keeps all but the named rules\n\tnames: array of rule names\n*/\nWikiParser.prototype.amendRules = function(type,names) {\n\tnames = names || [];\n\t// Define the filter function\n\tvar target;\n\tif(type === \"only\") {\n\t\ttarget = true;\n\t} else if(type === \"except\") {\n\t\ttarget = false;\n\t} else {\n\t\treturn;\n\t}\n\t// Define a function to process each of our rule arrays\n\tvar processRuleArray = function(ruleArray) {\n\t\tfor(var t=ruleArray.length-1; t>=0; t--) {\n\t\t\tif((names.indexOf(ruleArray[t].rule.name) === -1) === target) {\n\t\t\t\truleArray.splice(t,1);\n\t\t\t}\n\t\t}\n\t};\n\t// Process each rule array\n\tprocessRuleArray(this.pragmaRules);\n\tprocessRuleArray(this.blockRules);\n\tprocessRuleArray(this.inlineRules);\n};\n\nexports[\"text/vnd.tiddlywiki\"] = WikiParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/wikiparser/rules/wikirulebase.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/wikirulebase.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikirulebase.js\ntype: application/javascript\nmodule-type: global\n\nBase class for wiki parser rules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nThis constructor is always overridden with a blank constructor, and so shouldn't be used\n*/\nvar WikiRuleBase = function() {\n};\n\n/*\nTo be overridden by individual rules\n*/\nWikiRuleBase.prototype.init = function(parser) {\n\tthis.parser = parser;\n};\n\n/*\nDefault implementation of findNextMatch uses RegExp matching\n*/\nWikiRuleBase.prototype.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\treturn this.match ? this.match.index : undefined;\n};\n\nexports.WikiRuleBase = WikiRuleBase;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/pluginswitcher.js": {
"title": "$:/core/modules/pluginswitcher.js",
"text": "/*\\\ntitle: $:/core/modules/pluginswitcher.js\ntype: application/javascript\nmodule-type: global\n\nManages switching plugins for themes and languages.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\noptions:\nwiki: wiki store to be used\npluginType: type of plugin to be switched\ncontrollerTitle: title of tiddler used to control switching of this resource\ndefaultPlugins: array of default plugins to be used if nominated plugin isn't found\nonSwitch: callback when plugin is switched (single parameter is array of plugin titles)\n*/\nfunction PluginSwitcher(options) {\n\tthis.wiki = options.wiki;\n\tthis.pluginType = options.pluginType;\n\tthis.controllerTitle = options.controllerTitle;\n\tthis.defaultPlugins = options.defaultPlugins || [];\n\tthis.onSwitch = options.onSwitch;\n\t// Switch to the current plugin\n\tthis.switchPlugins();\n\t// Listen for changes to the selected plugin\n\tvar self = this;\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,self.controllerTitle)) {\n\t\t\tself.switchPlugins();\n\t\t}\n\t});\n}\n\nPluginSwitcher.prototype.switchPlugins = function() {\n\t// Get the name of the current theme\n\tvar selectedPluginTitle = this.wiki.getTiddlerText(this.controllerTitle);\n\t// If it doesn't exist, then fallback to one of the default themes\n\tvar index = 0;\n\twhile(!this.wiki.getTiddler(selectedPluginTitle) && index < this.defaultPlugins.length) {\n\t\tselectedPluginTitle = this.defaultPlugins[index++];\n\t}\n\t// Accumulate the titles of the plugins that we need to load\n\tvar plugins = [],\n\t\tself = this,\n\t\taccumulatePlugin = function(title) {\n\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\tif(tiddler && tiddler.isPlugin() && plugins.indexOf(title) === -1) {\n\t\t\t\tplugins.push(title);\n\t\t\t\tvar pluginInfo = JSON.parse(self.wiki.getTiddlerText(title)),\n\t\t\t\t\tdependents = $tw.utils.parseStringArray(tiddler.fields.dependents || \"\");\n\t\t\t\t$tw.utils.each(dependents,function(title) {\n\t\t\t\t\taccumulatePlugin(title);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\taccumulatePlugin(selectedPluginTitle);\n\t// Read the plugin info for the incoming plugins\n\tvar changes = $tw.wiki.readPluginInfo(plugins);\n\t// Unregister any existing theme tiddlers\n\tvar unregisteredTiddlers = $tw.wiki.unregisterPluginTiddlers(this.pluginType);\n\t// Register any new theme tiddlers\n\tvar registeredTiddlers = $tw.wiki.registerPluginTiddlers(this.pluginType,plugins);\n\t// Unpack the current theme tiddlers\n\t$tw.wiki.unpackPluginTiddlers();\n\t// Call the switch handler\n\tif(this.onSwitch) {\n\t\tthis.onSwitch(plugins);\n\t}\n};\n\nexports.PluginSwitcher = PluginSwitcher;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/saver-handler.js": {
"title": "$:/core/modules/saver-handler.js",
"text": "/*\\\ntitle: $:/core/modules/saver-handler.js\ntype: application/javascript\nmodule-type: global\n\nThe saver handler tracks changes to the store and handles saving the entire wiki via saver modules.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInstantiate the saver handler with the following options:\nwiki: wiki to be synced\ndirtyTracking: true if dirty tracking should be performed\n*/\nfunction SaverHandler(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\tthis.dirtyTracking = options.dirtyTracking;\n\tthis.preloadDirty = options.preloadDirty || [];\n\tthis.pendingAutoSave = false;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"saver-handler\");\n\t// Initialise our savers\n\tif($tw.browser) {\n\t\tthis.initSavers();\n\t}\n\t// Only do dirty tracking if required\n\tif($tw.browser && this.dirtyTracking) {\n\t\t// Compile the dirty tiddler filter\n\t\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t\t// Count of changes that have not yet been saved\n\t\tvar filteredChanges = self.filterFn.call(self.wiki,function(iterator) {\n\t\t\t\t$tw.utils.each(self.preloadDirty,function(title) {\n\t\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\t\titerator(tiddler,title);\n\t\t\t\t});\n\t\t});\n\t\tthis.numChanges = filteredChanges.length;\n\t\t// Listen out for changes to tiddlers\n\t\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\t\t// Filter the changes so that we only count changes to tiddlers that we care about\n\t\t\tvar filteredChanges = self.filterFn.call(self.wiki,function(iterator) {\n\t\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\t\titerator(tiddler,title);\n\t\t\t\t});\n\t\t\t});\n\t\t\t// Adjust the number of changes\n\t\t\tself.numChanges += filteredChanges.length;\n\t\t\tself.updateDirtyStatus();\n\t\t\t// Do any autosave if one is pending and there's no more change events\n\t\t\tif(self.pendingAutoSave && self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tself.pendingAutoSave = false;\n\t\t\t}\n\t\t});\n\t\t// Listen for the autosave event\n\t\t$tw.rootWidget.addEventListener(\"tm-auto-save-wiki\",function(event) {\n\t\t\t// Do the autosave unless there are outstanding tiddler change events\n\t\t\tif(self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise put ourselves in the \"pending autosave\" state and wait for the change event before we do the autosave\n\t\t\t\tself.pendingAutoSave = true;\n\t\t\t}\n\t\t});\n\t\t// Set up our beforeunload handler\n\t\t$tw.addUnloadTask(function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t}\n\t// Install the save action handlers\n\tif($tw.browser) {\n\t\t$tw.rootWidget.addEventListener(\"tm-save-wiki\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-download-file\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\tmethod: \"download\",\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t}\n}\n\nSaverHandler.prototype.titleSyncFilter = \"$:/config/SaverFilter\";\nSaverHandler.prototype.titleAutoSave = \"$:/config/AutoSave\";\nSaverHandler.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\n\n/*\nSelect the appropriate saver modules and set them up\n*/\nSaverHandler.prototype.initSavers = function(moduleType) {\n\tmoduleType = moduleType || \"saver\";\n\t// Instantiate the available savers\n\tthis.savers = [];\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tif(module.canSave(self)) {\n\t\t\tself.savers.push(module.create(self.wiki));\n\t\t}\n\t});\n\t// Sort the savers into priority order\n\tthis.savers.sort(function(a,b) {\n\t\tif(a.info.priority < b.info.priority) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(a.info.priority > b.info.priority) {\n\t\t\t\treturn +1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nSave the wiki contents. Options are:\n\tmethod: \"save\", \"autosave\" or \"download\"\n\ttemplate: the tiddler containing the template to save\n\tdownloadType: the content type for the saved file\n*/\nSaverHandler.prototype.saveWiki = function(options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tmethod = options.method || \"save\";\n\t// Ignore autosave if disabled\n\tif(method === \"autosave\" && ($tw.config.disableAutoSave || this.wiki.getTiddlerText(this.titleAutoSave,\"yes\") !== \"yes\")) {\n\t\treturn false;\n\t}\n\tvar\tvariables = options.variables || {},\n\t\ttemplate = options.template || \"$:/core/save/all\",\n\t\tdownloadType = options.downloadType || \"text/plain\",\n\t\ttext = this.wiki.renderTiddler(downloadType,template,options),\n\t\tcallback = function(err) {\n\t\t\tif(err) {\n\t\t\t\talert($tw.language.getString(\"Error/WhileSaving\") + \":\\n\\n\" + err);\n\t\t\t} else {\n\t\t\t\t// Clear the task queue if we're saving (rather than downloading)\n\t\t\t\tif(method !== \"download\") {\n\t\t\t\t\tself.numChanges = 0;\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t}\n\t\t\t\t$tw.notifier.display(self.titleSavedNotification);\n\t\t\t\tif(options.callback) {\n\t\t\t\t\toptions.callback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t// Call the highest priority saver that supports this method\n\tfor(var t=this.savers.length-1; t>=0; t--) {\n\t\tvar saver = this.savers[t];\n\t\tif(saver.info.capabilities.indexOf(method) !== -1 && saver.save(text,method,callback,{variables: {filename: variables.filename}})) {\n\t\t\tthis.logger.log(\"Saving wiki with method\",method,\"through saver\",saver.info.name);\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSaverHandler.prototype.isDirty = function() {\n\treturn this.numChanges > 0;\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSaverHandler.prototype.updateDirtyStatus = function() {\n\tvar self = this;\n\tif($tw.browser) {\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",this.isDirty());\n\t\t$tw.utils.each($tw.windows,function(win) {\n\t\t\t$tw.utils.toggleClass(win.document.body,\"tc-dirty\",self.isDirty());\n\t\t});\n\t}\n};\n\nexports.SaverHandler = SaverHandler;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/savers/andtidwiki.js": {
"title": "$:/core/modules/savers/andtidwiki.js",
"text": "/*\\\ntitle: $:/core/modules/savers/andtidwiki.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the AndTidWiki Android app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar AndTidWiki = function(wiki) {\n};\n\nAndTidWiki.prototype.save = function(text,method,callback,options) {\n\tvar filename = options && options.variables ? options.variables.filename : null;\n\tif (method === \"download\") {\n\t\t// Support download\n\t\tif (window.twi.saveDownload) {\n\t\t\ttry {\n\t\t\t\twindow.twi.saveDownload(text,filename);\n\t\t\t} catch(err) {\n\t\t\t\tif (err.message === \"Method not found\") {\n\t\t\t\t\twindow.twi.saveDownload(text);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tvar link = document.createElement(\"a\");\n\t\t\tlink.setAttribute(\"href\",\"data:text/plain,\" + encodeURIComponent(text));\n\t\t\tif (filename) {\n\t\t\t link.setAttribute(\"download\",filename);\n\t\t\t}\n\t\t\tdocument.body.appendChild(link);\n\t\t\tlink.click();\n\t\t\tdocument.body.removeChild(link);\n\t\t}\n\t} else if (window.twi.saveWiki) {\n\t\t// Direct save in Tiddloid\n\t\twindow.twi.saveWiki(text);\n\t} else {\n\t\t// Get the pathname of this document\n\t\tvar pathname = decodeURIComponent(document.location.toString().split(\"#\")[0]);\n\t\t// Strip the file://\n\t\tif(pathname.indexOf(\"file://\") === 0) {\n\t\t\tpathname = pathname.substr(7);\n\t\t}\n\t\t// Strip any query or location part\n\t\tvar p = pathname.indexOf(\"?\");\n\t\tif(p !== -1) {\n\t\t\tpathname = pathname.substr(0,p);\n\t\t}\n\t\tp = pathname.indexOf(\"#\");\n\t\tif(p !== -1) {\n\t\t\tpathname = pathname.substr(0,p);\n\t\t}\n\t\t// Save the file\n\t\twindow.twi.saveFile(pathname,text);\n\t}\n\t// Call the callback\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nAndTidWiki.prototype.info = {\n\tname: \"andtidwiki\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.twi && !!window.twi.saveFile;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new AndTidWiki(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/beaker.js": {
"title": "$:/core/modules/savers/beaker.js",
"text": "/*\\\ntitle: $:/core/modules/savers/beaker.js\ntype: application/javascript\nmodule-type: saver\n\nSaves files using the Beaker browser's (https://beakerbrowser.com) Dat protocol (https://datproject.org/)\nCompatible with beaker >= V0.7.2\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet up the saver\n*/\nvar BeakerSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nBeakerSaver.prototype.save = function(text,method,callback) {\n\tvar dat = new DatArchive(\"\" + window.location),\n\t\tpathname = (\"\" + window.location.pathname).split(\"#\")[0];\n\tdat.stat(pathname).then(function(value) {\n\t\tif(value.isDirectory()) {\n\t\t\tpathname = pathname + \"/index.html\";\n\t\t}\n\t\tdat.writeFile(pathname,text,\"utf8\").then(function(value) {\n\t\t\tcallback(null);\n\t\t},function(reason) {\n\t\t\tcallback(\"Beaker Saver Write Error: \" + reason);\n\t\t});\n\t},function(reason) {\n\t\tcallback(\"Beaker Saver Stat Error: \" + reason);\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nBeakerSaver.prototype.info = {\n\tname: \"beaker\",\n\tpriority: 3000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.DatArchive && location.protocol===\"dat:\";\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new BeakerSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/custom.js": {
"title": "$:/core/modules/savers/custom.js",
"text": "/*\\\ntitle: $:/core/modules/savers/custom.js\ntype: application/javascript\nmodule-type: saver\n\nLooks for `window.$tw.customSaver` first on the current window, then\non the parent window (of an iframe). If present, the saver must define\n\tsave: function(text,method,callback) { ... }\nand the saver may define\n\tpriority: number\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar findSaver = function(window) {\n\ttry {\n\t\treturn window && window.$tw && window.$tw.customSaver;\n\t} catch (err) {\n\t\t// Catching the exception is the most reliable way to detect cross-origin iframe errors.\n\t\t// For example, instead of saying that `window.parent.$tw` is undefined, Firefox will throw\n\t\t// Uncaught DOMException: Permission denied to access property \"$tw\" on cross-origin object\n\t\tconsole.log({ msg: \"custom saver is disabled\", reason: err });\n\t\treturn null;\n\t}\n}\nvar saver = findSaver(window) || findSaver(window.parent) || {};\n\nvar CustomSaver = function(wiki) {\n};\n\nCustomSaver.prototype.save = function(text,method,callback) {\n\treturn saver.save(text, method, callback);\n};\n\n/*\nInformation about this saver\n*/\nCustomSaver.prototype.info = {\n\tname: \"custom\",\n\tpriority: saver.priority || 4000,\n\tcapabilities: [\"save\",\"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!(saver.save);\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new CustomSaver(wiki);\n};\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/download.js": {
"title": "$:/core/modules/savers/download.js",
"text": "/*\\\ntitle: $:/core/modules/savers/download.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar DownloadSaver = function(wiki) {\n};\n\nDownloadSaver.prototype.save = function(text,method,callback,options) {\n\toptions = options || {};\n\t// Get the current filename\n\tvar filename = options.variables.filename;\n\tif(!filename) {\n\t\tvar p = document.location.pathname.lastIndexOf(\"/\");\n\t\tif(p !== -1) {\n\t\t\t// We decode the pathname because document.location is URL encoded by the browser\n\t\t\tfilename = decodeURIComponent(document.location.pathname.substr(p+1));\n\t\t}\n\t}\n\tif(!filename) {\n\t\tfilename = \"tiddlywiki.html\";\n\t}\n\t// Set up the link\n\tvar link = document.createElement(\"a\");\n\tif(Blob !== undefined) {\n\t\tvar blob = new Blob([text], {type: \"text/html\"});\n\t\tlink.setAttribute(\"href\", URL.createObjectURL(blob));\n\t} else {\n\t\tlink.setAttribute(\"href\",\"data:text/html,\" + encodeURIComponent(text));\n\t}\n\tlink.setAttribute(\"download\",filename);\n\tdocument.body.appendChild(link);\n\tlink.click();\n\tdocument.body.removeChild(link);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nDownloadSaver.prototype.info = {\n\tname: \"download\",\n\tpriority: 100\n};\n\nObject.defineProperty(DownloadSaver.prototype.info, \"capabilities\", {\n\tget: function() {\n\t\tvar capabilities = [\"save\", \"download\"];\n\t\tif(($tw.wiki.getTextReference(\"$:/config/DownloadSaver/AutoSave\") || \"\").toLowerCase() === \"yes\") {\n\t\t\tcapabilities.push(\"autosave\");\n\t\t}\n\t\treturn capabilities;\n\t}\n});\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn document.createElement(\"a\").download !== undefined;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new DownloadSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/fsosaver.js": {
"title": "$:/core/modules/savers/fsosaver.js",
"text": "/*\\\ntitle: $:/core/modules/savers/fsosaver.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via MS FileSystemObject ActiveXObject\n\nNote: Since TiddlyWiki's markup contains the MOTW, the FileSystemObject normally won't be available. \nHowever, if the wiki is loaded as an .HTA file (Windows HTML Applications) then the FSO can be used.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar FSOSaver = function(wiki) {\n};\n\nFSOSaver.prototype.save = function(text,method,callback) {\n\t// Get the pathname of this document\n\tvar pathname = unescape(document.location.pathname);\n\t// Test for a Windows path of the form /x:\\blah...\n\tif(/^\\/[A-Z]\\:\\\\[^\\\\]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t} else if(document.location.hostname !== \"\" && /^\\/\\\\[^\\\\]+\\\\[^\\\\]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t\t// reconstruct UNC path\n\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t} else {\n\t\treturn false;\n\t}\n\t// Save the file (as UTF-16)\n\tvar fso = new ActiveXObject(\"Scripting.FileSystemObject\");\n\tvar file = fso.OpenTextFile(pathname,2,-1,-1);\n\tfile.Write(text);\n\tfile.Close();\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nFSOSaver.prototype.info = {\n\tname: \"FSOSaver\",\n\tpriority: 120,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\ttry {\n\t\treturn (window.location.protocol === \"file:\") && !!(new ActiveXObject(\"Scripting.FileSystemObject\"));\n\t} catch(e) { return false; }\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new FSOSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/gitea.js": {
"title": "$:/core/modules/savers/gitea.js",
"text": "/*\\\ntitle: $:/core/modules/savers/gitea.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by pushing a commit to the gitea\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar GiteaSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nGiteaSaver.prototype.save = function(text,method,callback) {\n\tvar self = this,\n\t\tusername = this.wiki.getTiddlerText(\"$:/Gitea/Username\"),\n\t\tpassword = $tw.utils.getPassword(\"Gitea\"),\n\t\trepo = this.wiki.getTiddlerText(\"$:/Gitea/Repo\"),\n\t\tpath = this.wiki.getTiddlerText(\"$:/Gitea/Path\",\"\"),\n\t\tfilename = this.wiki.getTiddlerText(\"$:/Gitea/Filename\"),\n\t\tbranch = this.wiki.getTiddlerText(\"$:/Gitea/Branch\") || \"master\",\n\t\tendpoint = this.wiki.getTiddlerText(\"$:/Gitea/ServerURL\") || \"https://gitea\",\n\t\theaders = {\n\t\t\t\"Accept\": \"application/json\",\n\t\t\t\"Content-Type\": \"application/json;charset=UTF-8\",\n\t\t\t\"Authorization\": \"token \" + password\n\t\t};\n\t// Bail if we don't have everything we need\n\tif(!username || !password || !repo || !filename) {\n\t\treturn false;\n\t}\n\t// Make sure the path start and ends with a slash\n\tif(path.substring(0,1) !== \"/\") {\n\t\tpath = \"/\" + path;\n\t}\n\tif(path.substring(path.length - 1) !== \"/\") {\n\t\tpath = path + \"/\";\n\t}\n\t// Compose the base URI\n\tvar uri = endpoint + \"/repos/\" + repo + \"/contents\" + path;\n\t// Perform a get request to get the details (inc shas) of files in the same path as our file\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"GET\",\n\t\theaders: headers,\n\t\tdata: {\n\t\t\tref: branch\n\t\t},\n\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\tvar getResponseData,sha = \"\";\n\t\t\tif(err && xhr.status !== 404) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tvar use_put = true;\n\t\t\tif(xhr.status !== 404) {\n\t\t\t\tgetResponseData = JSON.parse(getResponseDataJson);\n\t\t\t\t$tw.utils.each(getResponseData,function(details) {\n\t\t\t\t\tif(details.name === filename) {\n\t\t\t\t\t\tsha = details.sha;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(sha === \"\"){\n\t\t\t\t\tuse_put = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\tmessage: $tw.language.getRawString(\"ControlPanel/Saving/GitService/CommitMessage\"),\n\t\t\t\tcontent: $tw.utils.base64Encode(text),\n\t\t\t\tsha: sha\n\t\t\t};\n\t\t\t$tw.utils.httpRequest({\n\t\t\t\turl: endpoint + \"/repos/\" + repo + \"/branches/\" + branch,\n\t\t\t\ttype: \"GET\",\n\t\t\t\theaders: headers,\n\t\t\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\t\t\tif(xhr.status === 404) {\n\t\t\t\t\t\tcallback(\"Please ensure the branch in the Gitea repo exists\");\n\t\t\t\t\t}else{\n\t\t\t\t\t\tdata[\"branch\"] = branch;\n\t\t\t\t\t\tself.upload(uri + filename, use_put?\"PUT\":\"POST\", headers, data, callback);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\treturn true;\n};\n\nGiteaSaver.prototype.upload = function(uri,method,headers,data,callback) {\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: method,\n\t\theaders: headers,\n\t\tdata: JSON.stringify(data),\n\t\tcallback: function(err,putResponseDataJson,xhr) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tvar putResponseData = JSON.parse(putResponseDataJson);\n\t\t\tcallback(null);\n\t\t}\n\t});\n};\n\n/*\nInformation about this saver\n*/\nGiteaSaver.prototype.info = {\n\tname: \"Gitea\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new GiteaSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/github.js": {
"title": "$:/core/modules/savers/github.js",
"text": "/*\\\ntitle: $:/core/modules/savers/github.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by pushing a commit to the GitHub v3 REST API\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar GitHubSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nGitHubSaver.prototype.save = function(text,method,callback) {\n\tvar self = this,\n\t\tusername = this.wiki.getTiddlerText(\"$:/GitHub/Username\"),\n\t\tpassword = $tw.utils.getPassword(\"github\"),\n\t\trepo = this.wiki.getTiddlerText(\"$:/GitHub/Repo\"),\n\t\tpath = this.wiki.getTiddlerText(\"$:/GitHub/Path\",\"\"),\n\t\tfilename = this.wiki.getTiddlerText(\"$:/GitHub/Filename\"),\n\t\tbranch = this.wiki.getTiddlerText(\"$:/GitHub/Branch\") || \"main\",\n\t\tendpoint = this.wiki.getTiddlerText(\"$:/GitHub/ServerURL\") || \"https://api.github.com\",\n\t\theaders = {\n\t\t\t\"Accept\": \"application/vnd.github.v3+json\",\n\t\t\t\"Content-Type\": \"application/json;charset=UTF-8\",\n\t\t\t\"Authorization\": \"Basic \" + window.btoa(username + \":\" + password),\n\t\t\t\"If-None-Match\": \"\"\n\t\t};\n\t// Bail if we don't have everything we need\n\tif(!username || !password || !repo || !filename) {\n\t\treturn false;\n\t}\n\t// Make sure the path start and ends with a slash\n\tif(path.substring(0,1) !== \"/\") {\n\t\tpath = \"/\" + path;\n\t}\n\tif(path.substring(path.length - 1) !== \"/\") {\n\t\tpath = path + \"/\";\n\t}\n\t// Compose the base URI\n\tvar uri = endpoint + \"/repos/\" + repo + \"/contents\" + path;\n\t// Perform a get request to get the details (inc shas) of files in the same path as our file\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"GET\",\n\t\theaders: headers,\n\t\tdata: {\n\t\t\tref: branch\n\t\t},\n\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\tvar getResponseData,sha = \"\";\n\t\t\tif(err && xhr.status !== 404) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tif(xhr.status !== 404) {\n\t\t\t\tgetResponseData = JSON.parse(getResponseDataJson);\n\t\t\t\t$tw.utils.each(getResponseData,function(details) {\n\t\t\t\t\tif(details.name === filename) {\n\t\t\t\t\t\tsha = details.sha;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\tmessage: $tw.language.getRawString(\"ControlPanel/Saving/GitService/CommitMessage\"),\n\t\t\t\tcontent: $tw.utils.base64Encode(text),\n\t\t\t\tbranch: branch,\n\t\t\t\tsha: sha\n\t\t\t};\n\t\t\t// Perform a PUT request to save the file\n\t\t\t$tw.utils.httpRequest({\n\t\t\t\turl: uri + filename,\n\t\t\t\ttype: \"PUT\",\n\t\t\t\theaders: headers,\n\t\t\t\tdata: JSON.stringify(data),\n\t\t\t\tcallback: function(err,putResponseDataJson,xhr) {\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\treturn callback(err);\n\t\t\t\t\t}\n\t\t\t\t\tvar putResponseData = JSON.parse(putResponseDataJson);\n\t\t\t\t\tcallback(null);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nGitHubSaver.prototype.info = {\n\tname: \"github\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new GitHubSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/gitlab.js": {
"title": "$:/core/modules/savers/gitlab.js",
"text": "/*\\\ntitle: $:/core/modules/savers/gitlab.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by pushing a commit to the GitLab REST API\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: true */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar GitLabSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nGitLabSaver.prototype.save = function(text,method,callback) {\n\t/* See https://docs.gitlab.com/ee/api/repository_files.html */\n\tvar self = this,\n\t\tusername = this.wiki.getTiddlerText(\"$:/GitLab/Username\"),\n\t\tpassword = $tw.utils.getPassword(\"gitlab\"),\n\t\trepo = this.wiki.getTiddlerText(\"$:/GitLab/Repo\"),\n\t\tpath = this.wiki.getTiddlerText(\"$:/GitLab/Path\",\"\"),\n\t\tfilename = this.wiki.getTiddlerText(\"$:/GitLab/Filename\"),\n\t\tbranch = this.wiki.getTiddlerText(\"$:/GitLab/Branch\") || \"master\",\n\t\tendpoint = this.wiki.getTiddlerText(\"$:/GitLab/ServerURL\") || \"https://gitlab.com/api/v4\",\n\t\theaders = {\n\t\t\t\"Content-Type\": \"application/json;charset=UTF-8\",\n\t\t\t\"Private-Token\": password\n\t\t};\n\t// Bail if we don't have everything we need\n\tif(!username || !password || !repo || !filename) {\n\t\treturn false;\n\t}\n\t// Make sure the path start and ends with a slash\n\tif(path.substring(0,1) !== \"/\") {\n\t\tpath = \"/\" + path;\n\t}\n\tif(path.substring(path.length - 1) !== \"/\") {\n\t\tpath = path + \"/\";\n\t}\n\t// Compose the base URI\n\tvar uri = endpoint + \"/projects/\" + encodeURIComponent(repo) + \"/repository/\";\n\t// Perform a get request to get the details (inc shas) of files in the same path as our file\n\t$tw.utils.httpRequest({\n\t\turl: uri + \"tree/?path=\" + encodeURIComponent(path.replace(/^\\/+|\\/$/g, '')) + \"&branch=\" + encodeURIComponent(branch.replace(/^\\/+|\\/$/g, '')),\n\t\ttype: \"GET\",\n\t\theaders: headers,\n\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\tvar getResponseData,sha = \"\";\n\t\t\tif(err && xhr.status !== 404) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tvar requestType = \"POST\";\n\t\t\tif(xhr.status !== 404) {\n\t\t\t\tgetResponseData = JSON.parse(getResponseDataJson);\n\t\t\t\t$tw.utils.each(getResponseData,function(details) {\n\t\t\t\t\tif(details.name === filename) {\n\t\t\t\t\t\trequestType = \"PUT\";\n\t\t\t\t\t\tsha = details.sha;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\tcommit_message: $tw.language.getRawString(\"ControlPanel/Saving/GitService/CommitMessage\"),\n\t\t\t\tcontent: text,\n\t\t\t\tbranch: branch,\n\t\t\t\tsha: sha\n\t\t\t};\n\t\t\t// Perform a request to save the file\n\t\t\t$tw.utils.httpRequest({\n\t\t\t\turl: uri + \"files/\" + encodeURIComponent(path.replace(/^\\/+/, '') + filename),\n\t\t\t\ttype: requestType,\n\t\t\t\theaders: headers,\n\t\t\t\tdata: JSON.stringify(data),\n\t\t\t\tcallback: function(err,putResponseDataJson,xhr) {\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\treturn callback(err);\n\t\t\t\t\t}\n\t\t\t\t\tvar putResponseData = JSON.parse(putResponseDataJson);\n\t\t\t\t\tcallback(null);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nGitLabSaver.prototype.info = {\n\tname: \"gitlab\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new GitLabSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/hyperdrive.js": {
"title": "$:/core/modules/savers/hyperdrive.js",
"text": "/*\\\ntitle: $:/core/modules/savers/hyperdrive.js\ntype: application/javascript\nmodule-type: saver\n\nSaves files using the Hyperdrive Protocol (https://hypercore-protocol.org/#hyperdrive) Beaker browser beta-1.0 and later (https://beakerbrowser.com)\nCompatible with beaker >= V1.0.0\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet up the saver\n*/\nvar HyperdriveSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nHyperdriveSaver.prototype.save = function(text,method,callback) {\n\tvar dat = beaker.hyperdrive.drive(\"\" + window.location),\n\t\tpathname = (\"\" + window.location.pathname).split(\"#\")[0];\n\tdat.stat(pathname).then(function(value) {\n\t\tif(value.isDirectory()) {\n\t\t\tpathname = pathname + \"/index.html\";\n\t\t}\n\t\tdat.writeFile(pathname,text,\"utf8\").then(function(value) {\n\t\t\tcallback(null);\n\t\t},function(reason) {\n\t\t\tcallback(\"Hyperdrive Saver Write Error: \" + reason);\n\t\t});\n\t},function(reason) {\n\t\tcallback(\"Hyperdrive Saver Stat Error: \" + reason);\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nHyperdriveSaver.prototype.info = {\n\tname: \"beaker-1.x\",\n\tpriority: 3000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.beaker && !!beaker.hyperdrive && location.protocol===\"hyper:\";\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new HyperdriveSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/manualdownload.js": {
"title": "$:/core/modules/savers/manualdownload.js",
"text": "/*\\\ntitle: $:/core/modules/savers/manualdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Title of the tiddler containing the download message\nvar downloadInstructionsTitle = \"$:/language/Modals/Download\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar ManualDownloadSaver = function(wiki) {\n};\n\nManualDownloadSaver.prototype.save = function(text,method,callback) {\n\t$tw.modal.display(downloadInstructionsTitle,{\n\t\tdownloadLink: \"data:text/html,\" + encodeURIComponent(text)\n\t});\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nManualDownloadSaver.prototype.info = {\n\tname: \"manualdownload\",\n\tpriority: 0,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new ManualDownloadSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/msdownload.js": {
"title": "$:/core/modules/savers/msdownload.js",
"text": "/*\\\ntitle: $:/core/modules/savers/msdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via window.navigator.msSaveBlob()\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar MsDownloadSaver = function(wiki) {\n};\n\nMsDownloadSaver.prototype.save = function(text,method,callback) {\n\t// Get the current filename\n\tvar filename = \"tiddlywiki.html\",\n\t\tp = document.location.pathname.lastIndexOf(\"/\");\n\tif(p !== -1) {\n\t\tfilename = document.location.pathname.substr(p+1);\n\t}\n\t// Set up the link\n\tvar blob = new Blob([text], {type: \"text/html\"});\n\twindow.navigator.msSaveBlob(blob,filename);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nMsDownloadSaver.prototype.info = {\n\tname: \"msdownload\",\n\tpriority: 110,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.navigator.msSaveBlob;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new MsDownloadSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/put.js": {
"title": "$:/core/modules/savers/put.js",
"text": "/*\\\ntitle: $:/core/modules/savers/put.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by performing a PUT request to the server\n\nWorks with any server which accepts a PUT request\nto the current URL, such as a WebDAV server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRetrieve ETag if available\n*/\nvar retrieveETag = function(self) {\n\tvar headers = {\n\t\tAccept: \"*/*;charset=UTF-8\"\n\t};\n\t$tw.utils.httpRequest({\n\t\turl: self.uri(),\n\t\ttype: \"HEAD\",\n\t\theaders: headers,\n\t\tcallback: function(err,data,xhr) {\n\t\t\tif(err) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar etag = xhr.getResponseHeader(\"ETag\");\n\t\t\tif(!etag) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tself.etag = etag.replace(/^W\\//,\"\");\n\t\t}\n\t});\n};\n\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar PutSaver = function(wiki) {\n\tthis.wiki = wiki;\n\tvar self = this;\n\tvar uri = this.uri();\n\t// Async server probe. Until probe finishes, save will fail fast\n\t// See also https://github.com/Jermolene/TiddlyWiki5/issues/2276\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"OPTIONS\",\n\t\tcallback: function(err,data,xhr) {\n\t\t\t// Check DAV header http://www.webdav.org/specs/rfc2518.html#rfc.section.9.1\n\t\t\tif(!err) {\n\t\t\t\tself.serverAcceptsPuts = xhr.status === 200 && !!xhr.getResponseHeader(\"dav\");\n\t\t\t}\n\t\t}\n\t});\n\tretrieveETag(this);\n};\n\nPutSaver.prototype.uri = function() {\n\treturn document.location.toString().split(\"#\")[0];\n};\n\n// TODO: in case of edit conflict\n// Prompt: Do you want to save over this? Y/N\n// Merging would be ideal, and may be possible using future generic merge flow\nPutSaver.prototype.save = function(text,method,callback) {\n\tif(!this.serverAcceptsPuts) {\n\t\treturn false;\n\t}\n\tvar self = this;\n\tvar headers = {\n\t\t\"Content-Type\": \"text/html;charset=UTF-8\"\n\t};\n\tif(this.etag) {\n\t\theaders[\"If-Match\"] = this.etag;\n\t}\n\t$tw.utils.httpRequest({\n\t\turl: this.uri(),\n\t\ttype: \"PUT\",\n\t\theaders: headers,\n\t\tdata: text,\n\t\tcallback: function(err,data,xhr) {\n\t\t\tif(err) {\n\t\t\t\t// response is textual: \"XMLHttpRequest error code: 412\"\n\t\t\t\tvar status = Number(err.substring(err.indexOf(':') + 2, err.length))\n\t\t\t\tif(status === 412) { // edit conflict\n\t\t\t\t\tvar message = $tw.language.getString(\"Error/EditConflict\");\n\t\t\t\t\tcallback(message);\n\t\t\t\t} else {\n\t\t\t\t\tcallback(err); // fail\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself.etag = xhr.getResponseHeader(\"ETag\");\n\t\t\t\tif(self.etag == null) {\n\t\t\t\t\tretrieveETag(self);\n\t\t\t\t}\n\t\t\t\tcallback(null); // success\n\t\t\t}\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nPutSaver.prototype.info = {\n\tname: \"put\",\n\tpriority: 2000,\n\tcapabilities: [\"save\",\"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn /^https?:/.test(location.protocol);\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new PutSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/tiddlyfox.js": {
"title": "$:/core/modules/savers/tiddlyfox.js",
"text": "/*\\\ntitle: $:/core/modules/savers/tiddlyfox.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TiddlyFox file extension\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TiddlyFoxSaver = function(wiki) {\n};\n\nTiddlyFoxSaver.prototype.save = function(text,method,callback) {\n\tvar messageBox = document.getElementById(\"tiddlyfox-message-box\");\n\tif(messageBox) {\n\t\t// Get the pathname of this document\n\t\tvar pathname = document.location.toString().split(\"#\")[0];\n\t\t// Replace file://localhost/ with file:///\n\t\tif(pathname.indexOf(\"file://localhost/\") === 0) {\n\t\t\tpathname = \"file://\" + pathname.substr(16);\n\t\t}\n\t\t// Windows path file:///x:/blah/blah --> x:\\blah\\blah\n\t\tif(/^file\\:\\/\\/\\/[A-Z]\\:\\//i.test(pathname)) {\n\t\t\t// Remove the leading slash and convert slashes to backslashes\n\t\t\tpathname = pathname.substr(8).replace(/\\//g,\"\\\\\");\n\t\t// Firefox Windows network path file://///server/share/blah/blah --> //server/share/blah/blah\n\t\t} else if(pathname.indexOf(\"file://///\") === 0) {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(10)).replace(/\\//g,\"\\\\\");\n\t\t// Mac/Unix local path file:///path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:///\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(7));\n\t\t// Mac/Unix local path file:/path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:/\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(5));\n\t\t// Otherwise Windows networth path file://server/share/path/path --> \\\\server\\share\\path\\path\n\t\t} else {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(7)).replace(new RegExp(\"/\",\"g\"),\"\\\\\");\n\t\t}\n\t\t// Create the message element and put it in the message box\n\t\tvar message = document.createElement(\"div\");\n\t\tmessage.setAttribute(\"data-tiddlyfox-path\",decodeURIComponent(pathname));\n\t\tmessage.setAttribute(\"data-tiddlyfox-content\",text);\n\t\tmessageBox.appendChild(message);\n\t\t// Add an event handler for when the file has been saved\n\t\tmessage.addEventListener(\"tiddlyfox-have-saved-file\",function(event) {\n\t\t\tcallback(null);\n\t\t}, false);\n\t\t// Create and dispatch the custom event to the extension\n\t\tvar event = document.createEvent(\"Events\");\n\t\tevent.initEvent(\"tiddlyfox-save-file\",true,false);\n\t\tmessage.dispatchEvent(event);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyFoxSaver.prototype.info = {\n\tname: \"tiddlyfox\",\n\tpriority: 1500,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyFoxSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/tiddlyie.js": {
"title": "$:/core/modules/savers/tiddlyie.js",
"text": "/*\\\ntitle: $:/core/modules/savers/tiddlyie.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via Internet Explorer BHO extenion (TiddlyIE)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar TiddlyIESaver = function(wiki) {\n};\n\nTiddlyIESaver.prototype.save = function(text,method,callback) {\n\t// Check existence of TiddlyIE BHO extension (note: only works after document is complete)\n\tif(typeof(window.TiddlyIE) != \"undefined\") {\n\t\t// Get the pathname of this document\n\t\tvar pathname = unescape(document.location.pathname);\n\t\t// Test for a Windows path of the form /x:/blah...\n\t\tif(/^\\/[A-Z]\\:\\/[^\\/]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+ (is this better?: ^/[a-z]:/[^/]+(/[^/]+)*\\.[^/]+ )\n\t\t\t// Remove the leading slash\n\t\t\tpathname = pathname.substr(1);\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t} else if(document.hostname !== \"\" && /^\\/[^\\/]+\\/[^\\/]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t\t// reconstruct UNC path\n\t\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t\t} else return false;\n\t\t// Prompt the user to save the file\n\t\twindow.TiddlyIE.save(pathname, text);\n\t\t// Callback that we succeeded\n\t\tcallback(null);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyIESaver.prototype.info = {\n\tname: \"tiddlyiesaver\",\n\tpriority: 1500,\n\tcapabilities: [\"save\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn (window.location.protocol === \"file:\");\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyIESaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/twedit.js": {
"title": "$:/core/modules/savers/twedit.js",
"text": "/*\\\ntitle: $:/core/modules/savers/twedit.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TWEdit iOS app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TWEditSaver = function(wiki) {\n};\n\nTWEditSaver.prototype.save = function(text,method,callback) {\n\t// Bail if we're not running under TWEdit\n\tif(typeof DeviceInfo !== \"object\") {\n\t\treturn false;\n\t}\n\t// Get the pathname of this document\n\tvar pathname = decodeURIComponent(document.location.pathname);\n\t// Strip any query or location part\n\tvar p = pathname.indexOf(\"?\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\tp = pathname.indexOf(\"#\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\t// Remove the leading \"/Documents\" from path\n\tvar prefix = \"/Documents\";\n\tif(pathname.indexOf(prefix) === 0) {\n\t\tpathname = pathname.substr(prefix.length);\n\t}\n\t// Error handler\n\tvar errorHandler = function(event) {\n\t\t// Error\n\t\tcallback($tw.language.getString(\"Error/SavingToTWEdit\") + \": \" + event.target.error.code);\n\t};\n\t// Get the file system\n\twindow.requestFileSystem(LocalFileSystem.PERSISTENT,0,function(fileSystem) {\n\t\t// Now we've got the filesystem, get the fileEntry\n\t\tfileSystem.root.getFile(pathname, {create: true}, function(fileEntry) {\n\t\t\t// Now we've got the fileEntry, create the writer\n\t\t\tfileEntry.createWriter(function(writer) {\n\t\t\t\twriter.onerror = errorHandler;\n\t\t\t\twriter.onwrite = function() {\n\t\t\t\t\tcallback(null);\n\t\t\t\t};\n\t\t\t\twriter.position = 0;\n\t\t\t\twriter.write(text);\n\t\t\t},errorHandler);\n\t\t}, errorHandler);\n\t}, errorHandler);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nTWEditSaver.prototype.info = {\n\tname: \"twedit\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TWEditSaver(wiki);\n};\n\n/////////////////////////// Hack\n// HACK: This ensures that TWEdit recognises us as a TiddlyWiki document\nif($tw.browser) {\n\twindow.version = {title: \"TiddlyWiki\"};\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/upload.js": {
"title": "$:/core/modules/savers/upload.js",
"text": "/*\\\ntitle: $:/core/modules/savers/upload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via upload to a server.\n\nDesigned to be compatible with BidiX's UploadPlugin at http://tiddlywiki.bidix.info/#UploadPlugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar UploadSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nUploadSaver.prototype.save = function(text,method,callback) {\n\t// Get the various parameters we need\n\tvar backupDir = this.wiki.getTextReference(\"$:/UploadBackupDir\") || \".\",\n\t\tusername = this.wiki.getTextReference(\"$:/UploadName\"),\n\t\tpassword = $tw.utils.getPassword(\"upload\"),\n\t\tuploadDir = this.wiki.getTextReference(\"$:/UploadDir\") || \".\",\n\t\tuploadFilename = this.wiki.getTextReference(\"$:/UploadFilename\") || \"index.html\",\n\t\turl = this.wiki.getTextReference(\"$:/UploadURL\");\n\t// Bail out if we don't have the bits we need\n\tif(!username || username.toString().trim() === \"\" || !password || password.toString().trim() === \"\") {\n\t\treturn false;\n\t}\n\t// Construct the url if not provided\n\tif(!url) {\n\t\turl = \"http://\" + username + \".tiddlyspot.com/store.cgi\";\n\t}\n\t// Assemble the header\n\tvar boundary = \"---------------------------\" + \"AaB03x\";\t\n\tvar uploadFormName = \"UploadPlugin\";\n\tvar head = [];\n\thead.push(\"--\" + boundary + \"\\r\\nContent-disposition: form-data; name=\\\"UploadPlugin\\\"\\r\\n\");\n\thead.push(\"backupDir=\" + backupDir + \";user=\" + username + \";password=\" + password + \";uploaddir=\" + uploadDir + \";;\"); \n\thead.push(\"\\r\\n\" + \"--\" + boundary);\n\thead.push(\"Content-disposition: form-data; name=\\\"userfile\\\"; filename=\\\"\" + uploadFilename + \"\\\"\");\n\thead.push(\"Content-Type: text/html;charset=UTF-8\");\n\thead.push(\"Content-Length: \" + text.length + \"\\r\\n\");\n\thead.push(\"\");\n\t// Assemble the tail and the data itself\n\tvar tail = \"\\r\\n--\" + boundary + \"--\\r\\n\",\n\t\tdata = head.join(\"\\r\\n\") + text + tail;\n\t// Do the HTTP post\n\tvar http = new XMLHttpRequest();\n\thttp.open(\"POST\",url,true,username,password);\n\thttp.setRequestHeader(\"Content-Type\",\"multipart/form-data; charset=UTF-8; boundary=\" + boundary);\n\thttp.onreadystatechange = function() {\n\t\tif(http.readyState == 4 && http.status == 200) {\n\t\t\tif(http.responseText.substr(0,4) === \"0 - \") {\n\t\t\t\tcallback(null);\n\t\t\t} else {\n\t\t\t\tcallback(http.responseText);\n\t\t\t}\n\t\t}\n\t};\n\ttry {\n\t\thttp.send(data);\n\t} catch(ex) {\n\t\treturn callback($tw.language.getString(\"Error/Caption\") + \":\" + ex);\n\t}\n\t$tw.notifier.display(\"$:/language/Notifications/Save/Starting\");\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nUploadSaver.prototype.info = {\n\tname: \"upload\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new UploadSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/server/authenticators/basic.js": {
"title": "$:/core/modules/server/authenticators/basic.js",
"text": "/*\\\ntitle: $:/core/modules/server/authenticators/basic.js\ntype: application/javascript\nmodule-type: authenticator\n\nAuthenticator for WWW basic authentication\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nif($tw.node) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\");\n}\n\nfunction BasicAuthenticator(server) {\n\tthis.server = server;\n\tthis.credentialsData = [];\n}\n\n/*\nReturns true if the authenticator is active, false if it is inactive, or a string if there is an error\n*/\nBasicAuthenticator.prototype.init = function() {\n\t// Read the credentials data\n\tthis.credentialsFilepath = this.server.get(\"credentials\");\n\tif(this.credentialsFilepath) {\n\t\tvar resolveCredentialsFilepath = path.resolve(this.server.boot.wikiPath,this.credentialsFilepath);\n\t\tif(fs.existsSync(resolveCredentialsFilepath) && !fs.statSync(resolveCredentialsFilepath).isDirectory()) {\n\t\t\tvar credentialsText = fs.readFileSync(resolveCredentialsFilepath,\"utf8\"),\n\t\t\t\tcredentialsData = $tw.utils.parseCsvStringWithHeader(credentialsText);\n\t\t\tif(typeof credentialsData === \"string\") {\n\t\t\t\treturn \"Error: \" + credentialsData + \" reading credentials from '\" + resolveCredentialsFilepath + \"'\";\n\t\t\t} else {\n\t\t\t\tthis.credentialsData = credentialsData;\n\t\t\t}\n\t\t} else {\n\t\t\treturn \"Error: Unable to load user credentials from '\" + resolveCredentialsFilepath + \"'\";\n\t\t}\n\t}\n\t// Add the hardcoded username and password if specified\n\tif(this.server.get(\"username\") && this.server.get(\"password\")) {\n\t\tthis.credentialsData = this.credentialsData || [];\n\t\tthis.credentialsData.push({\n\t\t\tusername: this.server.get(\"username\"),\n\t\t\tpassword: this.server.get(\"password\")\n\t\t});\n\t}\n\treturn this.credentialsData.length > 0;\n};\n\n/*\nReturns true if the request is authenticated and assigns the \"authenticatedUsername\" state variable.\nReturns false if the request couldn't be authenticated having sent an appropriate response to the browser\n*/\nBasicAuthenticator.prototype.authenticateRequest = function(request,response,state) {\n\t// Extract the incoming username and password from the request\n\tvar header = request.headers.authorization || \"\";\n\tif(!header && state.allowAnon) {\n\t\t// If there's no header and anonymous access is allowed then we don't set authenticatedUsername\n\t\treturn true;\n\t}\n\tvar token = header.split(/\\s+/).pop() || \"\",\n\t\tauth = $tw.utils.base64Decode(token),\n\t\tparts = auth.split(/:/),\n\t\tincomingUsername = parts[0],\n\t\tincomingPassword = parts[1];\n\t// Check that at least one of the credentials matches\n\tvar matchingCredentials = this.credentialsData.find(function(credential) {\n\t\treturn credential.username === incomingUsername && credential.password === incomingPassword;\n\t});\n\tif(matchingCredentials) {\n\t\t// If so, add the authenticated username to the request state\n\t\tstate.authenticatedUsername = incomingUsername;\n\t\treturn true;\n\t} else {\n\t\t// If not, return an authentication challenge\n\t\tresponse.writeHead(401,\"Authentication required\",{\n\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to ' + state.server.servername + '\"'\n\t\t});\n\t\tresponse.end();\n\t\treturn false;\n\t}\n};\n\nexports.AuthenticatorClass = BasicAuthenticator;\n\n})();\n",
"type": "application/javascript",
"module-type": "authenticator"
},
"$:/core/modules/server/authenticators/header.js": {
"title": "$:/core/modules/server/authenticators/header.js",
"text": "/*\\\ntitle: $:/core/modules/server/authenticators/header.js\ntype: application/javascript\nmodule-type: authenticator\n\nAuthenticator for trusted header authentication\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction HeaderAuthenticator(server) {\n\tthis.server = server;\n\tthis.header = server.get(\"authenticated-user-header\") ? server.get(\"authenticated-user-header\").toLowerCase() : undefined;\n}\n\n/*\nReturns true if the authenticator is active, false if it is inactive, or a string if there is an error\n*/\nHeaderAuthenticator.prototype.init = function() {\n\treturn !!this.header;\n};\n\n/*\nReturns true if the request is authenticated and assigns the \"authenticatedUsername\" state variable.\nReturns false if the request couldn't be authenticated having sent an appropriate response to the browser\n*/\nHeaderAuthenticator.prototype.authenticateRequest = function(request,response,state) {\n\t// Otherwise, authenticate as the username in the specified header\n\tvar username = request.headers[this.header];\n\tif(!username && !state.allowAnon) {\n\t\tresponse.writeHead(401,\"Authorization header required to login to '\" + state.server.servername + \"'\");\n\t\tresponse.end();\n\t\treturn false;\n\t} else {\n\t\t// authenticatedUsername will be undefined for anonymous users\n\t\tstate.authenticatedUsername = username;\n\t\treturn true;\n\t}\n};\n\nexports.AuthenticatorClass = HeaderAuthenticator;\n\n})();\n",
"type": "application/javascript",
"module-type": "authenticator"
},
"$:/core/modules/server/routes/delete-tiddler.js": {
"title": "$:/core/modules/server/routes/delete-tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/delete-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nDELETE /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"DELETE\";\n\nexports.path = /^\\/bags\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]);\n\tstate.wiki.deleteTiddler(title);\n\tresponse.writeHead(204, \"OK\", {\n\t\t\"Content-Type\": \"text/plain\"\n\t});\n\tresponse.end();\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-favicon.js": {
"title": "$:/core/modules/server/routes/get-favicon.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-favicon.js\ntype: application/javascript\nmodule-type: route\n\nGET /favicon.ico\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/favicon.ico$/;\n\nexports.handler = function(request,response,state) {\n\tresponse.writeHead(200, {\"Content-Type\": \"image/x-icon\"});\n\tvar buffer = state.wiki.getTiddlerText(\"$:/favicon.ico\",\"\");\n\tresponse.end(buffer,\"base64\");\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-file.js": {
"title": "$:/core/modules/server/routes/get-file.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-file.js\ntype: application/javascript\nmodule-type: route\n\nGET /files/:filepath\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/files\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar path = require(\"path\"),\n\t\tfs = require(\"fs\"),\n\t\tutil = require(\"util\"),\n\t\tsuppliedFilename = decodeURIComponent(state.params[0]),\n\t\tfilename = path.resolve(state.boot.wikiPath,\"files\",suppliedFilename),\n\t\textension = path.extname(filename);\n\tfs.readFile(filename,function(err,content) {\n\t\tvar status,content,type = \"text/plain\";\n\t\tif(err) {\n\t\t\tconsole.log(\"Error accessing file \" + filename + \": \" + err.toString());\n\t\t\tstatus = 404;\n\t\t\tcontent = \"File '\" + suppliedFilename + \"' not found\";\n\t\t} else {\n\t\t\tstatus = 200;\n\t\t\tcontent = content;\n\t\t\ttype = ($tw.config.fileExtensionInfo[extension] ? $tw.config.fileExtensionInfo[extension].type : \"application/octet-stream\");\n\t\t}\n\t\tresponse.writeHead(status,{\n\t\t\t\"Content-Type\": type\n\t\t});\n\t\tresponse.end(content);\n\t});\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-index.js": {
"title": "$:/core/modules/server/routes/get-index.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-index.js\ntype: application/javascript\nmodule-type: route\n\nGET /\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar zlib = require(\"zlib\");\n\nexports.method = \"GET\";\n\nexports.path = /^\\/$/;\n\nexports.handler = function(request,response,state) {\n\tvar acceptEncoding = request.headers[\"accept-encoding\"];\n\tif(!acceptEncoding) {\n\t\tacceptEncoding = \"\";\n\t}\n\tvar text = state.wiki.renderTiddler(state.server.get(\"root-render-type\"),state.server.get(\"root-tiddler\")),\n\t\tresponseHeaders = {\n\t\t\"Content-Type\": state.server.get(\"root-serve-type\")\n\t};\n\t/*\n\tIf the gzip=yes flag for `listen` is set, check if the user agent permits\n\tcompression. If so, compress our response. Note that we use the synchronous\n\tfunctions from zlib to stay in the imperative style. The current `Server`\n\tdoesn't depend on this, and we may just as well use the async versions.\n\t*/\n\tif(state.server.enableGzip) {\n\t\tif (/\\bdeflate\\b/.test(acceptEncoding)) {\n\t\t\tresponseHeaders[\"Content-Encoding\"] = \"deflate\";\n\t\t\ttext = zlib.deflateSync(text);\n\t\t} else if (/\\bgzip\\b/.test(acceptEncoding)) {\n\t\t\tresponseHeaders[\"Content-Encoding\"] = \"gzip\";\n\t\t\ttext = zlib.gzipSync(text);\n\t\t}\n\t}\n\tresponse.writeHead(200,responseHeaders);\n\tresponse.end(text);\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-login-basic.js": {
"title": "$:/core/modules/server/routes/get-login-basic.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-login-basic.js\ntype: application/javascript\nmodule-type: route\n\nGET /login-basic -- force a Basic Authentication challenge\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/login-basic$/;\n\nexports.handler = function(request,response,state) {\n\tif(!state.authenticatedUsername) {\n\t\t// Challenge if there's no username\n\t\tresponse.writeHead(401,{\n\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to ' + state.server.servername + '\"'\n\t\t});\n\t\tresponse.end();\t\t\n\t} else {\n\t\t// Redirect to the root wiki if login worked\n\t\tresponse.writeHead(302,{\n\t\t\tLocation: \"/\"\n\t\t});\n\t\tresponse.end();\n\t}\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-status.js": {
"title": "$:/core/modules/server/routes/get-status.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-status.js\ntype: application/javascript\nmodule-type: route\n\nGET /status\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/status$/;\n\nexports.handler = function(request,response,state) {\n\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\tvar text = JSON.stringify({\n\t\tusername: state.authenticatedUsername || state.server.get(\"anon-username\") || \"\",\n\t\tanonymous: !state.authenticatedUsername,\n\t\tread_only: !state.server.isAuthorized(\"writers\",state.authenticatedUsername),\n\t\tspace: {\n\t\t\trecipe: \"default\"\n\t\t},\n\t\ttiddlywiki_version: $tw.version\n\t});\n\tresponse.end(text,\"utf8\");\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-tiddler-html.js": {
"title": "$:/core/modules/server/routes/get-tiddler-html.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddler-html.js\ntype: application/javascript\nmodule-type: route\n\nGET /:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/([^\\/]+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\t\ttiddler = state.wiki.getTiddler(title);\n\tif(tiddler) {\n\t\tvar renderType = tiddler.getFieldString(\"_render_type\"),\n\t\t\trenderTemplate = tiddler.getFieldString(\"_render_template\");\n\t\t// Tiddler fields '_render_type' and '_render_template' overwrite\n\t\t// system wide settings for render type and template\n\t\tif(state.wiki.isSystemTiddler(title)) {\n\t\t\trenderType = renderType || state.server.get(\"system-tiddler-render-type\");\n\t\t\trenderTemplate = renderTemplate || state.server.get(\"system-tiddler-render-template\");\n\t\t} else {\n\t\t\trenderType = renderType || state.server.get(\"tiddler-render-type\");\n\t\t\trenderTemplate = renderTemplate || state.server.get(\"tiddler-render-template\");\n\t\t}\n\t\tvar text = state.wiki.renderTiddler(renderType,renderTemplate,{parseAsInline: true, variables: {currentTiddler: title}});\n\t\t// Naughty not to set a content-type, but it's the easiest way to ensure the browser will see HTML pages as HTML, and accept plain text tiddlers as CSS or JS\n\t\tresponse.writeHead(200);\n\t\tresponse.end(text,\"utf8\");\n\t} else {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t}\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-tiddler.js": {
"title": "$:/core/modules/server/routes/get-tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nGET /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\t\ttiddler = state.wiki.getTiddler(title),\n\t\ttiddlerFields = {},\n\t\tknownFields = [\n\t\t\t\"bag\", \"created\", \"creator\", \"modified\", \"modifier\", \"permissions\", \"recipe\", \"revision\", \"tags\", \"text\", \"title\", \"type\", \"uri\"\n\t\t];\n\tif(tiddler) {\n\t\t$tw.utils.each(tiddler.fields,function(field,name) {\n\t\t\tvar value = tiddler.getFieldString(name);\n\t\t\tif(knownFields.indexOf(name) !== -1) {\n\t\t\t\ttiddlerFields[name] = value;\n\t\t\t} else {\n\t\t\t\ttiddlerFields.fields = tiddlerFields.fields || {};\n\t\t\t\ttiddlerFields.fields[name] = value;\n\t\t\t}\n\t\t});\n\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\ttiddlerFields.bag = \"default\";\n\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\tresponse.end(JSON.stringify(tiddlerFields),\"utf8\");\n\t} else {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t}\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-tiddlers-json.js": {
"title": "$:/core/modules/server/routes/get-tiddlers-json.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddlers-json.js\ntype: application/javascript\nmodule-type: route\n\nGET /recipes/default/tiddlers.json?filter=<filter>\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DEFAULT_FILTER = \"[all[tiddlers]!is[system]sort[title]]\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers.json$/;\n\nexports.handler = function(request,response,state) {\n\tvar filter = state.queryParameters.filter || DEFAULT_FILTER;\n\tif(state.wiki.getTiddlerText(\"$:/config/Server/AllowAllExternalFilters\") !== \"yes\") {\n\t\tif(state.wiki.getTiddlerText(\"$:/config/Server/ExternalFilters/\" + filter) !== \"yes\") {\n\t\t\tconsole.log(\"Blocked attempt to GET /recipes/default/tiddlers.json with filter: \" + filter);\n\t\t\tresponse.writeHead(403);\n\t\t\tresponse.end();\n\t\t\treturn;\n\t\t}\n\t}\n\tif(state.wiki.getTiddlerText(\"$:/config/SyncSystemTiddlersFromServer\") === \"no\") {\n\t\tfilter += \"+[!is[system]]\";\n\t}\n\tvar excludeFields = (state.queryParameters.exclude || \"text\").split(\",\"),\n\t\ttitles = state.wiki.filterTiddlers(filter);\n\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\tvar tiddlers = [];\n\t$tw.utils.each(titles,function(title) {\n\t\tvar tiddler = state.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tvar tiddlerFields = tiddler.getFieldStrings({exclude: excludeFields});\n\t\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\t\ttiddlers.push(tiddlerFields);\n\t\t}\n\t});\n\tvar text = JSON.stringify(tiddlers);\n\tresponse.end(text,\"utf8\");\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/put-tiddler.js": {
"title": "$:/core/modules/server/routes/put-tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/put-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nPUT /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"PUT\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\tfields = JSON.parse(state.data);\n\t// Pull up any subfields in the `fields` object\n\tif(fields.fields) {\n\t\t$tw.utils.each(fields.fields,function(field,name) {\n\t\t\tfields[name] = field;\n\t\t});\n\t\tdelete fields.fields;\n\t}\n\t// Remove any revision field\n\tif(fields.revision) {\n\t\tdelete fields.revision;\n\t}\n\tstate.wiki.addTiddler(new $tw.Tiddler(state.wiki.getCreationFields(),fields,{title: title},state.wiki.getModificationFields()));\n\tvar changeCount = state.wiki.getChangeCount(title).toString();\n\tresponse.writeHead(204, \"OK\",{\n\t\tEtag: \"\\\"default/\" + encodeURIComponent(title) + \"/\" + changeCount + \":\\\"\",\n\t\t\"Content-Type\": \"text/plain\"\n\t});\n\tresponse.end();\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/server.js": {
"title": "$:/core/modules/server/server.js",
"text": "/*\\\ntitle: $:/core/modules/server/server.js\ntype: application/javascript\nmodule-type: library\n\nServe tiddlers over http\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nif($tw.node) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\"),\n\t\tquerystring = require(\"querystring\");\n}\n\n/*\nA simple HTTP server with regexp-based routes\noptions: variables - optional hashmap of variables to set (a misnomer - they are really constant parameters)\n\t\t routes - optional array of routes to use\n\t\t wiki - reference to wiki object\n*/\nfunction Server(options) {\n\tvar self = this;\n\tthis.routes = options.routes || [];\n\tthis.authenticators = options.authenticators || [];\n\tthis.wiki = options.wiki;\n\tthis.boot = options.boot || $tw.boot;\n\tthis.servername = $tw.utils.transliterateToSafeASCII(this.wiki.getTiddlerText(\"$:/SiteTitle\") || \"TiddlyWiki5\");\n\t// Initialise the variables\n\tthis.variables = $tw.utils.extend({},this.defaultVariables);\n\tif(options.variables) {\n\t\tfor(var variable in options.variables) {\n\t\t\tif(options.variables[variable]) {\n\t\t\t\tthis.variables[variable] = options.variables[variable];\n\t\t\t}\n\t\t}\t\t\n\t}\n\t$tw.utils.extend({},this.defaultVariables,options.variables);\n\t// Initialise CSRF\n\tthis.csrfDisable = this.get(\"csrf-disable\") === \"yes\";\n\t// Initialize Gzip compression\n\tthis.enableGzip = this.get(\"gzip\") === \"yes\";\n\t// Initialise authorization\n\tvar authorizedUserName = (this.get(\"username\") && this.get(\"password\")) ? this.get(\"username\") : \"(anon)\";\n\tthis.authorizationPrincipals = {\n\t\treaders: (this.get(\"readers\") || authorizedUserName).split(\",\").map($tw.utils.trim),\n\t\twriters: (this.get(\"writers\") || authorizedUserName).split(\",\").map($tw.utils.trim)\n\t}\n\t// Load and initialise authenticators\n\t$tw.modules.forEachModuleOfType(\"authenticator\", function(title,authenticatorDefinition) {\n\t\t// console.log(\"Loading server route \" + title);\n\t\tself.addAuthenticator(authenticatorDefinition.AuthenticatorClass);\n\t});\n\t// Load route handlers\n\t$tw.modules.forEachModuleOfType(\"route\", function(title,routeDefinition) {\n\t\t// console.log(\"Loading server route \" + title);\n\t\tself.addRoute(routeDefinition);\n\t});\n\t// Initialise the http vs https\n\tthis.listenOptions = null;\n\tthis.protocol = \"http\";\n\tvar tlsKeyFilepath = this.get(\"tls-key\"),\n\t\ttlsCertFilepath = this.get(\"tls-cert\");\n\tif(tlsCertFilepath && tlsKeyFilepath) {\n\t\tthis.listenOptions = {\n\t\t\tkey: fs.readFileSync(path.resolve(this.boot.wikiPath,tlsKeyFilepath),\"utf8\"),\n\t\t\tcert: fs.readFileSync(path.resolve(this.boot.wikiPath,tlsCertFilepath),\"utf8\")\n\t\t};\n\t\tthis.protocol = \"https\";\n\t}\n\tthis.transport = require(this.protocol);\n}\n\nServer.prototype.defaultVariables = {\n\tport: \"8080\",\n\thost: \"127.0.0.1\",\n\t\"root-tiddler\": \"$:/core/save/all\",\n\t\"root-render-type\": \"text/plain\",\n\t\"root-serve-type\": \"text/html\",\n\t\"tiddler-render-type\": \"text/html\",\n\t\"tiddler-render-template\": \"$:/core/templates/server/static.tiddler.html\",\n\t\"system-tiddler-render-type\": \"text/plain\",\n\t\"system-tiddler-render-template\": \"$:/core/templates/wikified-tiddler\",\n\t\"debug-level\": \"none\",\n\t\"gzip\": \"no\"\n};\n\nServer.prototype.get = function(name) {\n\treturn this.variables[name];\n};\n\nServer.prototype.addRoute = function(route) {\n\tthis.routes.push(route);\n};\n\nServer.prototype.addAuthenticator = function(AuthenticatorClass) {\n\t// Instantiate and initialise the authenticator\n\tvar authenticator = new AuthenticatorClass(this),\n\t\tresult = authenticator.init();\n\tif(typeof result === \"string\") {\n\t\t$tw.utils.error(\"Error: \" + result);\n\t} else if(result) {\n\t\t// Only use the authenticator if it initialised successfully\n\t\tthis.authenticators.push(authenticator);\n\t}\n};\n\nServer.prototype.findMatchingRoute = function(request,state) {\n\tfor(var t=0; t<this.routes.length; t++) {\n\t\tvar potentialRoute = this.routes[t],\n\t\t\tpathRegExp = potentialRoute.path,\n\t\t\tpathname = state.urlInfo.pathname,\n\t\t\tmatch;\n\t\tif(state.pathPrefix) {\n\t\t\tif(pathname.substr(0,state.pathPrefix.length) === state.pathPrefix) {\n\t\t\t\tpathname = pathname.substr(state.pathPrefix.length) || \"/\";\n\t\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t\t} else {\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t} else {\n\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t}\n\t\tif(match && request.method === potentialRoute.method) {\n\t\t\tstate.params = [];\n\t\t\tfor(var p=1; p<match.length; p++) {\n\t\t\t\tstate.params.push(match[p]);\n\t\t\t}\n\t\t\treturn potentialRoute;\n\t\t}\n\t}\n\treturn null;\n};\n\nServer.prototype.methodMappings = {\n\t\"GET\": \"readers\",\n\t\"OPTIONS\": \"readers\",\n\t\"HEAD\": \"readers\",\n\t\"PUT\": \"writers\",\n\t\"POST\": \"writers\",\n\t\"DELETE\": \"writers\"\n};\n\n/*\nCheck whether a given user is authorized for the specified authorizationType (\"readers\" or \"writers\"). Pass null or undefined as the username to check for anonymous access\n*/\nServer.prototype.isAuthorized = function(authorizationType,username) {\n\tvar principals = this.authorizationPrincipals[authorizationType] || [];\n\treturn principals.indexOf(\"(anon)\") !== -1 || (username && (principals.indexOf(\"(authenticated)\") !== -1 || principals.indexOf(username) !== -1));\n}\n\nServer.prototype.requestHandler = function(request,response,options) {\n\toptions = options || {};\n\t// Compose the state object\n\tvar self = this;\n\tvar state = {};\n\tstate.wiki = options.wiki || self.wiki;\n\tstate.boot = options.boot || self.boot;\n\tstate.server = self;\n\tstate.urlInfo = url.parse(request.url);\n\tstate.queryParameters = querystring.parse(state.urlInfo.query);\n\tstate.pathPrefix = options.pathPrefix || this.get(\"path-prefix\") || \"\";\n\t// Get the principals authorized to access this resource\n\tvar authorizationType = this.methodMappings[request.method] || \"readers\";\n\t// Check for the CSRF header if this is a write\n\tif(!this.csrfDisable && authorizationType === \"writers\" && request.headers[\"x-requested-with\"] !== \"TiddlyWiki\") {\n\t\tresponse.writeHead(403,\"'X-Requested-With' header required to login to '\" + this.servername + \"'\");\n\t\tresponse.end();\n\t\treturn;\t\t\n\t}\n\t// Check whether anonymous access is granted\n\tstate.allowAnon = this.isAuthorized(authorizationType,null);\n\t// Authenticate with the first active authenticator\n\tif(this.authenticators.length > 0) {\n\t\tif(!this.authenticators[0].authenticateRequest(request,response,state)) {\n\t\t\t// Bail if we failed (the authenticator will have sent the response)\n\t\t\treturn;\n\t\t}\t\t\n\t}\n\t// Authorize with the authenticated username\n\tif(!this.isAuthorized(authorizationType,state.authenticatedUsername)) {\n\t\tresponse.writeHead(401,\"'\" + state.authenticatedUsername + \"' is not authorized to access '\" + this.servername + \"'\");\n\t\tresponse.end();\n\t\treturn;\n\t}\n\t// Find the route that matches this path\n\tvar route = self.findMatchingRoute(request,state);\n\t// Optionally output debug info\n\tif(self.get(\"debug-level\") !== \"none\") {\n\t\tconsole.log(\"Request path:\",JSON.stringify(state.urlInfo));\n\t\tconsole.log(\"Request headers:\",JSON.stringify(request.headers));\n\t\tconsole.log(\"authenticatedUsername:\",state.authenticatedUsername);\n\t}\n\t// Return a 404 if we didn't find a route\n\tif(!route) {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t\treturn;\n\t}\n\t// Receive the request body if necessary and hand off to the route handler\n\tif(route.bodyFormat === \"stream\" || request.method === \"GET\" || request.method === \"HEAD\") {\n\t\t// Let the route handle the request stream itself\n\t\troute.handler(request,response,state);\n\t} else if(route.bodyFormat === \"string\" || !route.bodyFormat) {\n\t\t// Set the encoding for the incoming request\n\t\trequest.setEncoding(\"utf8\");\n\t\tvar data = \"\";\n\t\trequest.on(\"data\",function(chunk) {\n\t\t\tdata += chunk.toString();\n\t\t});\n\t\trequest.on(\"end\",function() {\n\t\t\tstate.data = data;\n\t\t\troute.handler(request,response,state);\n\t\t});\n\t} else if(route.bodyFormat === \"buffer\") {\n\t\tvar data = [];\n\t\trequest.on(\"data\",function(chunk) {\n\t\t\tdata.push(chunk);\n\t\t});\n\t\trequest.on(\"end\",function() {\n\t\t\tstate.data = Buffer.concat(data);\n\t\t\troute.handler(request,response,state);\n\t\t})\n\t} else {\n\t\tresponse.writeHead(400,\"Invalid bodyFormat \" + route.bodyFormat + \" in route \" + route.method + \" \" + route.path.source);\n\t\tresponse.end();\n\t}\n};\n\n/*\nListen for requests\nport: optional port number (falls back to value of \"port\" variable)\nhost: optional host address (falls back to value of \"host\" variable)\nprefix: optional prefix (falls back to value of \"path-prefix\" variable)\n*/\nServer.prototype.listen = function(port,host,prefix) {\n\tvar self = this;\n\t// Handle defaults for port and host\n\tport = port || this.get(\"port\");\n\thost = host || this.get(\"host\");\n\tprefix = prefix || this.get(\"path-prefix\") || \"\";\n\t// Check for the port being a string and look it up as an environment variable\n\tif(parseInt(port,10).toString() !== port) {\n\t\tport = process.env[port] || 8080;\n\t}\n\t// Warn if required plugins are missing\n\tif(!this.wiki.getTiddler(\"$:/plugins/tiddlywiki/tiddlyweb\") || !this.wiki.getTiddler(\"$:/plugins/tiddlywiki/filesystem\")) {\n\t\t$tw.utils.warning(\"Warning: Plugins required for client-server operation (\\\"tiddlywiki/filesystem\\\" and \\\"tiddlywiki/tiddlyweb\\\") are missing from tiddlywiki.info file\");\n\t}\n\t// Create the server\n\tvar server;\n\tif(this.listenOptions) {\n\t\tserver = this.transport.createServer(this.listenOptions,this.requestHandler.bind(this));\n\t} else {\n\t\tserver = this.transport.createServer(this.requestHandler.bind(this));\n\t}\n\t// Display the port number after we've started listening (the port number might have been specified as zero, in which case we will get an assigned port)\n\tserver.on(\"listening\",function() {\n\t\tvar address = server.address();\n\t\t$tw.utils.log(\"Serving on \" + self.protocol + \"://\" + address.address + \":\" + address.port + prefix,\"brown/orange\");\n\t\t$tw.utils.log(\"(press ctrl-C to exit)\",\"red\");\n\t});\n\t// Listen\n\treturn server.listen(port,host);\n};\n\nexports.Server = Server;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/browser-messaging.js": {
"title": "$:/core/modules/browser-messaging.js",
"text": "/*\\\ntitle: $:/core/modules/browser-messaging.js\ntype: application/javascript\nmodule-type: startup\n\nBrowser message handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"browser-messaging\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n/*\nLoad a specified url as an iframe and call the callback when it is loaded. If the url is already loaded then the existing iframe instance is used\n*/\nfunction loadIFrame(url,callback) {\n\t// Check if iframe already exists\n\tvar iframeInfo = $tw.browserMessaging.iframeInfoMap[url];\n\tif(iframeInfo) {\n\t\t// We've already got the iframe\n\t\tcallback(null,iframeInfo);\n\t} else {\n\t\t// Create the iframe and save it in the list\n\t\tvar iframe = document.createElement(\"iframe\");\n\t\tiframeInfo = {\n\t\t\turl: url,\n\t\t\tstatus: \"loading\",\n\t\t\tdomNode: iframe\n\t\t};\n\t\t$tw.browserMessaging.iframeInfoMap[url] = iframeInfo;\n\t\tsaveIFrameInfoTiddler(iframeInfo);\n\t\t// Add the iframe to the DOM and hide it\n\t\tiframe.style.display = \"none\";\n\t\tiframe.setAttribute(\"library\",\"true\");\n\t\tdocument.body.appendChild(iframe);\n\t\t// Set up onload\n\t\tiframe.onload = function() {\n\t\t\tiframeInfo.status = \"loaded\";\n\t\t\tsaveIFrameInfoTiddler(iframeInfo);\n\t\t\tcallback(null,iframeInfo);\n\t\t};\n\t\tiframe.onerror = function() {\n\t\t\tcallback(\"Cannot load iframe\");\n\t\t};\n\t\ttry {\n\t\t\tiframe.src = url;\n\t\t} catch(ex) {\n\t\t\tcallback(ex);\n\t\t}\n\t}\n}\n\n/*\nUnload library iframe for given url\n*/\nfunction unloadIFrame(url){\n\t$tw.utils.each(document.getElementsByTagName('iframe'), function(iframe) {\n\t\tif(iframe.getAttribute(\"library\") === \"true\" &&\n\t\t iframe.getAttribute(\"src\") === url) {\n\t\t\tiframe.parentNode.removeChild(iframe);\n\t\t}\n\t});\n}\n\nfunction saveIFrameInfoTiddler(iframeInfo) {\n\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),{\n\t\ttitle: \"$:/temp/ServerConnection/\" + iframeInfo.url,\n\t\ttext: iframeInfo.status,\n\t\ttags: [\"$:/tags/ServerConnection\"],\n\t\turl: iframeInfo.url\n\t},$tw.wiki.getModificationFields()));\n}\n\nexports.startup = function() {\n\t// Initialise the store of iframes we've created\n\t$tw.browserMessaging = {\n\t\tiframeInfoMap: {} // Hashmap by URL of {url:,status:\"loading/loaded\",domNode:}\n\t};\n\t// Listen for widget messages to control loading the plugin library\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url;\n\t\tif(url) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert($tw.language.getString(\"Error/LoadingPluginLibrary\") + \": \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers.json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-info\",\n\t\t\t\t\t\t\tinfoTitlePrefix: paramObject.infoTitlePrefix || \"$:/temp/RemoteAssetInfo/\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Listen for widget messages to control unloading the plugin library\n\t$tw.rootWidget.addEventListener(\"tm-unload-plugin-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url;\n\t\t$tw.browserMessaging.iframeInfoMap[url] = undefined;\n\t\tif(url) {\n\t\t\tunloadIFrame(url);\n\t\t\t$tw.utils.each(\n\t\t\t\t$tw.wiki.filterTiddlers(\"[[$:/temp/ServerConnection/\" + url + \"]] [prefix[$:/temp/RemoteAssetInfo/\" + url + \"/]]\"),\n\t\t\t\tfunction(title) {\n\t\t\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-from-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url,\n\t\t\ttitle = paramObject.title;\n\t\tif(url && title) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert($tw.language.getString(\"Error/LoadingPluginLibrary\") + \": \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers/\" + encodeURIComponent(title) + \".json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-tiddler\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Listen for window messages from other windows\n\twindow.addEventListener(\"message\",function listener(event){\n\t\t// console.log(\"browser-messaging: \",document.location.toString())\n\t\t// console.log(\"browser-messaging: Received message from\",event.origin);\n\t\t// console.log(\"browser-messaging: Message content\",event.data);\n\t\tswitch(event.data.verb) {\n\t\t\tcase \"GET-RESPONSE\":\n\t\t\t\tif(event.data.status.charAt(0) === \"2\") {\n\t\t\t\t\tif(event.data.cookies) {\n\t\t\t\t\t\tif(event.data.cookies.type === \"save-info\") {\n\t\t\t\t\t\t\tvar tiddlers = JSON.parse(event.data.body);\n\t\t\t\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\t\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\t\t\t\t\ttitle: event.data.cookies.infoTitlePrefix + event.data.cookies.url + \"/\" + tiddler.title,\n\t\t\t\t\t\t\t\t\t\"original-title\": tiddler.title,\n\t\t\t\t\t\t\t\t\ttext: \"\",\n\t\t\t\t\t\t\t\t\ttype: \"text/vnd.tiddlywiki\",\n\t\t\t\t\t\t\t\t\t\"original-type\": tiddler.type,\n\t\t\t\t\t\t\t\t\t\"plugin-type\": undefined,\n\t\t\t\t\t\t\t\t\t\"original-plugin-type\": tiddler[\"plugin-type\"],\n\t\t\t\t\t\t\t\t\t\"module-type\": undefined,\n\t\t\t\t\t\t\t\t\t\"original-module-type\": tiddler[\"module-type\"],\n\t\t\t\t\t\t\t\t\ttags: [\"$:/tags/RemoteAssetInfo\"],\n\t\t\t\t\t\t\t\t\t\"original-tags\": $tw.utils.stringifyList(tiddler.tags || []),\n\t\t\t\t\t\t\t\t\t\"server-url\": event.data.cookies.url\n\t\t\t\t\t\t\t\t},$tw.wiki.getModificationFields()));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else if(event.data.cookies.type === \"save-tiddler\") {\n\t\t\t\t\t\t\tvar tiddler = JSON.parse(event.data.body);\n\t\t\t\t\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t},false);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/commands.js": {
"title": "$:/core/modules/startup/commands.js",
"text": "/*\\\ntitle: $:/core/modules/startup/commands.js\ntype: application/javascript\nmodule-type: startup\n\nCommand processing\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"commands\";\nexports.platforms = [\"node\"];\nexports.after = [\"story\"];\nexports.synchronous = false;\n\nexports.startup = function(callback) {\n\t// On the server, start a commander with the command line arguments\n\tvar commander = new $tw.Commander(\n\t\t$tw.boot.argv,\n\t\tfunction(err) {\n\t\t\tif(err) {\n\t\t\t\treturn $tw.utils.error(\"Error: \" + err);\n\t\t\t}\n\t\t\tcallback();\n\t\t},\n\t\t$tw.wiki,\n\t\t{output: process.stdout, error: process.stderr}\n\t);\n\tcommander.execute();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/CSSescape.js": {
"title": "$:/core/modules/startup/CSSescape.js",
"text": "/*\\\ntitle: $:/core/modules/startup/CSSescape.js\ntype: application/javascript\nmodule-type: startup\n\nPolyfill for CSS.escape()\n\n\\*/\n(function(root,factory){\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"css-escape\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n/*! https://mths.be/cssescape v1.5.1 by @mathias | MIT license */\n// https://github.com/umdjs/umd/blob/master/returnExports.js\nexports.startup = factory(root);\n}(typeof global != 'undefined' ? global : this, function(root) {\n\n\tif (root.CSS && root.CSS.escape) {\n\t\treturn;\n\t}\n\n\t// https://drafts.csswg.org/cssom/#serialize-an-identifier\n\tvar cssEscape = function(value) {\n\t\tif (arguments.length == 0) {\n\t\t\tthrow new TypeError('`CSS.escape` requires an argument.');\n\t\t}\n\t\tvar string = String(value);\n\t\tvar length = string.length;\n\t\tvar index = -1;\n\t\tvar codeUnit;\n\t\tvar result = '';\n\t\tvar firstCodeUnit = string.charCodeAt(0);\n\t\twhile (++index < length) {\n\t\t\tcodeUnit = string.charCodeAt(index);\n\t\t\t// Note: there’s no need to special-case astral symbols, surrogate\n\t\t\t// pairs, or lone surrogates.\n\n\t\t\t// If the character is NULL (U+0000), then the REPLACEMENT CHARACTER\n\t\t\t// (U+FFFD).\n\t\t\tif (codeUnit == 0x0000) {\n\t\t\t\tresult += '\\uFFFD';\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// If the character is in the range [\\1-\\1F] (U+0001 to U+001F) or is\n\t\t\t\t// U+007F, […]\n\t\t\t\t(codeUnit >= 0x0001 && codeUnit <= 0x001F) || codeUnit == 0x007F ||\n\t\t\t\t// If the character is the first character and is in the range [0-9]\n\t\t\t\t// (U+0030 to U+0039), […]\n\t\t\t\t(index == 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039) ||\n\t\t\t\t// If the character is the second character and is in the range [0-9]\n\t\t\t\t// (U+0030 to U+0039) and the first character is a `-` (U+002D), […]\n\t\t\t\t(\n\t\t\t\t\tindex == 1 &&\n\t\t\t\t\tcodeUnit >= 0x0030 && codeUnit <= 0x0039 &&\n\t\t\t\t\tfirstCodeUnit == 0x002D\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t// https://drafts.csswg.org/cssom/#escape-a-character-as-code-point\n\t\t\t\tresult += '\\\\' + codeUnit.toString(16) + ' ';\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// If the character is the first character and is a `-` (U+002D), and\n\t\t\t\t// there is no second character, […]\n\t\t\t\tindex == 0 &&\n\t\t\t\tlength == 1 &&\n\t\t\t\tcodeUnit == 0x002D\n\t\t\t) {\n\t\t\t\tresult += '\\\\' + string.charAt(index);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If the character is not handled by one of the above rules and is\n\t\t\t// greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or\n\t\t\t// is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to\n\t\t\t// U+005A), or [a-z] (U+0061 to U+007A), […]\n\t\t\tif (\n\t\t\t\tcodeUnit >= 0x0080 ||\n\t\t\t\tcodeUnit == 0x002D ||\n\t\t\t\tcodeUnit == 0x005F ||\n\t\t\t\tcodeUnit >= 0x0030 && codeUnit <= 0x0039 ||\n\t\t\t\tcodeUnit >= 0x0041 && codeUnit <= 0x005A ||\n\t\t\t\tcodeUnit >= 0x0061 && codeUnit <= 0x007A\n\t\t\t) {\n\t\t\t\t// the character itself\n\t\t\t\tresult += string.charAt(index);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Otherwise, the escaped character.\n\t\t\t// https://drafts.csswg.org/cssom/#escape-a-character\n\t\t\tresult += '\\\\' + string.charAt(index);\n\n\t\t}\n\t\treturn result;\n\t};\n\n\tif (!root.CSS) {\n\t\troot.CSS = {};\n\t}\n\n\troot.CSS.escape = cssEscape;\n\n}));\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/favicon.js": {
"title": "$:/core/modules/startup/favicon.js",
"text": "/*\\\ntitle: $:/core/modules/startup/favicon.js\ntype: application/javascript\nmodule-type: startup\n\nFavicon handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"favicon\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\t\t\n// Favicon tiddler\nvar FAVICON_TITLE = \"$:/favicon.ico\";\n\nexports.startup = function() {\n\t// Set up the favicon\n\tsetFavicon();\n\t// Reset the favicon when the tiddler changes\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,FAVICON_TITLE)) {\n\t\t\tsetFavicon();\n\t\t}\n\t});\n};\n\nfunction setFavicon() {\n\tvar tiddler = $tw.wiki.getTiddler(FAVICON_TITLE);\n\tif(tiddler) {\n\t\tvar faviconLink = document.getElementById(\"faviconLink\");\n\t\tfaviconLink.setAttribute(\"href\",$tw.utils.makeDataUri(tiddler.fields.text,tiddler.fields.type,tiddler.fields._canonical_uri));\n\t}\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/info.js": {
"title": "$:/core/modules/startup/info.js",
"text": "/*\\\ntitle: $:/core/modules/startup/info.js\ntype: application/javascript\nmodule-type: startup\n\nInitialise $:/info tiddlers via $:/temp/info-plugin pseudo-plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"info\";\nexports.before = [\"startup\"];\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\nvar TITLE_INFO_PLUGIN = \"$:/temp/info-plugin\";\n\nexports.startup = function() {\n\t// Function to bake the info plugin with new tiddlers\n\tvar updateInfoPlugin = function(tiddlerFieldsArray) {\n\t\t// Get the existing tiddlers\n\t\tvar json = $tw.wiki.getTiddlerData(TITLE_INFO_PLUGIN,{tiddlers: {}});\n\t\t// Add the new ones\n\t\t$tw.utils.each(tiddlerFieldsArray,function(fields) {\n\t\t\tif(fields && fields.title) {\n\t\t\t\tjson.tiddlers[fields.title] = fields;\n\t\t\t}\n\t\t});\n\t\t// Bake the info tiddlers into a plugin. We use the non-standard plugin-type \"info\" because ordinary plugins are only registered asynchronously after being loaded dynamically\n\t\tvar fields = {\n\t\t\ttitle: TITLE_INFO_PLUGIN,\n\t\t\ttype: \"application/json\",\n\t\t\t\"plugin-type\": \"info\",\n\t\t\ttext: JSON.stringify(json,null,$tw.config.preferences.jsonSpaces)\n\t\t};\n\t\t$tw.wiki.addTiddler(new $tw.Tiddler(fields));\n\n\t};\n\t// Collect up the info tiddlers\n\tvar tiddlerFieldsArray = [];\n\t// Give each info module a chance to provide as many info tiddlers as they want as an array, and give them a callback for dynamically updating them\n\t$tw.modules.forEachModuleOfType(\"info\",function(title,moduleExports) {\n\t\tif(moduleExports && moduleExports.getInfoTiddlerFields) {\n\t\t\tArray.prototype.push.apply(tiddlerFieldsArray,moduleExports.getInfoTiddlerFields(updateInfoPlugin));\n\t\t}\n\t});\n\tupdateInfoPlugin(tiddlerFieldsArray);\n\tvar changes = $tw.wiki.readPluginInfo([TITLE_INFO_PLUGIN]);\n\t$tw.wiki.registerPluginTiddlers(\"info\",[TITLE_INFO_PLUGIN]);\n\t$tw.wiki.unpackPluginTiddlers();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/load-modules.js": {
"title": "$:/core/modules/startup/load-modules.js",
"text": "/*\\\ntitle: $:/core/modules/startup/load-modules.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"load-modules\";\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Load modules\n\t$tw.modules.applyMethods(\"utils\",$tw.utils);\n\tif($tw.node) {\n\t\t$tw.modules.applyMethods(\"utils-node\",$tw.utils);\n\t}\n\t$tw.modules.applyMethods(\"global\",$tw);\n\t$tw.modules.applyMethods(\"config\",$tw.config);\n\t$tw.Tiddler.fieldModules = $tw.modules.getModulesByTypeAsHashmap(\"tiddlerfield\");\n\t$tw.modules.applyMethods(\"tiddlermethod\",$tw.Tiddler.prototype);\n\t$tw.modules.applyMethods(\"wikimethod\",$tw.Wiki.prototype);\n\t$tw.wiki.addIndexersToWiki();\n\t$tw.modules.applyMethods(\"tiddlerdeserializer\",$tw.Wiki.tiddlerDeserializerModules);\n\t$tw.macros = $tw.modules.getModulesByTypeAsHashmap(\"macro\");\n\t$tw.wiki.initParsers();\n\t$tw.Commander.initCommands();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/password.js": {
"title": "$:/core/modules/startup/password.js",
"text": "/*\\\ntitle: $:/core/modules/startup/password.js\ntype: application/javascript\nmodule-type: startup\n\nPassword handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"password\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t$tw.rootWidget.addEventListener(\"tm-set-password\",function(event) {\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: $tw.language.getString(\"Encryption/PromptSetPassword\"),\n\t\t\tnoUserName: true,\n\t\t\tsubmitText: $tw.language.getString(\"Encryption/SetPassword\"),\n\t\t\tcanCancel: true,\n\t\t\trepeatPassword: true,\n\t\t\tcallback: function(data) {\n\t\t\t\tif(data) {\n\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t}\n\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t}\n\t\t});\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-clear-password\",function(event) {\n\t\tif($tw.browser) {\n\t\t\tif(!confirm($tw.language.getString(\"Encryption/ConfirmClearPassword\"))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t$tw.crypto.setPassword(null);\n\t});\n\t// Ensure that $:/isEncrypted is maintained properly\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,\"$:/isEncrypted\")) {\n\t\t\t$tw.crypto.updateCryptoStateTiddler();\n\t\t}\n\t});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/plugins.js": {
"title": "$:/core/modules/startup/plugins.js",
"text": "/*\\\ntitle: $:/core/modules/startup/plugins.js\ntype: application/javascript\nmodule-type: startup\n\nStartup logic concerned with managing plugins\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"plugins\";\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\nvar TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE = \"$:/status/RequireReloadDueToPluginChange\";\n\nvar PREFIX_CONFIG_REGISTER_PLUGIN_TYPE = \"$:/config/RegisterPluginType/\";\n\nexports.startup = function() {\n\t$tw.wiki.addTiddler({title: TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE,text: \"no\"});\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t// Work out which of the changed tiddlers are plugins that we need to reregister\n\t\tvar changesToProcess = [],\n\t\t\trequireReloadDueToPluginChange = false;\n\t\t$tw.utils.each(Object.keys(changes),function(title) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title),\n\t\t\t\trequiresReload = $tw.wiki.doesPluginRequireReload(title);\n\t\t\tif(requiresReload) {\n\t\t\t\trequireReloadDueToPluginChange = true;\n\t\t\t} else if(tiddler) {\n\t\t\t\tvar pluginType = tiddler.fields[\"plugin-type\"];\n\t\t\t\tif($tw.wiki.getTiddlerText(PREFIX_CONFIG_REGISTER_PLUGIN_TYPE + (tiddler.fields[\"plugin-type\"] || \"\"),\"no\") === \"yes\") {\n\t\t\t\t\tchangesToProcess.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t// Issue warning if any of the tiddlers require a reload\n\t\tif(requireReloadDueToPluginChange) {\n\t\t\t$tw.wiki.addTiddler({title: TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE,text: \"yes\"});\n\t\t}\n\t\t// Read or delete the plugin info of the changed tiddlers\n\t\tif(changesToProcess.length > 0) {\n\t\t\tvar changes = $tw.wiki.readPluginInfo(changesToProcess);\n\t\t\tif(changes.modifiedPlugins.length > 0 || changes.deletedPlugins.length > 0) {\n\t\t\t\tvar changedShadowTiddlers = {};\n\t\t\t\t// Collect the shadow tiddlers of any deleted plugins\n\t\t\t\t$tw.utils.each(changes.deletedPlugins,function(pluginTitle) {\n\t\t\t\t\tvar pluginInfo = $tw.wiki.getPluginInfo(pluginTitle);\n\t\t\t\t\tif(pluginInfo) {\n\t\t\t\t\t\t$tw.utils.each(Object.keys(pluginInfo.tiddlers),function(title) {\n\t\t\t\t\t\t\tchangedShadowTiddlers[title] = true;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t// Collect the shadow tiddlers of any modified plugins\n\t\t\t\t$tw.utils.each(changes.modifiedPlugins,function(pluginTitle) {\n\t\t\t\t\tvar pluginInfo = $tw.wiki.getPluginInfo(pluginTitle);\n\t\t\t\t\tif(pluginInfo) {\n\t\t\t\t\t\t$tw.utils.each(Object.keys(pluginInfo.tiddlers),function(title) {\n\t\t\t\t\t\t\tchangedShadowTiddlers[title] = false;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t// (Re-)register any modified plugins\n\t\t\t\t$tw.wiki.registerPluginTiddlers(null,changes.modifiedPlugins);\n\t\t\t\t// Unregister any deleted plugins\n\t\t\t\t$tw.wiki.unregisterPluginTiddlers(null,changes.deletedPlugins);\n\t\t\t\t// Unpack the shadow tiddlers\n\t\t\t\t$tw.wiki.unpackPluginTiddlers();\n\t\t\t\t// Queue change events for the changed shadow tiddlers\n\t\t\t\t$tw.utils.each(Object.keys(changedShadowTiddlers),function(title) {\n\t\t\t\t\t$tw.wiki.enqueueTiddlerEvent(title,changedShadowTiddlers[title]);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/render.js": {
"title": "$:/core/modules/startup/render.js",
"text": "/*\\\ntitle: $:/core/modules/startup/render.js\ntype: application/javascript\nmodule-type: startup\n\nTitle, stylesheet and page rendering\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"render\";\nexports.platforms = [\"browser\"];\nexports.after = [\"story\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar PAGE_TITLE_TITLE = \"$:/core/wiki/title\";\nvar PAGE_STYLESHEET_TITLE = \"$:/core/ui/PageStylesheet\";\nvar PAGE_TEMPLATE_TITLE = \"$:/core/ui/RootTemplate\";\n\n// Time (in ms) that we defer refreshing changes to draft tiddlers\nvar DRAFT_TIDDLER_TIMEOUT_TITLE = \"$:/config/Drafts/TypingTimeout\";\nvar THROTTLE_REFRESH_TIMEOUT = 400;\n\nexports.startup = function() {\n\t// Set up the title\n\t$tw.titleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TITLE_TITLE,{document: $tw.fakeDocument, parseAsInline: true});\n\t$tw.titleContainer = $tw.fakeDocument.createElement(\"div\");\n\t$tw.titleWidgetNode.render($tw.titleContainer,null);\n\tdocument.title = $tw.titleContainer.textContent;\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.titleWidgetNode.refresh(changes,$tw.titleContainer,null)) {\n\t\t\tdocument.title = $tw.titleContainer.textContent;\n\t\t}\n\t});\n\t// Set up the styles\n\t$tw.styleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_STYLESHEET_TITLE,{document: $tw.fakeDocument});\n\t$tw.styleContainer = $tw.fakeDocument.createElement(\"style\");\n\t$tw.styleWidgetNode.render($tw.styleContainer,null);\n\t$tw.styleElement = document.createElement(\"style\");\n\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\tdocument.head.insertBefore($tw.styleElement,document.head.firstChild);\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"styleRefresh\",function(changes) {\n\t\tif($tw.styleWidgetNode.refresh(changes,$tw.styleContainer,null)) {\n\t\t\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\t\t}\n\t}));\n\t// Display the $:/core/ui/PageTemplate tiddler to kick off the display\n\t$tw.perf.report(\"mainRender\",function() {\n\t\t$tw.pageWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TEMPLATE_TITLE,{document: document, parentWidget: $tw.rootWidget, recursionMarker: \"no\"});\n\t\t$tw.pageContainer = document.createElement(\"div\");\n\t\t$tw.utils.addClass($tw.pageContainer,\"tc-page-container-wrapper\");\n\t\tdocument.body.insertBefore($tw.pageContainer,document.body.firstChild);\n\t\t$tw.pageWidgetNode.render($tw.pageContainer,null);\n \t\t$tw.hooks.invokeHook(\"th-page-refreshed\");\n\t})();\n\t// Remove any splash screen elements\n\tvar removeList = document.querySelectorAll(\".tc-remove-when-wiki-loaded\");\n\t$tw.utils.each(removeList,function(removeItem) {\n\t\tif(removeItem.parentNode) {\n\t\t\tremoveItem.parentNode.removeChild(removeItem);\n\t\t}\n\t});\n\t// Prepare refresh mechanism\n\tvar deferredChanges = Object.create(null),\n\t\ttimerId;\n\tfunction refresh() {\n\t\t// Process the refresh\n\t\t$tw.hooks.invokeHook(\"th-page-refreshing\");\n\t\t$tw.pageWidgetNode.refresh(deferredChanges);\n\t\tdeferredChanges = Object.create(null);\n\t\t$tw.hooks.invokeHook(\"th-page-refreshed\");\n\t}\n\t// Add the change event handler\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"mainRefresh\",function(changes) {\n\t\t// Check if only tiddlers that are throttled have changed\n\t\tvar onlyThrottledTiddlersHaveChanged = true;\n\t\tfor(var title in changes) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\tif(!tiddler || !(tiddler.hasField(\"draft.of\") || tiddler.hasField(\"throttle.refresh\"))) {\n\t\t\t\tonlyThrottledTiddlersHaveChanged = false;\n\t\t\t}\n\t\t}\n\t\t// Defer the change if only drafts have changed\n\t\tif(timerId) {\n\t\t\tclearTimeout(timerId);\n\t\t}\n\t\ttimerId = null;\n\t\tif(onlyThrottledTiddlersHaveChanged) {\n\t\t\tvar timeout = parseInt($tw.wiki.getTiddlerText(DRAFT_TIDDLER_TIMEOUT_TITLE,\"\"),10);\n\t\t\tif(isNaN(timeout)) {\n\t\t\t\ttimeout = THROTTLE_REFRESH_TIMEOUT;\n\t\t\t}\n\t\t\ttimerId = setTimeout(refresh,timeout);\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t} else {\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t\trefresh();\n\t\t}\n\t}));\n\t// Fix up the link between the root widget and the page container\n\t$tw.rootWidget.domNodes = [$tw.pageContainer];\n\t$tw.rootWidget.children = [$tw.pageWidgetNode];\n\t// Run any post-render startup actions\n\t$tw.rootWidget.invokeActionsByTag(\"$:/tags/StartupAction/PostRender\");\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/rootwidget.js": {
"title": "$:/core/modules/startup/rootwidget.js",
"text": "/*\\\ntitle: $:/core/modules/startup/rootwidget.js\ntype: application/javascript\nmodule-type: startup\n\nSetup the root widget and the core root widget handlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"rootwidget\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.before = [\"story\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Install the modal message mechanism\n\t$tw.modal = new $tw.utils.Modal($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-modal\",function(event) {\n\t\t$tw.modal.display(event.param,{variables: event.paramObject, event: event});\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-show-switcher\",function(event) {\n\t\t$tw.modal.display(\"$:/core/ui/SwitcherModal\",{variables: event.paramObject, event: event});\n\t});\t\n\t// Install the notification mechanism\n\t$tw.notifier = new $tw.utils.Notifier($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-notify\",function(event) {\n\t\t$tw.notifier.display(event.param,{variables: event.paramObject});\n\t});\n\t// Install the copy-to-clipboard mechanism\n\t$tw.rootWidget.addEventListener(\"tm-copy-to-clipboard\",function(event) {\n\t\t$tw.utils.copyToClipboard(event.param);\n\t});\n\t// Install the tm-focus-selector message\n\t$tw.rootWidget.addEventListener(\"tm-focus-selector\",function(event) {\n\t\tvar selector = event.param || \"\",\n\t\t\telement;\n\t\ttry {\n\t\t\telement = document.querySelector(selector);\n\t\t} catch(e) {\n\t\t\tconsole.log(\"Error in selector: \",selector)\n\t\t}\n\t\tif(element && element.focus) {\n\t\t\telement.focus(event.paramObject);\n\t\t}\n\t});\n\t// Install the scroller\n\t$tw.pageScroller = new $tw.utils.PageScroller();\n\t$tw.rootWidget.addEventListener(\"tm-scroll\",function(event) {\n\t\t$tw.pageScroller.handleEvent(event);\n\t});\n\tvar fullscreen = $tw.utils.getFullScreenApis();\n\tif(fullscreen) {\n\t\t$tw.rootWidget.addEventListener(\"tm-full-screen\",function(event) {\n\t\t\tvar fullScreenDocument = event.event ? event.event.target.ownerDocument : document;\n\t\t\tif(event.param === \"enter\") {\n\t\t\t\tfullScreenDocument.documentElement[fullscreen._requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\n\t\t\t} else if(event.param === \"exit\") {\n\t\t\t\tfullScreenDocument[fullscreen._exitFullscreen]();\n\t\t\t} else {\n\t\t\t\tif(fullScreenDocument[fullscreen._fullscreenElement]) {\n\t\t\t\t\tfullScreenDocument[fullscreen._exitFullscreen]();\n\t\t\t\t} else {\n\t\t\t\t\tfullScreenDocument.documentElement[fullscreen._requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\t\t});\n\t}\n\t// If we're being viewed on a data: URI then give instructions for how to save\n\tif(document.location.protocol === \"data:\") {\n\t\t$tw.rootWidget.dispatchEvent({\n\t\t\ttype: \"tm-modal\",\n\t\t\tparam: \"$:/language/Modals/SaveInstructions\"\n\t\t});\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup.js": {
"title": "$:/core/modules/startup.js",
"text": "/*\\\ntitle: $:/core/modules/startup.js\ntype: application/javascript\nmodule-type: startup\n\nMiscellaneous startup logic for both the client and server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"startup\";\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\n// Set to `true` to enable performance instrumentation\nvar PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE = \"$:/config/Performance/Instrumentation\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.startup = function() {\n\tvar modules,n,m,f;\n\t// Minimal browser detection\n\tif($tw.browser) {\n\t\t$tw.browser.isIE = (/msie|trident/i.test(navigator.userAgent));\n\t\t$tw.browser.isFirefox = !!document.mozFullScreenEnabled;\n\t}\n\t// Platform detection\n\t$tw.platform = {};\n\tif($tw.browser) {\n\t\t$tw.platform.isMac = /Mac/.test(navigator.platform);\n\t\t$tw.platform.isWindows = /win/i.test(navigator.platform);\n\t\t$tw.platform.isLinux = /Linux/i.test(navigator.platform);\n\t} else {\n\t\tswitch(require(\"os\").platform()) {\n\t\t\tcase \"darwin\":\n\t\t\t\t$tw.platform.isMac = true;\n\t\t\t\tbreak;\n\t\t\tcase \"win32\":\n\t\t\t\t$tw.platform.isWindows = true;\n\t\t\t\tbreak;\n\t\t\tcase \"freebsd\":\n\t\t\t\t$tw.platform.isLinux = true;\n\t\t\t\tbreak;\n\t\t\tcase \"linux\":\n\t\t\t\t$tw.platform.isLinux = true;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t// Initialise version\n\t$tw.version = $tw.utils.extractVersionInfo();\n\t// Set up the performance framework\n\t$tw.perf = new $tw.Performance($tw.wiki.getTiddlerText(PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE,\"no\") === \"yes\");\n\t// Create a root widget for attaching event handlers. By using it as the parentWidget for another widget tree, one can reuse the event handlers\n\t$tw.rootWidget = new widget.widget({\n\t\ttype: \"widget\",\n\t\tchildren: []\n\t},{\n\t\twiki: $tw.wiki,\n\t\tdocument: $tw.browser ? document : $tw.fakeDocument\n\t});\n\t// Execute any startup actions\n\t$tw.rootWidget.invokeActionsByTag(\"$:/tags/StartupAction\");\n\tif($tw.browser) {\n\t\t$tw.rootWidget.invokeActionsByTag(\"$:/tags/StartupAction/Browser\");\t\t\n\t}\n\tif($tw.node) {\n\t\t$tw.rootWidget.invokeActionsByTag(\"$:/tags/StartupAction/Node\");\t\t\n\t}\n\t// Kick off the language manager and switcher\n\t$tw.language = new $tw.Language();\n\t$tw.languageSwitcher = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"language\",\n\t\tcontrollerTitle: \"$:/language\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/languages/en-GB\"\n\t\t],\n\t\tonSwitch: function(plugins) {\n\t\t\tif($tw.browser) {\n\t\t\t\tvar pluginTiddler = $tw.wiki.getTiddler(plugins[0]);\n\t\t\t\tif(pluginTiddler) {\n\t\t\t\t\tdocument.documentElement.setAttribute(\"dir\",pluginTiddler.getFieldString(\"text-direction\") || \"auto\");\n\t\t\t\t} else {\n\t\t\t\t\tdocument.documentElement.removeAttribute(\"dir\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\t// Kick off the theme manager\n\t$tw.themeManager = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"theme\",\n\t\tcontrollerTitle: \"$:/theme\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/themes/tiddlywiki/snowwhite\",\n\t\t\t\"$:/themes/tiddlywiki/vanilla\"\n\t\t]\n\t});\n\t// Kick off the keyboard manager\n\t$tw.keyboardManager = new $tw.KeyboardManager();\n\t// Listen for shortcuts\n\tif($tw.browser) {\n\t\t$tw.utils.addEventListeners(document,[{\n\t\t\tname: \"keydown\",\n\t\t\thandlerObject: $tw.keyboardManager,\n\t\t\thandlerMethod: \"handleKeydownEvent\"\n\t\t}]);\n\t}\n\t// Clear outstanding tiddler store change events to avoid an unnecessary refresh cycle at startup\n\t$tw.wiki.clearTiddlerEventQueue();\n\t// Find a working syncadaptor\n\t$tw.syncadaptor = undefined;\n\t$tw.modules.forEachModuleOfType(\"syncadaptor\",function(title,module) {\n\t\tif(!$tw.syncadaptor && module.adaptorClass) {\n\t\t\t$tw.syncadaptor = new module.adaptorClass({wiki: $tw.wiki});\n\t\t}\n\t});\n\t// Set up the syncer object if we've got a syncadaptor\n\tif($tw.syncadaptor) {\n\t\t$tw.syncer = new $tw.Syncer({wiki: $tw.wiki, syncadaptor: $tw.syncadaptor});\n\t}\n\t// Setup the saver handler\n\t$tw.saverHandler = new $tw.SaverHandler({\n\t\twiki: $tw.wiki,\n\t\tdirtyTracking: !$tw.syncadaptor,\n\t\tpreloadDirty: $tw.boot.preloadDirty || []\n\t});\n\t// Host-specific startup\n\tif($tw.browser) {\n\t\t// Install the popup manager\n\t\t$tw.popup = new $tw.utils.Popup();\n\t\t// Install the animator\n\t\t$tw.anim = new $tw.utils.Animator();\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/story.js": {
"title": "$:/core/modules/startup/story.js",
"text": "/*\\\ntitle: $:/core/modules/startup/story.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"story\";\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar DEFAULT_STORY_TITLE = \"$:/StoryList\";\nvar DEFAULT_HISTORY_TITLE = \"$:/HistoryList\";\n\n// Default tiddlers\nvar DEFAULT_TIDDLERS_TITLE = \"$:/DefaultTiddlers\";\n\n// Config\nvar CONFIG_UPDATE_ADDRESS_BAR = \"$:/config/Navigation/UpdateAddressBar\"; // Can be \"no\", \"permalink\", \"permaview\"\nvar CONFIG_UPDATE_HISTORY = \"$:/config/Navigation/UpdateHistory\"; // Can be \"yes\" or \"no\"\nvar CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD = \"$:/config/Navigation/Permalinkview/CopyToClipboard\"; // Can be \"yes\" (default) or \"no\"\nvar CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR = \"$:/config/Navigation/Permalinkview/UpdateAddressBar\"; // Can be \"yes\" (default) or \"no\"\n\n\n// Links to help, if there is no param\nvar HELP_OPEN_EXTERNAL_WINDOW = \"http://tiddlywiki.com/#WidgetMessage%3A%20tm-open-external-window\";\n\nexports.startup = function() {\n\t// Open startup tiddlers\n\topenStartupTiddlers({\n\t\tdisableHistory: $tw.boot.disableStartupNavigation\n\t});\n\tif($tw.browser) {\n\t\t// Set up location hash update\n\t\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t\tif($tw.utils.hop(changes,DEFAULT_STORY_TITLE) || $tw.utils.hop(changes,DEFAULT_HISTORY_TITLE)) {\n\t\t\t\tupdateLocationHash({\n\t\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_UPDATE_ADDRESS_BAR,\"permaview\").trim(),\n\t\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim()\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t// Listen for changes to the browser location hash\n\t\twindow.addEventListener(\"hashchange\",function() {\n\t\t\tvar hash = $tw.utils.getLocationHash();\n\t\t\tif(hash !== $tw.locationHash) {\n\t\t\t\t$tw.locationHash = hash;\n\t\t\t\topenStartupTiddlers({defaultToCurrentStory: true});\n\t\t\t}\n\t\t},false);\n\t\t// Listen for the tm-browser-refresh message\n\t\t$tw.rootWidget.addEventListener(\"tm-browser-refresh\",function(event) {\n\t\t\twindow.location.reload(true);\n\t\t});\n\t\t// Listen for tm-open-external-window message\n\t\t$tw.rootWidget.addEventListener(\"tm-open-external-window\",function(event) {\n\t\t\tvar paramObject = event.paramObject || {},\n\t\t\t\tstrUrl = event.param || HELP_OPEN_EXTERNAL_WINDOW,\n\t\t\t\tstrWindowName = paramObject.windowName,\n\t\t\t\tstrWindowFeatures = paramObject.windowFeatures;\n\t\t\twindow.open(strUrl, strWindowName, strWindowFeatures);\n\t\t});\n\t\t// Listen for the tm-print message\n\t\t$tw.rootWidget.addEventListener(\"tm-print\",function(event) {\n\t\t\t(event.event.view || window).print();\n\t\t});\n\t\t// Listen for the tm-home message\n\t\t$tw.rootWidget.addEventListener(\"tm-home\",function(event) {\n\t\t\twindow.location.hash = \"\";\n\t\t\tvar storyFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE),\n\t\t\t\tstoryList = $tw.wiki.filterTiddlers(storyFilter);\n\t\t\t//invoke any hooks that might change the default story list\n\t\t\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t\t\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t\t\tif(storyList[0]) {\n\t\t\t\t$tw.wiki.addToHistory(storyList[0]);\n\t\t\t}\n\t\t});\n\t\t// Listen for the tm-permalink message\n\t\t$tw.rootWidget.addEventListener(\"tm-permalink\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR,\"yes\").trim() === \"yes\" ? \"permalink\" : \"none\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle,\n\t\t\t\tcopyToClipboard: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD,\"yes\").trim() === \"yes\" ? \"permalink\" : \"none\"\n\t\t\t});\n\t\t});\n\t\t// Listen for the tm-permaview message\n\t\t$tw.rootWidget.addEventListener(\"tm-permaview\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR,\"yes\").trim() === \"yes\" ? \"permaview\" : \"none\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle,\n\t\t\t\tcopyToClipboard: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD,\"yes\").trim() === \"yes\" ? \"permaview\" : \"none\"\n\t\t\t});\t\t\t\t\n\t\t});\n\t}\n};\n\n/*\nProcess the location hash to open the specified tiddlers. Options:\ndisableHistory: if true $:/History is NOT updated\ndefaultToCurrentStory: If true, the current story is retained as the default, instead of opening the default tiddlers\n*/\nfunction openStartupTiddlers(options) {\n\toptions = options || {};\n\t// Work out the target tiddler and the story filter. \"null\" means \"unspecified\"\n\tvar target = null,\n\t\tstoryFilter = null;\n\tif($tw.locationHash.length > 1) {\n\t\tvar hash = $tw.locationHash.substr(1),\n\t\t\tsplit = hash.indexOf(\":\");\n\t\tif(split === -1) {\n\t\t\ttarget = decodeURIComponent(hash.trim());\n\t\t} else {\n\t\t\ttarget = decodeURIComponent(hash.substr(0,split).trim());\n\t\t\tstoryFilter = decodeURIComponent(hash.substr(split + 1).trim());\n\t\t}\n\t}\n\t// If the story wasn't specified use the current tiddlers or a blank story\n\tif(storyFilter === null) {\n\t\tif(options.defaultToCurrentStory) {\n\t\t\tvar currStoryList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE);\n\t\t\tstoryFilter = $tw.utils.stringifyList(currStoryList);\n\t\t} else {\n\t\t\tif(target && target !== \"\") {\n\t\t\t\tstoryFilter = \"\";\n\t\t\t} else {\n\t\t\t\tstoryFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE);\n\t\t\t}\n\t\t}\n\t}\n\t// Process the story filter to get the story list\n\tvar storyList = $tw.wiki.filterTiddlers(storyFilter);\n\t// Invoke any hooks that want to change the default story list\n\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t// If the target tiddler isn't included then splice it in at the top\n\tif(target && storyList.indexOf(target) === -1) {\n\t\tstoryList.unshift(target);\n\t}\n\t// Save the story list\n\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t// Update history\n\tvar story = new $tw.Story({\n\t\twiki: $tw.wiki,\n\t\tstoryTitle: DEFAULT_STORY_TITLE,\n\t\thistoryTitle: DEFAULT_HISTORY_TITLE\n\t});\n\tif(!options.disableHistory) {\n\t\t// If a target tiddler was specified add it to the history stack\n\t\tif(target && target !== \"\") {\n\t\t\t// The target tiddler doesn't need double square brackets, but we'll silently remove them if they're present\n\t\t\tif(target.indexOf(\"[[\") === 0 && target.substr(-2) === \"]]\") {\n\t\t\t\ttarget = target.substr(2,target.length - 4);\n\t\t\t}\n\t\t\tstory.addToHistory(target);\n\t\t} else if(storyList.length > 0) {\n\t\t\tstory.addToHistory(storyList[0]);\n\t\t}\t\t\n\t}\n}\n\n/*\noptions: See below\noptions.updateAddressBar: \"permalink\", \"permaview\" or \"no\" (defaults to \"permaview\")\noptions.updateHistory: \"yes\" or \"no\" (defaults to \"no\")\noptions.copyToClipboard: \"permalink\", \"permaview\" or \"no\" (defaults to \"no\")\noptions.targetTiddler: optional title of target tiddler for permalink\n*/\nfunction updateLocationHash(options) {\n\t// Get the story and the history stack\n\tvar storyList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE),\n\t\thistoryList = $tw.wiki.getTiddlerData(DEFAULT_HISTORY_TITLE,[]),\n\t\ttargetTiddler = \"\";\n\tif(options.targetTiddler) {\n\t\ttargetTiddler = options.targetTiddler;\n\t} else {\n\t\t// The target tiddler is the one at the top of the stack\n\t\tif(historyList.length > 0) {\n\t\t\ttargetTiddler = historyList[historyList.length-1].title;\n\t\t}\n\t\t// Blank the target tiddler if it isn't present in the story\n\t\tif(storyList.indexOf(targetTiddler) === -1) {\n\t\t\ttargetTiddler = \"\";\n\t\t}\n\t}\n\t// Assemble the location hash\n\tswitch(options.updateAddressBar) {\n\t\tcase \"permalink\":\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler);\n\t\t\tbreak;\n\t\tcase \"permaview\":\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler) + \":\" + encodeURIComponent($tw.utils.stringifyList(storyList));\n\t\t\tbreak;\n\t}\n\t// Copy URL to the clipboard\n\tswitch(options.copyToClipboard) {\n\t\tcase \"permalink\":\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getLocationPath() + \"#\" + encodeURIComponent(targetTiddler));\n\t\t\tbreak;\n\t\tcase \"permaview\":\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getLocationPath() + \"#\" + encodeURIComponent(targetTiddler) + \":\" + encodeURIComponent($tw.utils.stringifyList(storyList)));\n\t\t\tbreak;\n\t}\n\t// Only change the location hash if we must, thus avoiding unnecessary onhashchange events\n\tif($tw.utils.getLocationHash() !== $tw.locationHash) {\n\t\tif(options.updateHistory === \"yes\") {\n\t\t\t// Assign the location hash so that history is updated\n\t\t\twindow.location.hash = $tw.locationHash;\n\t\t} else {\n\t\t\t// We use replace so that browser history isn't affected\n\t\t\twindow.location.replace(window.location.toString().split(\"#\")[0] + $tw.locationHash);\n\t\t}\n\t}\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/windows.js": {
"title": "$:/core/modules/startup/windows.js",
"text": "/*\\\ntitle: $:/core/modules/startup/windows.js\ntype: application/javascript\nmodule-type: startup\n\nSetup root widget handlers for the messages concerned with opening external browser windows\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"windows\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Global to keep track of open windows (hashmap by title)\n$tw.windows = {};\n\nexports.startup = function() {\n\t// Handle open window message\n\t$tw.rootWidget.addEventListener(\"tm-open-window\",function(event) {\n\t\t// Get the parameters\n\t\tvar refreshHandler,\n\t\t\ttitle = event.param || event.tiddlerTitle,\n\t\t\tparamObject = event.paramObject || {},\n\t\t\twindowTitle = paramObject.windowTitle || title,\n\t\t\ttemplate = paramObject.template || \"$:/core/templates/single.tiddler.window\",\n\t\t\twidth = paramObject.width || \"700\",\n\t\t\theight = paramObject.height || \"600\",\n\t\t\tvariables = $tw.utils.extend({},paramObject,{currentTiddler: title});\n\t\t// Open the window\n\t\tvar srcWindow,\n\t\t srcDocument;\n\t\t// In case that popup blockers deny opening a new window\n\t\ttry {\n\t\t\tsrcWindow = window.open(\"\",\"external-\" + title,\"scrollbars,width=\" + width + \",height=\" + height),\n\t\t\tsrcDocument = srcWindow.document;\n\t\t}\n\t\tcatch(e) {\n\t\t\treturn;\n\t\t}\n\t\t$tw.windows[title] = srcWindow;\n\t\t// Check for reopening the same window\n\t\tif(srcWindow.haveInitialisedWindow) {\n\t\t\treturn;\n\t\t}\n\t\t// Initialise the document\n\t\tsrcDocument.write(\"<html><head></head><body class='tc-body tc-single-tiddler-window'></body></html>\");\n\t\tsrcDocument.close();\n\t\tsrcDocument.title = windowTitle;\n\t\tsrcWindow.addEventListener(\"beforeunload\",function(event) {\n\t\t\tdelete $tw.windows[title];\n\t\t\t$tw.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t},false);\n\t\t// Set up the styles\n\t\tvar styleWidgetNode = $tw.wiki.makeTranscludeWidget(\"$:/core/ui/PageStylesheet\",{\n\t\t\t\tdocument: $tw.fakeDocument,\n\t\t\t\tvariables: variables,\n\t\t\t\timportPageMacros: true}),\n\t\t\tstyleContainer = $tw.fakeDocument.createElement(\"style\");\n\t\tstyleWidgetNode.render(styleContainer,null);\n\t\tvar styleElement = srcDocument.createElement(\"style\");\n\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\tsrcDocument.head.insertBefore(styleElement,srcDocument.head.firstChild);\n\t\t// Render the text of the tiddler\n\t\tvar parser = $tw.wiki.parseTiddler(template),\n\t\t\twidgetNode = $tw.wiki.makeWidget(parser,{document: srcDocument, parentWidget: $tw.rootWidget, variables: variables});\n\t\twidgetNode.render(srcDocument.body,srcDocument.body.firstChild);\n\t\t// Function to handle refreshes\n\t\trefreshHandler = function(changes) {\n\t\t\tif(styleWidgetNode.refresh(changes,styleContainer,null)) {\n\t\t\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\t\t}\n\t\t\twidgetNode.refresh(changes);\n\t\t};\n\t\t$tw.wiki.addEventListener(\"change\",refreshHandler);\n\t\t// Listen for keyboard shortcuts\n\t\t$tw.utils.addEventListeners(srcDocument,[{\n\t\t\tname: \"keydown\",\n\t\t\thandlerObject: $tw.keyboardManager,\n\t\t\thandlerMethod: \"handleKeydownEvent\"\n\t\t}]);\n\t\tsrcWindow.document.documentElement.addEventListener(\"click\",$tw.popup,true);\n\t\tsrcWindow.haveInitialisedWindow = true;\n\t});\n\t// Close open windows when unloading main window\n\t$tw.addUnloadTask(function() {\n\t\t$tw.utils.each($tw.windows,function(win) {\n\t\t\twin.close();\n\t\t});\n\t});\n\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/story.js": {
"title": "$:/core/modules/story.js",
"text": "/*\\\ntitle: $:/core/modules/story.js\ntype: application/javascript\nmodule-type: global\n\nLightweight object for managing interactions with the story and history lists.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nConstruct Story object with options:\nwiki: reference to wiki object to use to resolve tiddler titles\nstoryTitle: title of story list tiddler\nhistoryTitle: title of history list tiddler\n*/\nfunction Story(options) {\n\toptions = options || {};\n\tthis.wiki = options.wiki || $tw.wiki;\n\tthis.storyTitle = options.storyTitle || \"$:/StoryList\";\n\tthis.historyTitle = options.historyTitle || \"$:/HistoryList\";\n};\n\nStory.prototype.navigateTiddler = function(navigateTo,navigateFromTitle,navigateFromClientRect) {\n\tthis.addToStory(navigateTo,navigateFromTitle);\n\tthis.addToHistory(navigateTo,navigateFromClientRect);\n};\n\nStory.prototype.getStoryList = function() {\n\treturn this.wiki.getTiddlerList(this.storyTitle) || [];\n};\n\nStory.prototype.addToStory = function(navigateTo,navigateFromTitle,options) {\n\toptions = options || {};\n\tvar storyList = this.getStoryList();\n\t// See if the tiddler is already there\n\tvar slot = storyList.indexOf(navigateTo);\n\t// Quit if it already exists in the story river\n\tif(slot >= 0) {\n\t\treturn;\n\t}\n\t// First we try to find the position of the story element we navigated from\n\tvar fromIndex = storyList.indexOf(navigateFromTitle);\n\tif(fromIndex >= 0) {\n\t\t// The tiddler is added from inside the river\n\t\t// Determine where to insert the tiddler; Fallback is \"below\"\n\t\tswitch(options.openLinkFromInsideRiver) {\n\t\t\tcase \"top\":\n\t\t\t\tslot = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"bottom\":\n\t\t\t\tslot = storyList.length;\n\t\t\t\tbreak;\n\t\t\tcase \"above\":\n\t\t\t\tslot = fromIndex;\n\t\t\t\tbreak;\n\t\t\tcase \"below\": // Intentional fall-through\n\t\t\tdefault:\n\t\t\t\tslot = fromIndex + 1;\n\t\t\t\tbreak;\n\t\t}\n\t} else {\n\t\t// The tiddler is opened from outside the river. Determine where to insert the tiddler; default is \"top\"\n\t\tif(options.openLinkFromOutsideRiver === \"bottom\") {\n\t\t\t// Insert at bottom\n\t\t\tslot = storyList.length;\n\t\t} else {\n\t\t\t// Insert at top\n\t\t\tslot = 0;\n\t\t}\n\t}\n\t// Add the tiddler\n\tstoryList.splice(slot,0,navigateTo);\n\t// Save the story\n\tthis.saveStoryList(storyList);\n};\n\nStory.prototype.saveStoryList = function(storyList) {\n\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\t{title: this.storyTitle},\n\t\tstoryTiddler,\n\t\t{list: storyList},\n\t\tthis.wiki.getModificationFields()\n\t));\n};\n\nStory.prototype.addToHistory = function(navigateTo,navigateFromClientRect) {\n\tvar titles = $tw.utils.isArray(navigateTo) ? navigateTo : [navigateTo];\n\t// Add a new record to the top of the history stack\n\tvar historyList = this.wiki.getTiddlerData(this.historyTitle,[]);\n\t$tw.utils.each(titles,function(title) {\n\t\thistoryList.push({title: title, fromPageRect: navigateFromClientRect});\n\t});\n\tthis.wiki.setTiddlerData(this.historyTitle,historyList,{\"current-tiddler\": titles[titles.length-1]});\n};\n\nStory.prototype.storyCloseTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCloseAllTiddlers = function() {\n// TBD\n};\n\nStory.prototype.storyCloseOtherTiddlers = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyEditTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyDeleteTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storySaveTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCancelTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyNewTiddler = function(targetTitle) {\n// TBD\n};\n\nexports.Story = Story;\n\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/storyviews/classic.js": {
"title": "$:/core/modules/storyviews/classic.js",
"text": "/*\\\ntitle: $:/core/modules/storyviews/classic.js\ntype: application/javascript\nmodule-type: storyview\n\nViews the story as a linear sequence\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ClassicStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nClassicStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar duration = $tw.utils.getAnimationDuration()\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\tif(duration) {\n\t\t// Scroll the node into view\n\t\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\t\n\t} else {\n\t\ttargetElement.scrollIntoView();\n\t}\n};\n\nClassicStoryView.prototype.insert = function(widget) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tif(duration) {\n\t\tvar targetElement = widget.findFirstDomNode();\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(targetElement instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\t\t// Get the current height of the tiddler\n\t\tvar computedStyle = window.getComputedStyle(targetElement),\n\t\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t\t// Reset the margin once the transition is over\n\t\tsetTimeout(function() {\n\t\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t\t{transition: \"none\"},\n\t\t\t\t{marginBottom: \"\"}\n\t\t\t]);\n\t\t},duration);\n\t\t// Set up the initial position of the element\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t\t{opacity: \"0.0\"}\n\t\t]);\n\t\t$tw.utils.forceLayout(targetElement);\n\t\t// Transition to the final position\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t\t{opacity: \"1.0\"}\n\t]);\n\t}\n};\n\nClassicStoryView.prototype.remove = function(widget) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tif(duration) {\n\t\tvar targetElement = widget.findFirstDomNode(),\n\t\t\tremoveElement = function() {\n\t\t\t\twidget.removeChildDomNodes();\n\t\t\t};\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(targetElement instanceof Element)) {\n\t\t\tremoveElement();\n\t\t\treturn;\n\t\t}\n\t\t// Get the current height of the tiddler\n\t\tvar currWidth = targetElement.offsetWidth,\n\t\t\tcomputedStyle = window.getComputedStyle(targetElement),\n\t\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t\t// Remove the dom nodes of the widget at the end of the transition\n\t\tsetTimeout(removeElement,duration);\n\t\t// Animate the closure\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{transform: \"translateX(0px)\"},\n\t\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t\t{opacity: \"1.0\"}\n\t\t]);\n\t\t$tw.utils.forceLayout(targetElement);\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\t\"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t\t{transform: \"translateX(-\" + currWidth + \"px)\"},\n\t\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t\t{opacity: \"0.0\"}\n\t\t]);\n\t} else {\n\t\twidget.removeChildDomNodes();\n\t}\n};\n\nexports.classic = ClassicStoryView;\n\n})();",
"type": "application/javascript",
"module-type": "storyview"
},
"$:/core/modules/storyviews/pop.js": {
"title": "$:/core/modules/storyviews/pop.js",
"text": "/*\\\ntitle: $:/core/modules/storyviews/pop.js\ntype: application/javascript\nmodule-type: storyview\n\nAnimates list insertions and removals\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar PopStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nPopStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Scroll the node into view\n\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\n};\n\nPopStoryView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Reset once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{transform: \"none\"}\n\t\t]);\n\t\t$tw.utils.setStyle(widget.document.body,[\n\t\t\t{\"overflow-x\": \"\"}\n\t\t]);\n\t},duration);\n\t// Prevent the page from overscrolling due to the zoom factor\n\t$tw.utils.setStyle(widget.document.body,[\n\t\t{\"overflow-x\": \"hidden\"}\n\t]);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(2)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t// Transition to the final position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n};\n\nPopStoryView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\tif(targetElement && targetElement.parentNode) {\n\t\t\t\twidget.removeChildDomNodes();\n\t\t\t}\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Remove the element at the end of the transition\n\tsetTimeout(removeElement,duration);\n\t// Animate the closure\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(0.1)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n};\n\nexports.pop = PopStoryView;\n\n})();\n",
"type": "application/javascript",
"module-type": "storyview"
},
"$:/core/modules/storyviews/zoomin.js": {
"title": "$:/core/modules/storyviews/zoomin.js",
"text": "/*\\\ntitle: $:/core/modules/storyviews/zoomin.js\ntype: application/javascript\nmodule-type: storyview\n\nZooms between individual tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ZoominListView = function(listWidget) {\n\tvar self = this;\n\tthis.listWidget = listWidget;\n\t// Get the index of the tiddler that is at the top of the history\n\tvar history = this.listWidget.wiki.getTiddlerDataCached(this.listWidget.historyTitle,[]),\n\t\ttargetTiddler;\n\tif(history.length > 0) {\n\t\ttargetTiddler = history[history.length-1].title;\n\t}\n\t// Make all the tiddlers position absolute, and hide all but the top (or first) one\n\t$tw.utils.each(this.listWidget.children,function(itemWidget,index) {\n\t\tvar domNode = itemWidget.findFirstDomNode();\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(domNode instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\t\tif((targetTiddler && targetTiddler !== itemWidget.parseTreeNode.itemTitle) || (!targetTiddler && index)) {\n\t\t\tdomNode.style.display = \"none\";\n\t\t} else {\n\t\t\tself.currentTiddlerDomNode = domNode;\n\t\t}\n\t\t$tw.utils.addClass(domNode,\"tc-storyview-zoomin-tiddler\");\n\t});\n};\n\nZoominListView.prototype.navigateTo = function(historyInfo) {\n\tvar duration = $tw.utils.getAnimationDuration(),\n\t\tlistElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the new tiddler be position absolute and visible so that we can measure it\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"0 0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t// Get the position of the source node, or use the centre of the window as the source position\n\tvar sourceBounds = historyInfo.fromPageRect || {\n\t\t\tleft: window.innerWidth/2 - 2,\n\t\t\ttop: window.innerHeight/2 - 2,\n\t\t\twidth: window.innerWidth/8,\n\t\t\theight: window.innerHeight/8\n\t\t};\n\t// Try to find the title node in the target tiddler\n\tvar titleDomNode = findTitleDomNode(listItemWidget) || listItemWidget.findFirstDomNode(),\n\t\tzoomBounds = titleDomNode.getBoundingClientRect();\n\t// Compute the transform for the target tiddler to make the title lie over the source rectange\n\tvar targetBounds = targetElement.getBoundingClientRect(),\n\t\tscale = sourceBounds.width / zoomBounds.width,\n\t\tx = sourceBounds.left - targetBounds.left - (zoomBounds.left - targetBounds.left) * scale,\n\t\ty = sourceBounds.top - targetBounds.top - (zoomBounds.top - targetBounds.top) * scale;\n\t// Transform the target tiddler to its starting position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(targetElement);\n\t// Apply the ending transitions with a timeout to ensure that the previously applied transformations are applied first\n\tvar self = this,\n\t\tprevCurrentTiddler = this.currentTiddlerDomNode;\n\tthis.currentTiddlerDomNode = targetElement;\n\t// Transform the target tiddler to its natural size\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{zIndex: \"500\"},\n\t]);\n\t// Transform the previous tiddler out of the way and then hide it\n\tif(prevCurrentTiddler && prevCurrentTiddler !== targetElement) {\n\t\tscale = zoomBounds.width / sourceBounds.width;\n\t\tx = zoomBounds.left - targetBounds.left - (sourceBounds.left - targetBounds.left) * scale;\n\t\ty = zoomBounds.top - targetBounds.top - (sourceBounds.top - targetBounds.top) * scale;\n\t\t$tw.utils.setStyle(prevCurrentTiddler,[\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transformOrigin: \"0 0\"},\n\t\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"},\n\t\t\t{zIndex: \"0\"}\n\t\t]);\n\t\t// Hide the tiddler when the transition has finished\n\t\tsetTimeout(function() {\n\t\t\tif(self.currentTiddlerDomNode !== prevCurrentTiddler) {\n\t\t\t\tprevCurrentTiddler.style.display = \"none\";\n\t\t\t}\n\t\t},duration);\n\t}\n\t// Scroll the target into view\n//\t$tw.pageScroller.scrollIntoView(targetElement);\n};\n\n/*\nFind the first child DOM node of a widget that has the class \"tc-title\"\n*/\nfunction findTitleDomNode(widget,targetClass) {\n\ttargetClass = targetClass || \"tc-title\";\n\tvar domNode = widget.findFirstDomNode();\n\tif(domNode && domNode.querySelector) {\n\t\treturn domNode.querySelector(\".\" + targetClass);\n\t}\n\treturn null;\n}\n\nZoominListView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the newly inserted node position absolute and hidden\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"none\"}\n\t]);\n};\n\nZoominListView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\twidget.removeChildDomNodes();\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Abandon if hidden\n\tif(targetElement.style.display != \"block\" ) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Set up the tiddler that is being closed\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\t// We'll move back to the previous or next element in the story\n\tvar toWidget = widget.previousSibling();\n\tif(!toWidget) {\n\t\ttoWidget = widget.nextSibling();\n\t}\n\tvar toWidgetDomNode = toWidget && toWidget.findFirstDomNode();\n\t// Set up the tiddler we're moving back in\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.addClass(toWidgetDomNode,\"tc-storyview-zoomin-tiddler\");\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{display: \"block\"},\n\t\t\t{transformOrigin: \"50% 50%\"},\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(10)\"},\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0\"},\n\t\t\t{zIndex: \"500\"}\n\t\t]);\n\t\tthis.currentTiddlerDomNode = toWidgetDomNode;\n\t}\n\t// Animate them both\n\t// Force layout\n\t$tw.utils.forceLayout(this.listWidget.parentDomNode);\n\t// First, the tiddler we're closing\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(0.1)\"},\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"0\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\tsetTimeout(removeElement,duration);\n\t// Now the tiddler we're going back to\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t\t{opacity: \"1\"}\n\t\t]);\n\t}\n\treturn true; // Indicate that we'll delete the DOM node\n};\n\nexports.zoomin = ZoominListView;\n\n})();\n",
"type": "application/javascript",
"module-type": "storyview"
},
"$:/core/modules/syncer.js": {
"title": "$:/core/modules/syncer.js",
"text": "/*\\\ntitle: $:/core/modules/syncer.js\ntype: application/javascript\nmodule-type: global\n\nThe syncer tracks changes to the store and synchronises them to a remote data store represented as a \"sync adaptor\"\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDefaults\n*/\nSyncer.prototype.titleIsLoggedIn = \"$:/status/IsLoggedIn\";\nSyncer.prototype.titleIsAnonymous = \"$:/status/IsAnonymous\";\nSyncer.prototype.titleIsReadOnly = \"$:/status/IsReadOnly\";\nSyncer.prototype.titleUserName = \"$:/status/UserName\";\nSyncer.prototype.titleSyncFilter = \"$:/config/SyncFilter\";\nSyncer.prototype.titleSyncPollingInterval = \"$:/config/SyncPollingInterval\";\nSyncer.prototype.titleSyncDisableLazyLoading = \"$:/config/SyncDisableLazyLoading\";\nSyncer.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\nSyncer.prototype.titleSyncThrottleInterval = \"$:/config/SyncThrottleInterval\";\nSyncer.prototype.taskTimerInterval = 1 * 1000; // Interval for sync timer\nSyncer.prototype.throttleInterval = 1 * 1000; // Defer saving tiddlers if they've changed in the last 1s...\nSyncer.prototype.errorRetryInterval = 5 * 1000; // Interval to retry after an error\nSyncer.prototype.fallbackInterval = 10 * 1000; // Unless the task is older than 10s\nSyncer.prototype.pollTimerInterval = 60 * 1000; // Interval for polling for changes from the adaptor\n\n/*\nInstantiate the syncer with the following options:\nsyncadaptor: reference to syncadaptor to be used\nwiki: wiki to be synced\n*/\nfunction Syncer(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\t// Save parameters\n\tthis.syncadaptor = options.syncadaptor;\n\tthis.disableUI = !!options.disableUI;\n\tthis.titleIsLoggedIn = options.titleIsLoggedIn || this.titleIsLoggedIn;\n\tthis.titleUserName = options.titleUserName || this.titleUserName;\n\tthis.titleSyncFilter = options.titleSyncFilter || this.titleSyncFilter;\n\tthis.titleSavedNotification = options.titleSavedNotification || this.titleSavedNotification;\n\tthis.taskTimerInterval = options.taskTimerInterval || this.taskTimerInterval;\n\tthis.throttleInterval = options.throttleInterval || parseInt(this.wiki.getTiddlerText(this.titleSyncThrottleInterval,\"\"),10) || this.throttleInterval;\n\tthis.errorRetryInterval = options.errorRetryInterval || this.errorRetryInterval;\n\tthis.fallbackInterval = options.fallbackInterval || this.fallbackInterval;\n\tthis.pollTimerInterval = options.pollTimerInterval || parseInt(this.wiki.getTiddlerText(this.titleSyncPollingInterval,\"\"),10) || this.pollTimerInterval;\n\tthis.logging = \"logging\" in options ? options.logging : true;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"syncer\" + ($tw.browser ? \"-browser\" : \"\") + ($tw.node ? \"-server\" : \"\") + (this.syncadaptor.name ? (\"-\" + this.syncadaptor.name) : \"\"),{\n\t\tcolour: \"cyan\",\n\t\tenable: this.logging,\n\t\tsaveHistory: true\n\t});\n\t// Make another logger for connection errors\n\tthis.loggerConnection = new $tw.utils.Logger(\"syncer\" + ($tw.browser ? \"-browser\" : \"\") + ($tw.node ? \"-server\" : \"\") + (this.syncadaptor.name ? (\"-\" + this.syncadaptor.name) : \"\") + \"-connection\",{\n\t\tcolour: \"cyan\",\n\t\tenable: this.logging\n\t});\n\t// Ask the syncadaptor to use the main logger\n\tif(this.syncadaptor.setLoggerSaveBuffer) {\n\t\tthis.syncadaptor.setLoggerSaveBuffer(this.logger);\n\t}\n\t// Compile the dirty tiddler filter\n\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t// Record information for known tiddlers\n\tthis.readTiddlerInfo();\n\tthis.titlesToBeLoaded = {}; // Hashmap of titles of tiddlers that need loading from the server\n\tthis.titlesHaveBeenLazyLoaded = {}; // Hashmap of titles of tiddlers that have already been lazily loaded from the server\n\t// Timers\n\tthis.taskTimerId = null; // Timer for task dispatch\n\tthis.pollTimerId = null; // Timer for polling server\n\t// Number of outstanding requests\n\tthis.numTasksInProgress = 0;\n\t// Listen out for changes to tiddlers\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\t// Filter the changes to just include ones that are being synced\n\t\tvar filteredChanges = self.getSyncedTiddlers(function(callback) {\n\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\tvar tiddler = self.wiki.tiddlerExists(title) && self.wiki.getTiddler(title);\n\t\t\t\tcallback(tiddler,title);\n\t\t\t});\n\t\t});\n\t\tif(filteredChanges.length > 0) {\n\t\t\tself.processTaskQueue();\n\t\t} else {\n\t\t\t// Look for deletions of tiddlers we're already syncing\t\n\t\t\tvar outstandingDeletion = false\n\t\t\t$tw.utils.each(changes,function(change,title,object) {\n\t\t\t\tif(change.deleted && $tw.utils.hop(self.tiddlerInfo,title)) {\n\t\t\t\t\toutstandingDeletion = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(outstandingDeletion) {\n\t\t\t\tself.processTaskQueue();\n\t\t\t}\n\t\t}\n\t});\n\t// Browser event handlers\n\tif($tw.browser && !this.disableUI) {\n\t\t// Set up our beforeunload handler\n\t\t$tw.addUnloadTask(function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t\t// Listen out for login/logout/refresh events in the browser\n\t\t$tw.rootWidget.addEventListener(\"tm-login\",function(event) {\n\t\t\tvar username = event && event.paramObject && event.paramObject.username,\n\t\t\t\tpassword = event && event.paramObject && event.paramObject.password;\n\t\t\tif(username && password) {\n\t\t\t\t// Login with username and password\n\t\t\t\tself.login(username,password,function() {});\n\t\t\t} else {\n\t\t\t\t// No username and password, so we display a prompt\n\t\t\t\tself.handleLoginEvent();\t\t\t\t\n\t\t\t}\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-logout\",function() {\n\t\t\tself.handleLogoutEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-server-refresh\",function() {\n\t\t\tself.handleRefreshEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-copy-syncer-logs-to-clipboard\",function() {\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getSystemInfo() + \"\\n\\nLog:\\n\" + self.logger.getBuffer());\n\t\t});\n\t}\n\t// Listen out for lazyLoad events\n\tif(!this.disableUI && this.wiki.getTiddlerText(this.titleSyncDisableLazyLoading) !== \"yes\") {\n\t\tthis.wiki.addEventListener(\"lazyLoad\",function(title) {\n\t\t\tself.handleLazyLoadEvent(title);\n\t\t});\t\t\n\t}\n\t// Get the login status\n\tthis.getStatus(function(err,isLoggedIn) {\n\t\t// Do a sync from the server\n\t\tself.syncFromServer();\n\t});\n}\n\n/*\nShow a generic network error alert\n*/\nSyncer.prototype.displayError = function(msg,err) {\n\tif(err === ($tw.language.getString(\"Error/XMLHttpRequest\") + \": 0\")) {\n\t\tthis.loggerConnection.alert($tw.language.getString(\"Error/NetworkErrorAlert\"));\n\t\tthis.logger.log(msg + \":\",err);\n\t} else {\n\t\tthis.logger.alert(msg + \":\",err);\n\t}\n};\n\n/*\nReturn an array of the tiddler titles that are subjected to syncing\n*/\nSyncer.prototype.getSyncedTiddlers = function(source) {\n\treturn this.filterFn.call(this.wiki,source);\n};\n\n/*\nReturn an array of the tiddler titles that are subjected to syncing\n*/\nSyncer.prototype.getTiddlerRevision = function(title) {\n\tif(this.syncadaptor && this.syncadaptor.getTiddlerRevision) {\n\t\treturn this.syncadaptor.getTiddlerRevision(title);\n\t} else {\n\t\treturn this.wiki.getTiddler(title).fields.revision;\t\n\t} \n};\n\n/*\nRead (or re-read) the latest tiddler info from the store\n*/\nSyncer.prototype.readTiddlerInfo = function() {\n\t// Hashmap by title of {revision:,changeCount:,adaptorInfo:}\n\t// \"revision\" is the revision of the tiddler last seen on the server, and \"changecount\" is the corresponding local changecount\n\tthis.tiddlerInfo = {};\n\t// Record information for known tiddlers\n\tvar self = this,\n\t\ttiddlers = this.getSyncedTiddlers();\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tself.tiddlerInfo[title] = {\n\t\t\t\trevision: self.getTiddlerRevision(title),\n\t\t\t\tadaptorInfo: self.syncadaptor && self.syncadaptor.getTiddlerInfo(tiddler),\n\t\t\t\tchangeCount: self.wiki.getChangeCount(title)\n\t\t\t};\n\t\t}\n\t});\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSyncer.prototype.isDirty = function() {\n\tthis.logger.log(\"Checking dirty status\");\n\t// Check tiddlers that are in the store and included in the filter function\n\tvar titles = this.getSyncedTiddlers();\n\tfor(var index=0; index<titles.length; index++) {\n\t\tvar title = titles[index],\n\t\t\ttiddlerInfo = this.tiddlerInfo[title];\n\t\tif(this.wiki.tiddlerExists(title)) {\n\t\t\tif(tiddlerInfo) {\n\t\t\t\t// If the tiddler is known on the server and has been modified locally then it needs to be saved to the server\n\t\t\t\tif(this.wiki.getChangeCount(title) > tiddlerInfo.changeCount) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If the tiddler isn't known on the server then it needs to be saved to the server\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\t// Check tiddlers that are known from the server but not currently in the store\n\ttitles = Object.keys(this.tiddlerInfo);\n\tfor(index=0; index<titles.length; index++) {\n\t\tif(!this.wiki.tiddlerExists(titles[index])) {\n\t\t\t// There must be a pending delete\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSyncer.prototype.updateDirtyStatus = function() {\n\tif($tw.browser && !this.disableUI) {\n\t\tvar dirty = this.isDirty();\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",dirty);\n\t\tif(!dirty) {\n\t\t\tthis.loggerConnection.clearAlerts();\n\t\t}\n\t}\n};\n\n/*\nSave an incoming tiddler in the store, and updates the associated tiddlerInfo\n*/\nSyncer.prototype.storeTiddler = function(tiddlerFields) {\n\t// Save the tiddler\n\tvar tiddler = new $tw.Tiddler(tiddlerFields);\n\tthis.wiki.addTiddler(tiddler);\n\t// Save the tiddler revision and changeCount details\n\tthis.tiddlerInfo[tiddlerFields.title] = {\n\t\trevision: this.getTiddlerRevision(tiddlerFields.title),\n\t\tadaptorInfo: this.syncadaptor.getTiddlerInfo(tiddler),\n\t\tchangeCount: this.wiki.getChangeCount(tiddlerFields.title)\n\t};\n};\n\nSyncer.prototype.getStatus = function(callback) {\n\tvar self = this;\n\t// Check if the adaptor supports getStatus()\n\tif(this.syncadaptor && this.syncadaptor.getStatus) {\n\t\t// Mark us as not logged in\n\t\tthis.wiki.addTiddler({title: this.titleIsLoggedIn,text: \"no\"});\n\t\t// Get login status\n\t\tthis.syncadaptor.getStatus(function(err,isLoggedIn,username,isReadOnly,isAnonymous) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t} else {\n\t\t\t\t// Set the various status tiddlers\n\t\t\t\tself.wiki.addTiddler({title: self.titleIsReadOnly,text: isReadOnly ? \"yes\" : \"no\"});\n\t\t\t\tself.wiki.addTiddler({title: self.titleIsAnonymous,text: isAnonymous ? \"yes\" : \"no\"});\n\t\t\t\tself.wiki.addTiddler({title: self.titleIsLoggedIn,text: isLoggedIn ? \"yes\" : \"no\"});\n\t\t\t\tif(isLoggedIn) {\n\t\t\t\t\tself.wiki.addTiddler({title: self.titleUserName,text: username || \"\"});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tif(callback) {\n\t\t\t\tcallback(err,isLoggedIn,username);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tcallback(null,true,\"UNAUTHENTICATED\");\n\t}\n};\n\n/*\nSynchronise from the server by reading the skinny tiddler list and queuing up loads for any tiddlers that we don't already have up to date\n*/\nSyncer.prototype.syncFromServer = function() {\n\tvar self = this,\n\t\tcancelNextSync = function() {\n\t\t\tif(self.pollTimerId) {\n\t\t\t\tclearTimeout(self.pollTimerId);\n\t\t\t\tself.pollTimerId = null;\n\t\t\t}\n\t\t},\n\t\ttriggerNextSync = function() {\n\t\t\tself.pollTimerId = setTimeout(function() {\n\t\t\t\tself.pollTimerId = null;\n\t\t\t\tself.syncFromServer.call(self);\n\t\t\t},self.pollTimerInterval);\n\t\t},\n\t\tsyncSystemFromServer = (self.wiki.getTiddlerText(\"$:/config/SyncSystemTiddlersFromServer\") === \"yes\" ? true : false);\n\tif(this.syncadaptor && this.syncadaptor.getUpdatedTiddlers) {\n\t\tthis.logger.log(\"Retrieving updated tiddler list\");\n\t\tcancelNextSync();\n\t\tthis.syncadaptor.getUpdatedTiddlers(self,function(err,updates) {\n\t\t\ttriggerNextSync();\n\t\t\tif(err) {\n\t\t\t\tself.displayError($tw.language.getString(\"Error/RetrievingSkinny\"),err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(updates) {\n\t\t\t\t$tw.utils.each(updates.modifications,function(title) {\n\t\t\t\t\tself.titlesToBeLoaded[title] = true;\n\t\t\t\t});\n\t\t\t\t$tw.utils.each(updates.deletions,function(title) {\n\t\t\t\t\tif(syncSystemFromServer || !self.wiki.isSystemTiddler(title)) {\n\t\t\t\t\t\tdelete self.tiddlerInfo[title];\n\t\t\t\t\t\tself.logger.log(\"Deleting tiddler missing from server:\",title);\n\t\t\t\t\t\tself.wiki.deleteTiddler(title);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(updates.modifications.length > 0 || updates.deletions.length > 0) {\n\t\t\t\t\tself.processTaskQueue();\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\t\t});\n\t} else if(this.syncadaptor && this.syncadaptor.getSkinnyTiddlers) {\n\t\tthis.logger.log(\"Retrieving skinny tiddler list\");\n\t\tcancelNextSync();\n\t\tthis.syncadaptor.getSkinnyTiddlers(function(err,tiddlers) {\n\t\t\ttriggerNextSync();\n\t\t\t// Check for errors\n\t\t\tif(err) {\n\t\t\t\tself.displayError($tw.language.getString(\"Error/RetrievingSkinny\"),err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Keep track of which tiddlers we already know about have been reported this time\n\t\t\tvar previousTitles = Object.keys(self.tiddlerInfo);\n\t\t\t// Process each incoming tiddler\n\t\t\tfor(var t=0; t<tiddlers.length; t++) {\n\t\t\t\t// Get the incoming tiddler fields, and the existing tiddler\n\t\t\t\tvar tiddlerFields = tiddlers[t],\n\t\t\t\t\tincomingRevision = tiddlerFields.revision + \"\",\n\t\t\t\t\ttiddler = self.wiki.tiddlerExists(tiddlerFields.title) && self.wiki.getTiddler(tiddlerFields.title),\n\t\t\t\t\ttiddlerInfo = self.tiddlerInfo[tiddlerFields.title],\n\t\t\t\t\tcurrRevision = tiddlerInfo ? tiddlerInfo.revision : null,\n\t\t\t\t\tindexInPreviousTitles = previousTitles.indexOf(tiddlerFields.title);\n\t\t\t\tif(indexInPreviousTitles !== -1) {\n\t\t\t\t\tpreviousTitles.splice(indexInPreviousTitles,1);\n\t\t\t\t}\n\t\t\t\t// Ignore the incoming tiddler if it's the same as the revision we've already got\n\t\t\t\tif(currRevision !== incomingRevision) {\n\t\t\t\t\t// Only load the skinny version if we don't already have a fat version of the tiddler\n\t\t\t\t\tif(!tiddler || tiddler.fields.text === undefined) {\n\t\t\t\t\t\tself.storeTiddler(tiddlerFields);\n\t\t\t\t\t}\n\t\t\t\t\t// Do a full load of this tiddler\n\t\t\t\t\tself.titlesToBeLoaded[tiddlerFields.title] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Delete any tiddlers that were previously reported but missing this time\n\t\t\t$tw.utils.each(previousTitles,function(title) {\n\t\t\t\tif(syncSystemFromServer || !self.wiki.isSystemTiddler(title)) {\n\t\t\t\t\tdelete self.tiddlerInfo[title];\n\t\t\t\t\tself.logger.log(\"Deleting tiddler missing from server:\",title);\n\t\t\t\t\tself.wiki.deleteTiddler(title);\n\t\t\t\t}\n\t\t\t});\n\t\t\tself.processTaskQueue();\n\t\t});\n\t}\n};\n\n/*\nForce load a tiddler from the server\n*/\nSyncer.prototype.enqueueLoadTiddler = function(title) {\n\tthis.titlesToBeLoaded[title] = true;\n\tthis.processTaskQueue();\n};\n\n/*\nLazily load a skinny tiddler if we can\n*/\nSyncer.prototype.handleLazyLoadEvent = function(title) {\n\t// Ignore if the syncadaptor doesn't handle it\n\tif(!this.syncadaptor.supportsLazyLoading) {\n\t\treturn;\n\t}\n\t// Don't lazy load the same tiddler twice\n\tif(!this.titlesHaveBeenLazyLoaded[title]) {\n\t\t// Don't lazy load if the tiddler isn't included in the sync filter\n\t\tif(this.getSyncedTiddlers().indexOf(title) !== -1) {\n\t\t\t// Mark the tiddler as needing loading, and having already been lazily loaded\n\t\t\tthis.titlesToBeLoaded[title] = true;\n\t\t\tthis.titlesHaveBeenLazyLoaded[title] = true;\n\t\t}\n\t}\n};\n\n/*\nDispay a password prompt and allow the user to login\n*/\nSyncer.prototype.handleLoginEvent = function() {\n\tvar self = this;\n\tthis.getStatus(function(err,isLoggedIn,username) {\n\t\tif(!err && !isLoggedIn) {\n\t\t\tif(self.syncadaptor && self.syncadaptor.displayLoginPrompt) {\n\t\t\t\tself.syncadaptor.displayLoginPrompt(self);\n\t\t\t} else {\n\t\t\t\tself.displayLoginPrompt();\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nDispay a password prompt\n*/\nSyncer.prototype.displayLoginPrompt = function() {\n\tvar self = this;\n\tvar promptInfo = $tw.passwordPrompt.createPrompt({\n\t\tserviceName: $tw.language.getString(\"LoginToTiddlySpace\"),\n\t\tcallback: function(data) {\n\t\t\tself.login(data.username,data.password,function(err,isLoggedIn) {\n\t\t\t\tself.syncFromServer();\n\t\t\t});\n\t\t\treturn true; // Get rid of the password prompt\n\t\t}\n\t});\n};\n\n/*\nAttempt to login to TiddlyWeb.\n\tusername: username\n\tpassword: password\n\tcallback: invoked with arguments (err,isLoggedIn)\n*/\nSyncer.prototype.login = function(username,password,callback) {\n\tthis.logger.log(\"Attempting to login as\",username);\n\tvar self = this;\n\tif(this.syncadaptor.login) {\n\t\tthis.syncadaptor.login(username,password,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.getStatus(function(err,isLoggedIn,username) {\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback(err,isLoggedIn);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t} else {\n\t\tcallback(null,true);\n\t}\n};\n\n/*\nAttempt to log out of TiddlyWeb\n*/\nSyncer.prototype.handleLogoutEvent = function() {\n\tthis.logger.log(\"Attempting to logout\");\n\tvar self = this;\n\tif(this.syncadaptor.logout) {\n\t\tthis.syncadaptor.logout(function(err) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t} else {\n\t\t\t\tself.getStatus();\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nImmediately refresh from the server\n*/\nSyncer.prototype.handleRefreshEvent = function() {\n\tthis.syncFromServer();\n};\n\n/*\nProcess the next task\n*/\nSyncer.prototype.processTaskQueue = function() {\n\tvar self = this;\n\t// Only process a task if the sync adaptor is fully initialised and we're not already performing\n\t// a task. If we are already performing a task then we'll dispatch the next one when it completes\n\tif((!this.syncadaptor.isReady || this.syncadaptor.isReady()) && this.numTasksInProgress === 0) {\n\t\t// Choose the next task to perform\n\t\tvar task = this.chooseNextTask();\n\t\t// Perform the task if we had one\n\t\tif(typeof task === \"object\" && task !== null) {\n\t\t\tthis.numTasksInProgress += 1;\n\t\t\ttask.run(function(err) {\n\t\t\t\tself.numTasksInProgress -= 1;\n\t\t\t\tif(err) {\n\t\t\t\t\tself.displayError(\"Sync error while processing \" + task.type + \" of '\" + task.title + \"'\",err);\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t\tself.triggerTimeout(self.errorRetryInterval);\n\t\t\t\t} else {\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t\t// Process the next task\n\t\t\t\t\tself.processTaskQueue.call(self);\t\t\t\t\t\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t// No task is ready so update the status\n\t\t\tthis.updateDirtyStatus();\n\t\t\t// And trigger a timeout if there is a pending task\n\t\t\tif(task === true) {\n\t\t\t\tthis.triggerTimeout();\t\t\t\t\n\t\t\t}\n\t\t}\n\t} else {\n\t\tthis.updateDirtyStatus();\t\t\n\t}\n};\n\nSyncer.prototype.triggerTimeout = function(interval) {\n\tvar self = this;\n\tif(!this.taskTimerId) {\n\t\tthis.taskTimerId = setTimeout(function() {\n\t\t\tself.taskTimerId = null;\n\t\t\tself.processTaskQueue.call(self);\n\t\t},interval || self.taskTimerInterval);\n\t}\n};\n\n/*\nChoose the next sync task. We prioritise saves, then deletes, then loads from the server\n\nReturns either a task object, null if there's no upcoming tasks, or the boolean true if there are pending tasks that aren't yet due\n*/\nSyncer.prototype.chooseNextTask = function() {\n\tvar thresholdLastSaved = (new Date()) - this.throttleInterval,\n\t\thavePending = null;\n\t// First we look for tiddlers that have been modified locally and need saving back to the server\n\tvar titles = this.getSyncedTiddlers();\n\tfor(var index=0; index<titles.length; index++) {\n\t\tvar title = titles[index],\n\t\t\ttiddler = this.wiki.tiddlerExists(title) && this.wiki.getTiddler(title),\n\t\t\ttiddlerInfo = this.tiddlerInfo[title];\n\t\tif(tiddler) {\n\t\t\t// If the tiddler is not known on the server, or has been modified locally no more recently than the threshold then it needs to be saved to the server\n\t\t\tvar hasChanged = !tiddlerInfo || this.wiki.getChangeCount(title) > tiddlerInfo.changeCount,\n\t\t\t\tisReadyToSave = !tiddlerInfo || !tiddlerInfo.timestampLastSaved || tiddlerInfo.timestampLastSaved < thresholdLastSaved;\n\t\t\tif(hasChanged) {\n\t\t\t\tif(isReadyToSave) {\n\t\t\t\t\treturn new SaveTiddlerTask(this,title); \t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\thavePending = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Second, we check tiddlers that are known from the server but not currently in the store, and so need deleting on the server\n\ttitles = Object.keys(this.tiddlerInfo);\n\tfor(index=0; index<titles.length; index++) {\n\t\ttitle = titles[index];\n\t\ttiddlerInfo = this.tiddlerInfo[title];\n\t\ttiddler = this.wiki.tiddlerExists(title) && this.wiki.getTiddler(title);\n\t\tif(!tiddler) {\n\t\t\treturn new DeleteTiddlerTask(this,title);\n\t\t}\n\t}\n\t// Check for tiddlers that need loading\n\ttitle = Object.keys(this.titlesToBeLoaded)[0];\n\tif(title) {\n\t\tdelete this.titlesToBeLoaded[title];\n\t\treturn new LoadTiddlerTask(this,title);\n\t}\n\t// No tasks are ready\n\treturn havePending;\n};\n\nfunction SaveTiddlerTask(syncer,title) {\n\tthis.syncer = syncer;\n\tthis.title = title;\n\tthis.type = \"save\";\n}\n\nSaveTiddlerTask.prototype.run = function(callback) {\n\tvar self = this,\n\t\tchangeCount = this.syncer.wiki.getChangeCount(this.title),\n\t\ttiddler = this.syncer.wiki.tiddlerExists(this.title) && this.syncer.wiki.getTiddler(this.title);\n\tthis.syncer.logger.log(\"Dispatching 'save' task:\",this.title);\n\tif(tiddler) {\n\t\tthis.syncer.syncadaptor.saveTiddler(tiddler,function(err,adaptorInfo,revision) {\n\t\t\t// If there's an error, exit without changing any internal state\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\t// Adjust the info stored about this tiddler\n\t\t\tself.syncer.tiddlerInfo[self.title] = {\n\t\t\t\tchangeCount: changeCount,\n\t\t\t\tadaptorInfo: adaptorInfo,\n\t\t\t\trevision: revision,\n\t\t\t\ttimestampLastSaved: new Date()\n\t\t\t};\n\t\t\t// Invoke the callback\n\t\t\tcallback(null);\n\t\t},{\n\t\t\ttiddlerInfo: self.syncer.tiddlerInfo[self.title]\n\t\t});\n\t} else {\n\t\tthis.syncer.logger.log(\" Not Dispatching 'save' task:\",this.title,\"tiddler does not exist\");\n\t\t$tw.utils.nextTick(callback(null));\n\t}\n};\n\nfunction DeleteTiddlerTask(syncer,title) {\n\tthis.syncer = syncer;\n\tthis.title = title;\n\tthis.type = \"delete\";\n}\n\nDeleteTiddlerTask.prototype.run = function(callback) {\n\tvar self = this;\n\tthis.syncer.logger.log(\"Dispatching 'delete' task:\",this.title);\n\tthis.syncer.syncadaptor.deleteTiddler(this.title,function(err) {\n\t\t// If there's an error, exit without changing any internal state\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\t// Remove the info stored about this tiddler\n\t\tdelete self.syncer.tiddlerInfo[self.title];\n\t\tif($tw.boot.files){\n\t\t\t// Remove the tiddler from $tw.boot.files\n\t\t\tdelete $tw.boot.files[self.title];\n\t\t}\n\t\t// Invoke the callback\n\t\tcallback(null);\n\t},{\n\t\ttiddlerInfo: self.syncer.tiddlerInfo[this.title]\n\t});\n};\n\nfunction LoadTiddlerTask(syncer,title) {\n\tthis.syncer = syncer;\n\tthis.title = title;\n\tthis.type = \"load\";\n}\n\nLoadTiddlerTask.prototype.run = function(callback) {\n\tvar self = this;\n\tthis.syncer.logger.log(\"Dispatching 'load' task:\",this.title);\n\tthis.syncer.syncadaptor.loadTiddler(this.title,function(err,tiddlerFields) {\n\t\t// If there's an error, exit without changing any internal state\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\t// Update the info stored about this tiddler\n\t\tif(tiddlerFields) {\n\t\t\tself.syncer.storeTiddler(tiddlerFields);\n\t\t}\n\t\t// Invoke the callback\n\t\tcallback(null);\n\t});\n};\n\nexports.Syncer = Syncer;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/tiddler.js": {
"title": "$:/core/modules/tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/tiddler.js\ntype: application/javascript\nmodule-type: tiddlermethod\n\nExtension methods for the $tw.Tiddler object (constructor and methods required at boot time are in boot/boot.js)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.hasTag = function(tag) {\n\treturn this.fields.tags && this.fields.tags.indexOf(tag) !== -1;\n};\n\nexports.isPlugin = function() {\n\treturn this.fields.type === \"application/json\" && this.hasField(\"plugin-type\");\n};\n\nexports.isDraft = function() {\n\treturn this.hasField(\"draft.of\");\n};\n\nexports.getFieldString = function(field) {\n\tvar value = this.fields[field];\n\t// Check for a missing field\n\tif(value === undefined || value === null) {\n\t\treturn \"\";\n\t}\n\t// Parse the field with the associated module (if any)\n\tvar fieldModule = $tw.Tiddler.fieldModules[field];\n\tif(fieldModule && fieldModule.stringify) {\n\t\treturn fieldModule.stringify.call(this,value);\n\t} else {\n\t\treturn value.toString();\n\t}\n};\n\n/*\nGet the value of a field as a list\n*/\nexports.getFieldList = function(field) {\n\tvar value = this.fields[field];\n\t// Check for a missing field\n\tif(value === undefined || value === null) {\n\t\treturn [];\n\t}\n\treturn $tw.utils.parseStringArray(value);\n};\n\n/*\nGet all the fields as a hashmap of strings. Options:\n\texclude: an array of field names to exclude\n*/\nexports.getFieldStrings = function(options) {\n\toptions = options || {};\n\tvar exclude = options.exclude || [];\n\tvar fields = {};\n\tfor(var field in this.fields) {\n\t\tif($tw.utils.hop(this.fields,field)) {\n\t\t\tif(exclude.indexOf(field) === -1) {\n\t\t\t\tfields[field] = this.getFieldString(field);\n\t\t\t}\n\t\t}\n\t}\n\treturn fields;\n};\n\n/*\nGet all the fields as a name:value block. Options:\n\texclude: an array of field names to exclude\n*/\nexports.getFieldStringBlock = function(options) {\n\toptions = options || {};\n\tvar exclude = options.exclude || [],\n\t\tfields = Object.keys(this.fields).sort(),\n\t\tresult = [];\n\tfor(var t=0; t<fields.length; t++) {\n\t\tvar field = fields[t];\n\t\tif(exclude.indexOf(field) === -1) {\n\t\t\tresult.push(field + \": \" + this.getFieldString(field));\n\t\t}\n\t}\n\treturn result.join(\"\\n\");\n};\n\nexports.getFieldDay = function(field) {\n\tif(this.cache && this.cache.day && $tw.utils.hop(this.cache.day,field) ) {\n\t\treturn this.cache.day[field];\n\t}\n\tvar day = \"\";\n\tif(this.fields[field]) {\n\t\tday = (new Date($tw.utils.parseDate(this.fields[field]))).setHours(0,0,0,0);\n\t}\n\tthis.cache.day = this.cache.day || {};\n\tthis.cache.day[field] = day;\n\treturn day;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "tiddlermethod"
},
"$:/core/modules/upgraders/plugins.js": {
"title": "$:/core/modules/upgraders/plugins.js",
"text": "/*\\\ntitle: $:/core/modules/upgraders/plugins.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that checks that plugins are newer than any already installed version\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar BLOCKED_PLUGINS = {\n\t\"$:/themes/tiddlywiki/stickytitles\": {\n\t\tversions: [\"*\"]\n\t},\n\t\"$:/plugins/tiddlywiki/fullscreen\": {\n\t\tversions: [\"*\"]\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {},\n\t\tupgradeLibrary,\n\t\tgetLibraryTiddler = function(title) {\n\t\t\tif(!upgradeLibrary) {\n\t\t\t\tupgradeLibrary = wiki.getTiddlerData(UPGRADE_LIBRARY_TITLE,{});\n\t\t\t\tupgradeLibrary.tiddlers = upgradeLibrary.tiddlers || {};\n\t\t\t}\n\t\t\treturn upgradeLibrary.tiddlers[title];\n\t\t};\n\n\t// Go through all the incoming tiddlers\n\t$tw.utils.each(titles,function(title) {\n\t\tvar incomingTiddler = tiddlers[title];\n\t\t// Check if we're dealing with a plugin\n\t\tif(incomingTiddler && incomingTiddler[\"plugin-type\"]) {\n\t\t\t// Check whether the plugin contains JS modules\n\t\t\tvar requiresReload = wiki.doesPluginInfoRequireReload(JSON.parse(incomingTiddler.text)) ? (wiki.getTiddlerText(\"$:/language/ControlPanel/Plugins/PluginWillRequireReload\") + \" \") : \"\";\n\t\t\tmessages[title] = requiresReload;\n\t\t\tif(incomingTiddler.version) {\n\t\t\t\t// Upgrade the incoming plugin if it is in the upgrade library\n\t\t\t\tvar libraryTiddler = getLibraryTiddler(title);\n\t\t\t\tif(libraryTiddler && libraryTiddler[\"plugin-type\"] && libraryTiddler.version) {\n\t\t\t\t\ttiddlers[title] = libraryTiddler;\n\t\t\t\t\tmessages[title] = requiresReload + $tw.language.getString(\"Import/Upgrader/Plugins/Upgraded\",{variables: {incoming: incomingTiddler.version, upgraded: libraryTiddler.version}});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Suppress the incoming plugin if it is older than the currently installed one\n\t\t\t\tvar existingTiddler = wiki.getTiddler(title);\n\t\t\t\tif(existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t\t\t\t// Reject the incoming plugin by blanking all its fields\n\t\t\t\t\tif($tw.utils.checkVersions(existingTiddler.fields.version,incomingTiddler.version)) {\n\t\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Version\",{variables: {incoming: incomingTiddler.version, existing: existingTiddler.fields.version}});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Check whether the plugin is on the blocked list\n\t\t\tvar blockInfo = BLOCKED_PLUGINS[title];\n\t\t\tif(blockInfo) {\n\t\t\t\tif(blockInfo.versions.indexOf(\"*\") !== -1 || (incomingTiddler.version && blockInfo.versions.indexOf(incomingTiddler.version) !== -1)) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Incompatible\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "upgrader"
},
"$:/core/modules/upgraders/system.js": {
"title": "$:/core/modules/upgraders/system.js",
"text": "/*\\\ntitle: $:/core/modules/upgraders/system.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that suppresses certain system tiddlers that shouldn't be imported\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DONT_IMPORT_LIST = [\"$:/StoryList\",\"$:/HistoryList\"],\n\tDONT_IMPORT_PREFIX_LIST = [\"$:/temp/\",\"$:/state/\",\"$:/Import\"],\n\tWARN_IMPORT_PREFIX_LIST = [\"$:/core/modules/\"];\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {},\n\t\tshowAlert = false;\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tif(DONT_IMPORT_LIST.indexOf(title) !== -1) {\n\t\t\ttiddlers[title] = Object.create(null);\n\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/System/Suppressed\");\n\t\t} else {\n\t\t\tfor(var t=0; t<DONT_IMPORT_PREFIX_LIST.length; t++) {\n\t\t\t\tvar prefix = DONT_IMPORT_PREFIX_LIST[t];\n\t\t\t\tif(title.substr(0,prefix.length) === prefix) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/State/Suppressed\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor(var t=0; t<WARN_IMPORT_PREFIX_LIST.length; t++) {\n\t\t\t\tvar prefix = WARN_IMPORT_PREFIX_LIST[t];\n\t\t\t\tif(title.substr(0,prefix.length) === prefix && wiki.isShadowTiddler(title)) {\n\t\t\t\t\tshowAlert = true;\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/System/Warning\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\tif(showAlert) {\n\t\tvar logger = new $tw.utils.Logger(\"import\");\n\t\tlogger.alert($tw.language.getString(\"Import/Upgrader/System/Alert\"));\n\t}\n\treturn messages;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "upgrader"
},
"$:/core/modules/upgraders/themetweaks.js": {
"title": "$:/core/modules/upgraders/themetweaks.js",
"text": "/*\\\ntitle: $:/core/modules/upgraders/themetweaks.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that handles the change in theme tweak storage introduced in 5.0.14-beta.\n\nPreviously, theme tweaks were stored in two data tiddlers:\n\n* $:/themes/tiddlywiki/vanilla/metrics\n* $:/themes/tiddlywiki/vanilla/settings\n\nNow, each tweak is stored in its own separate tiddler.\n\nThis upgrader copies any values from the old format to the new. The old data tiddlers are not deleted in case they have been used to store additional indexes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar MAPPINGS = {\n\t\"$:/themes/tiddlywiki/vanilla/metrics\": {\n\t\t\"fontsize\": \"$:/themes/tiddlywiki/vanilla/metrics/fontsize\",\n\t\t\"lineheight\": \"$:/themes/tiddlywiki/vanilla/metrics/lineheight\",\n\t\t\"storyleft\": \"$:/themes/tiddlywiki/vanilla/metrics/storyleft\",\n\t\t\"storytop\": \"$:/themes/tiddlywiki/vanilla/metrics/storytop\",\n\t\t\"storyright\": \"$:/themes/tiddlywiki/vanilla/metrics/storyright\",\n\t\t\"storywidth\": \"$:/themes/tiddlywiki/vanilla/metrics/storywidth\",\n\t\t\"tiddlerwidth\": \"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\"\n\t},\n\t\"$:/themes/tiddlywiki/vanilla/settings\": {\n\t\t\"fontfamily\": \"$:/themes/tiddlywiki/vanilla/settings/fontfamily\"\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {};\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tvar mapping = MAPPINGS[title];\n\t\tif(mapping) {\n\t\t\tvar tiddler = new $tw.Tiddler(tiddlers[title]),\n\t\t\t\ttiddlerData = wiki.getTiddlerDataCached(tiddler,{});\n\t\t\tfor(var index in mapping) {\n\t\t\t\tvar mappedTitle = mapping[index];\n\t\t\t\tif(!tiddlers[mappedTitle] || tiddlers[mappedTitle].title !== mappedTitle) {\n\t\t\t\t\ttiddlers[mappedTitle] = {\n\t\t\t\t\t\ttitle: mappedTitle,\n\t\t\t\t\t\ttext: tiddlerData[index]\n\t\t\t\t\t};\n\t\t\t\t\tmessages[mappedTitle] = $tw.language.getString(\"Import/Upgrader/ThemeTweaks/Created\",{variables: {\n\t\t\t\t\t\tfrom: title + \"##\" + index\n\t\t\t\t\t}});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "upgrader"
},
"$:/core/modules/utils/base64-utf8/base64-utf8.module.js": {
"text": "(function(){// From https://gist.github.com/Nijikokun/5192472\n//\n// UTF8 Module\n//\n// Cleaner and modularized utf-8 encoding and decoding library for javascript.\n//\n// copyright: MIT\n// author: Nijiko Yonskai, @nijikokun, nijikokun@gmail.com\n!function(r,e,o,t){void 0!==o.module&&o.module.exports?o.module.exports=e.apply(o):void 0!==o.define&&\"function\"===o.define&&o.define.amd?define(\"utf8\",[],e):o.utf8=e.apply(o)}(0,function(){return{encode:function(r){if(\"string\"!=typeof r)return r;r=r.replace(/\\r\\n/g,\"\\n\");for(var e,o=\"\",t=0;t<r.length;t++)if((e=r.charCodeAt(t))<128)o+=String.fromCharCode(e);else if(e>127&&e<2048)o+=String.fromCharCode(e>>6|192),o+=String.fromCharCode(63&e|128);else if(e>55295&&e<57344&&r.length>t+1){var i=e,n=r.charCodeAt(t+1);t++;var d=65536+(i-55296<<10|n-56320);o+=String.fromCharCode(d>>18|240),o+=String.fromCharCode(d>>12&63|128),o+=String.fromCharCode(d>>6&63|128),o+=String.fromCharCode(63&d|128)}else o+=String.fromCharCode(e>>12|224),o+=String.fromCharCode(e>>6&63|128),o+=String.fromCharCode(63&e|128);return o},decode:function(r){if(\"string\"!=typeof r)return r;for(var e=\"\",o=0,t=0;o<r.length;)if((t=r.charCodeAt(o))<128)e+=String.fromCharCode(t),o++;else if(t>191&&t<224)e+=String.fromCharCode((31&t)<<6|63&r.charCodeAt(o+1)),o+=2;else if(t>223&&t<240)e+=String.fromCharCode((15&t)<<12|(63&r.charCodeAt(o+1))<<6|63&r.charCodeAt(o+2)),o+=3;else{var i=(7&t)<<18|(63&r.charCodeAt(o+1))<<12|(63&r.charCodeAt(o+2))<<6|63&r.charCodeAt(o+3);e+=String.fromCharCode(55296+(i-65536>>10))+String.fromCharCode(56320+(i-65536&1023)),o+=4}return e}}},this),function(r,e,o,t){if(void 0!==o.module&&o.module.exports){if(t&&o.require)for(var i=0;i<t.length;i++)o[t[i]]=o.require(t[i]);o.module.exports=e.apply(o)}else void 0!==o.define&&\"function\"===o.define&&o.define.amd?define(\"base64\",t||[],e):o.base64=e.apply(o)}(0,function(r){var e=r||this.utf8,o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";return{encode:function(r){if(void 0===e)throw{error:\"MissingMethod\",message:\"UTF8 Module is missing.\"};if(\"string\"!=typeof r)return r;r=e.encode(r);for(var t,i,n,d,f,a,h,C=\"\",c=0;c<r.length;)d=(t=r.charCodeAt(c++))>>2,f=(3&t)<<4|(i=r.charCodeAt(c++))>>4,a=(15&i)<<2|(n=r.charCodeAt(c++))>>6,h=63&n,isNaN(i)?a=h=64:isNaN(n)&&(h=64),C+=o.charAt(d)+o.charAt(f)+o.charAt(a)+o.charAt(h);return C},decode:function(r){if(void 0===e)throw{error:\"MissingMethod\",message:\"UTF8 Module is missing.\"};if(\"string\"!=typeof r)return r;r=r.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");for(var t,i,n,d,f,a,h=\"\",C=0;C<r.length;)t=o.indexOf(r.charAt(C++))<<2|(d=o.indexOf(r.charAt(C++)))>>4,i=(15&d)<<4|(f=o.indexOf(r.charAt(C++)))>>2,n=(3&f)<<6|(a=o.indexOf(r.charAt(C++))),h+=String.fromCharCode(t),64!=f&&(h+=String.fromCharCode(i)),64!=a&&(h+=String.fromCharCode(n));return e.decode(h)}}},this,[\"utf8\"]);}).call(exports);",
"type": "application/javascript",
"title": "$:/core/modules/utils/base64-utf8/base64-utf8.module.js",
"module-type": "library"
},
"$:/core/modules/utils/crypto.js": {
"title": "$:/core/modules/utils/crypto.js",
"text": "/*\\\ntitle: $:/core/modules/utils/crypto.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions related to crypto.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for an encrypted store area in the text of a TiddlyWiki file\n*/\nexports.extractEncryptedStoreArea = function(text) {\n\tvar encryptedStoreAreaStartMarker = \"<pre id=\\\"encryptedStoreArea\\\" type=\\\"text/plain\\\" style=\\\"display:none;\\\">\",\n\t\tencryptedStoreAreaStart = text.indexOf(encryptedStoreAreaStartMarker);\n\tif(encryptedStoreAreaStart !== -1) {\n\t\tvar encryptedStoreAreaEnd = text.indexOf(\"</pre>\",encryptedStoreAreaStart);\n\t\tif(encryptedStoreAreaEnd !== -1) {\n\t\t\treturn $tw.utils.htmlDecode(text.substring(encryptedStoreAreaStart + encryptedStoreAreaStartMarker.length,encryptedStoreAreaEnd-1));\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If the password is not provided then the password in the password store will be used\n*/\nexports.decryptStoreArea = function(encryptedStoreArea,password) {\n\tvar decryptedText = $tw.crypto.decrypt(encryptedStoreArea,password);\n\tif(decryptedText) {\n\t\tvar json = JSON.parse(decryptedText),\n\t\t\ttiddlers = [];\n\t\tfor(var title in json) {\n\t\t\tif(title !== \"$:/isEncrypted\") {\n\t\t\t\ttiddlers.push(json[title]);\n\t\t\t}\n\t\t}\n\t\treturn tiddlers;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If that fails, the user is prompted for a password.\nencryptedStoreArea: text of the TiddlyWiki encrypted store area\ncallback: function(tiddlers) called with the array of decrypted tiddlers\n\nThe following configuration settings are supported:\n\n$tw.config.usePasswordVault: causes any password entered by the user to also be put into the system password vault\n*/\nexports.decryptStoreAreaInteractive = function(encryptedStoreArea,callback,options) {\n\t// Try to decrypt with the current password\n\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea);\n\tif(tiddlers) {\n\t\tcallback(tiddlers);\n\t} else {\n\t\t// Prompt for a new password and keep trying\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: \"Enter a password to decrypt the imported TiddlyWiki\",\n\t\t\tnoUserName: true,\n\t\t\tcanCancel: true,\n\t\t\tsubmitText: \"Decrypt\",\n\t\t\tcallback: function(data) {\n\t\t\t\t// Exit if the user cancelled\n\t\t\t\tif(!data) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// Attempt to decrypt the tiddlers\n\t\t\t\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea,data.password);\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tif($tw.config.usePasswordVault) {\n\t\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t\t}\n\t\t\t\t\tcallback(tiddlers);\n\t\t\t\t\t// Exit and remove the password prompt\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\t// We didn't decrypt everything, so continue to prompt for password\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/csv.js": {
"title": "$:/core/modules/utils/csv.js",
"text": "/*\\\ntitle: $:/core/modules/utils/csv.js\ntype: application/javascript\nmodule-type: utils\n\nA barebones CSV parser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse a CSV string with a header row and return an array of hashmaps.\n*/\nexports.parseCsvStringWithHeader = function(text,options) {\n\toptions = options || {};\n\tvar separator = options.separator || \",\",\n\t\trows = text.split(/\\r?\\n/mg).map(function(row) {\n\t\t\treturn $tw.utils.trim(row);\n\t\t}).filter(function(row) {\n\t\t\treturn row !== \"\";\n\t\t});\n\tif(rows.length < 1) {\n\t\treturn \"Missing header row\";\n\t}\n\tvar headings = rows[0].split(separator),\n\t\tresults = [];\n\tfor(var row=1; row<rows.length; row++) {\n\t\tvar columns = rows[row].split(separator),\n\t\t\tcolumnResult = Object.create(null);\n\t\tif(columns.length !== headings.length) {\n\t\t\treturn \"Malformed CSV row '\" + rows[row] + \"'\";\n\t\t}\n\t\tfor(var column=0; column<columns.length; column++) {\n\t\t\tvar columnName = headings[column];\n\t\t\tcolumnResult[columnName] = $tw.utils.trim(columns[column] || \"\");\n\t\t}\n\t\tresults.push(columnResult);\t\t\t\n\t}\n\treturn results;\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/diff-match-patch/diff_match_patch.js": {
"text": "(function(){function diff_match_patch(){this.Diff_Timeout=1;this.Diff_EditCost=4;this.Match_Threshold=.5;this.Match_Distance=1E3;this.Patch_DeleteThreshold=.5;this.Patch_Margin=4;this.Match_MaxBits=32}var DIFF_DELETE=-1,DIFF_INSERT=1,DIFF_EQUAL=0;\ndiff_match_patch.prototype.diff_main=function(a,b,c,d){\"undefined\"==typeof d&&(d=0>=this.Diff_Timeout?Number.MAX_VALUE:(new Date).getTime()+1E3*this.Diff_Timeout);if(null==a||null==b)throw Error(\"Null input. (diff_main)\");if(a==b)return a?[[DIFF_EQUAL,a]]:[];\"undefined\"==typeof c&&(c=!0);var e=c,f=this.diff_commonPrefix(a,b);c=a.substring(0,f);a=a.substring(f);b=b.substring(f);f=this.diff_commonSuffix(a,b);var g=a.substring(a.length-f);a=a.substring(0,a.length-f);b=b.substring(0,b.length-f);a=this.diff_compute_(a,\nb,e,d);c&&a.unshift([DIFF_EQUAL,c]);g&&a.push([DIFF_EQUAL,g]);this.diff_cleanupMerge(a);return a};\ndiff_match_patch.prototype.diff_compute_=function(a,b,c,d){if(!a)return[[DIFF_INSERT,b]];if(!b)return[[DIFF_DELETE,a]];var e=a.length>b.length?a:b,f=a.length>b.length?b:a,g=e.indexOf(f);return-1!=g?(c=[[DIFF_INSERT,e.substring(0,g)],[DIFF_EQUAL,f],[DIFF_INSERT,e.substring(g+f.length)]],a.length>b.length&&(c[0][0]=c[2][0]=DIFF_DELETE),c):1==f.length?[[DIFF_DELETE,a],[DIFF_INSERT,b]]:(e=this.diff_halfMatch_(a,b))?(b=e[1],f=e[3],a=e[4],e=this.diff_main(e[0],e[2],c,d),c=this.diff_main(b,f,c,d),e.concat([[DIFF_EQUAL,\na]],c)):c&&100<a.length&&100<b.length?this.diff_lineMode_(a,b,d):this.diff_bisect_(a,b,d)};\ndiff_match_patch.prototype.diff_lineMode_=function(a,b,c){var d=this.diff_linesToChars_(a,b);a=d.chars1;b=d.chars2;d=d.lineArray;a=this.diff_main(a,b,!1,c);this.diff_charsToLines_(a,d);this.diff_cleanupSemantic(a);a.push([DIFF_EQUAL,\"\"]);for(var e=d=b=0,f=\"\",g=\"\";b<a.length;){switch(a[b][0]){case DIFF_INSERT:e++;g+=a[b][1];break;case DIFF_DELETE:d++;f+=a[b][1];break;case DIFF_EQUAL:if(1<=d&&1<=e){a.splice(b-d-e,d+e);b=b-d-e;d=this.diff_main(f,g,!1,c);for(e=d.length-1;0<=e;e--)a.splice(b,0,d[e]);b+=\nd.length}d=e=0;g=f=\"\"}b++}a.pop();return a};\ndiff_match_patch.prototype.diff_bisect_=function(a,b,c){for(var d=a.length,e=b.length,f=Math.ceil((d+e)/2),g=2*f,h=Array(g),l=Array(g),k=0;k<g;k++)h[k]=-1,l[k]=-1;h[f+1]=0;l[f+1]=0;k=d-e;for(var m=0!=k%2,p=0,x=0,w=0,q=0,t=0;t<f&&!((new Date).getTime()>c);t++){for(var v=-t+p;v<=t-x;v+=2){var n=f+v;var r=v==-t||v!=t&&h[n-1]<h[n+1]?h[n+1]:h[n-1]+1;for(var y=r-v;r<d&&y<e&&a.charAt(r)==b.charAt(y);)r++,y++;h[n]=r;if(r>d)x+=2;else if(y>e)p+=2;else if(m&&(n=f+k-v,0<=n&&n<g&&-1!=l[n])){var u=d-l[n];if(r>=\nu)return this.diff_bisectSplit_(a,b,r,y,c)}}for(v=-t+w;v<=t-q;v+=2){n=f+v;u=v==-t||v!=t&&l[n-1]<l[n+1]?l[n+1]:l[n-1]+1;for(r=u-v;u<d&&r<e&&a.charAt(d-u-1)==b.charAt(e-r-1);)u++,r++;l[n]=u;if(u>d)q+=2;else if(r>e)w+=2;else if(!m&&(n=f+k-v,0<=n&&n<g&&-1!=h[n]&&(r=h[n],y=f+r-n,u=d-u,r>=u)))return this.diff_bisectSplit_(a,b,r,y,c)}}return[[DIFF_DELETE,a],[DIFF_INSERT,b]]};\ndiff_match_patch.prototype.diff_bisectSplit_=function(a,b,c,d,e){var f=a.substring(0,c),g=b.substring(0,d);a=a.substring(c);b=b.substring(d);f=this.diff_main(f,g,!1,e);e=this.diff_main(a,b,!1,e);return f.concat(e)};\ndiff_match_patch.prototype.diff_linesToChars_=function(a,b){function c(a){for(var b=\"\",c=0,f=-1,g=d.length;f<a.length-1;){f=a.indexOf(\"\\n\",c);-1==f&&(f=a.length-1);var h=a.substring(c,f+1);c=f+1;(e.hasOwnProperty?e.hasOwnProperty(h):void 0!==e[h])?b+=String.fromCharCode(e[h]):(b+=String.fromCharCode(g),e[h]=g,d[g++]=h)}return b}var d=[],e={};d[0]=\"\";var f=c(a),g=c(b);return{chars1:f,chars2:g,lineArray:d}};\ndiff_match_patch.prototype.diff_charsToLines_=function(a,b){for(var c=0;c<a.length;c++){for(var d=a[c][1],e=[],f=0;f<d.length;f++)e[f]=b[d.charCodeAt(f)];a[c][1]=e.join(\"\")}};diff_match_patch.prototype.diff_commonPrefix=function(a,b){if(!a||!b||a.charAt(0)!=b.charAt(0))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(f,e)==b.substring(f,e)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};\ndiff_match_patch.prototype.diff_commonSuffix=function(a,b){if(!a||!b||a.charAt(a.length-1)!=b.charAt(b.length-1))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(a.length-e,a.length-f)==b.substring(b.length-e,b.length-f)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};\ndiff_match_patch.prototype.diff_commonOverlap_=function(a,b){var c=a.length,d=b.length;if(0==c||0==d)return 0;c>d?a=a.substring(c-d):c<d&&(b=b.substring(0,c));c=Math.min(c,d);if(a==b)return c;d=0;for(var e=1;;){var f=a.substring(c-e);f=b.indexOf(f);if(-1==f)return d;e+=f;if(0==f||a.substring(c-e)==b.substring(0,e))d=e,e++}};\ndiff_match_patch.prototype.diff_halfMatch_=function(a,b){function c(a,b,c){for(var d=a.substring(c,c+Math.floor(a.length/4)),e=-1,g=\"\",h,k,l,m;-1!=(e=b.indexOf(d,e+1));){var p=f.diff_commonPrefix(a.substring(c),b.substring(e)),u=f.diff_commonSuffix(a.substring(0,c),b.substring(0,e));g.length<u+p&&(g=b.substring(e-u,e)+b.substring(e,e+p),h=a.substring(0,c-u),k=a.substring(c+p),l=b.substring(0,e-u),m=b.substring(e+p))}return 2*g.length>=a.length?[h,k,l,m,g]:null}if(0>=this.Diff_Timeout)return null;\nvar d=a.length>b.length?a:b,e=a.length>b.length?b:a;if(4>d.length||2*e.length<d.length)return null;var f=this,g=c(d,e,Math.ceil(d.length/4));d=c(d,e,Math.ceil(d.length/2));if(g||d)g=d?g?g[4].length>d[4].length?g:d:d:g;else return null;if(a.length>b.length){d=g[0];e=g[1];var h=g[2];var l=g[3]}else h=g[0],l=g[1],d=g[2],e=g[3];return[d,e,h,l,g[4]]};\ndiff_match_patch.prototype.diff_cleanupSemantic=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=0,h=0,l=0,k=0;f<a.length;)a[f][0]==DIFF_EQUAL?(c[d++]=f,g=l,h=k,k=l=0,e=a[f][1]):(a[f][0]==DIFF_INSERT?l+=a[f][1].length:k+=a[f][1].length,e&&e.length<=Math.max(g,h)&&e.length<=Math.max(l,k)&&(a.splice(c[d-1],0,[DIFF_DELETE,e]),a[c[d-1]+1][0]=DIFF_INSERT,d--,d--,f=0<d?c[d-1]:-1,k=l=h=g=0,e=null,b=!0)),f++;b&&this.diff_cleanupMerge(a);this.diff_cleanupSemanticLossless(a);for(f=1;f<a.length;){if(a[f-1][0]==\nDIFF_DELETE&&a[f][0]==DIFF_INSERT){b=a[f-1][1];c=a[f][1];d=this.diff_commonOverlap_(b,c);e=this.diff_commonOverlap_(c,b);if(d>=e){if(d>=b.length/2||d>=c.length/2)a.splice(f,0,[DIFF_EQUAL,c.substring(0,d)]),a[f-1][1]=b.substring(0,b.length-d),a[f+1][1]=c.substring(d),f++}else if(e>=b.length/2||e>=c.length/2)a.splice(f,0,[DIFF_EQUAL,b.substring(0,e)]),a[f-1][0]=DIFF_INSERT,a[f-1][1]=c.substring(0,c.length-e),a[f+1][0]=DIFF_DELETE,a[f+1][1]=b.substring(e),f++;f++}f++}};\ndiff_match_patch.prototype.diff_cleanupSemanticLossless=function(a){function b(a,b){if(!a||!b)return 6;var c=a.charAt(a.length-1),d=b.charAt(0),e=c.match(diff_match_patch.nonAlphaNumericRegex_),f=d.match(diff_match_patch.nonAlphaNumericRegex_),g=e&&c.match(diff_match_patch.whitespaceRegex_),h=f&&d.match(diff_match_patch.whitespaceRegex_);c=g&&c.match(diff_match_patch.linebreakRegex_);d=h&&d.match(diff_match_patch.linebreakRegex_);var k=c&&a.match(diff_match_patch.blanklineEndRegex_),l=d&&b.match(diff_match_patch.blanklineStartRegex_);\nreturn k||l?5:c||d?4:e&&!g&&h?3:g||h?2:e||f?1:0}for(var c=1;c<a.length-1;){if(a[c-1][0]==DIFF_EQUAL&&a[c+1][0]==DIFF_EQUAL){var d=a[c-1][1],e=a[c][1],f=a[c+1][1],g=this.diff_commonSuffix(d,e);if(g){var h=e.substring(e.length-g);d=d.substring(0,d.length-g);e=h+e.substring(0,e.length-g);f=h+f}g=d;h=e;for(var l=f,k=b(d,e)+b(e,f);e.charAt(0)===f.charAt(0);){d+=e.charAt(0);e=e.substring(1)+f.charAt(0);f=f.substring(1);var m=b(d,e)+b(e,f);m>=k&&(k=m,g=d,h=e,l=f)}a[c-1][1]!=g&&(g?a[c-1][1]=g:(a.splice(c-\n1,1),c--),a[c][1]=h,l?a[c+1][1]=l:(a.splice(c+1,1),c--))}c++}};diff_match_patch.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/;diff_match_patch.whitespaceRegex_=/\\s/;diff_match_patch.linebreakRegex_=/[\\r\\n]/;diff_match_patch.blanklineEndRegex_=/\\n\\r?\\n$/;diff_match_patch.blanklineStartRegex_=/^\\r?\\n\\r?\\n/;\ndiff_match_patch.prototype.diff_cleanupEfficiency=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=!1,h=!1,l=!1,k=!1;f<a.length;)a[f][0]==DIFF_EQUAL?(a[f][1].length<this.Diff_EditCost&&(l||k)?(c[d++]=f,g=l,h=k,e=a[f][1]):(d=0,e=null),l=k=!1):(a[f][0]==DIFF_DELETE?k=!0:l=!0,e&&(g&&h&&l&&k||e.length<this.Diff_EditCost/2&&3==g+h+l+k)&&(a.splice(c[d-1],0,[DIFF_DELETE,e]),a[c[d-1]+1][0]=DIFF_INSERT,d--,e=null,g&&h?(l=k=!0,d=0):(d--,f=0<d?c[d-1]:-1,l=k=!1),b=!0)),f++;b&&this.diff_cleanupMerge(a)};\ndiff_match_patch.prototype.diff_cleanupMerge=function(a){a.push([DIFF_EQUAL,\"\"]);for(var b=0,c=0,d=0,e=\"\",f=\"\",g;b<a.length;)switch(a[b][0]){case DIFF_INSERT:d++;f+=a[b][1];b++;break;case DIFF_DELETE:c++;e+=a[b][1];b++;break;case DIFF_EQUAL:1<c+d?(0!==c&&0!==d&&(g=this.diff_commonPrefix(f,e),0!==g&&(0<b-c-d&&a[b-c-d-1][0]==DIFF_EQUAL?a[b-c-d-1][1]+=f.substring(0,g):(a.splice(0,0,[DIFF_EQUAL,f.substring(0,g)]),b++),f=f.substring(g),e=e.substring(g)),g=this.diff_commonSuffix(f,e),0!==g&&(a[b][1]=f.substring(f.length-\ng)+a[b][1],f=f.substring(0,f.length-g),e=e.substring(0,e.length-g))),0===c?a.splice(b-d,c+d,[DIFF_INSERT,f]):0===d?a.splice(b-c,c+d,[DIFF_DELETE,e]):a.splice(b-c-d,c+d,[DIFF_DELETE,e],[DIFF_INSERT,f]),b=b-c-d+(c?1:0)+(d?1:0)+1):0!==b&&a[b-1][0]==DIFF_EQUAL?(a[b-1][1]+=a[b][1],a.splice(b,1)):b++,c=d=0,f=e=\"\"}\"\"===a[a.length-1][1]&&a.pop();c=!1;for(b=1;b<a.length-1;)a[b-1][0]==DIFF_EQUAL&&a[b+1][0]==DIFF_EQUAL&&(a[b][1].substring(a[b][1].length-a[b-1][1].length)==a[b-1][1]?(a[b][1]=a[b-1][1]+a[b][1].substring(0,\na[b][1].length-a[b-1][1].length),a[b+1][1]=a[b-1][1]+a[b+1][1],a.splice(b-1,1),c=!0):a[b][1].substring(0,a[b+1][1].length)==a[b+1][1]&&(a[b-1][1]+=a[b+1][1],a[b][1]=a[b][1].substring(a[b+1][1].length)+a[b+1][1],a.splice(b+1,1),c=!0)),b++;c&&this.diff_cleanupMerge(a)};\ndiff_match_patch.prototype.diff_xIndex=function(a,b){var c=0,d=0,e=0,f=0,g;for(g=0;g<a.length;g++){a[g][0]!==DIFF_INSERT&&(c+=a[g][1].length);a[g][0]!==DIFF_DELETE&&(d+=a[g][1].length);if(c>b)break;e=c;f=d}return a.length!=g&&a[g][0]===DIFF_DELETE?f:f+(b-e)};\ndiff_match_patch.prototype.diff_prettyHtml=function(a){for(var b=[],c=/&/g,d=/</g,e=/>/g,f=/\\n/g,g=0;g<a.length;g++){var h=a[g][0],l=a[g][1].replace(c,\"&\").replace(d,\"<\").replace(e,\">\").replace(f,\"¶<br>\");switch(h){case DIFF_INSERT:b[g]='<ins style=\"background:#e6ffe6;\">'+l+\"</ins>\";break;case DIFF_DELETE:b[g]='<del style=\"background:#ffe6e6;\">'+l+\"</del>\";break;case DIFF_EQUAL:b[g]=\"<span>\"+l+\"</span>\"}}return b.join(\"\")};\ndiff_match_patch.prototype.diff_text1=function(a){for(var b=[],c=0;c<a.length;c++)a[c][0]!==DIFF_INSERT&&(b[c]=a[c][1]);return b.join(\"\")};diff_match_patch.prototype.diff_text2=function(a){for(var b=[],c=0;c<a.length;c++)a[c][0]!==DIFF_DELETE&&(b[c]=a[c][1]);return b.join(\"\")};\ndiff_match_patch.prototype.diff_levenshtein=function(a){for(var b=0,c=0,d=0,e=0;e<a.length;e++){var f=a[e][1];switch(a[e][0]){case DIFF_INSERT:c+=f.length;break;case DIFF_DELETE:d+=f.length;break;case DIFF_EQUAL:b+=Math.max(c,d),d=c=0}}return b+=Math.max(c,d)};\ndiff_match_patch.prototype.diff_toDelta=function(a){for(var b=[],c=0;c<a.length;c++)switch(a[c][0]){case DIFF_INSERT:b[c]=\"+\"+encodeURI(a[c][1]);break;case DIFF_DELETE:b[c]=\"-\"+a[c][1].length;break;case DIFF_EQUAL:b[c]=\"=\"+a[c][1].length}return b.join(\"\\t\").replace(/%20/g,\" \")};\ndiff_match_patch.prototype.diff_fromDelta=function(a,b){for(var c=[],d=0,e=0,f=b.split(/\\t/g),g=0;g<f.length;g++){var h=f[g].substring(1);switch(f[g].charAt(0)){case \"+\":try{c[d++]=[DIFF_INSERT,decodeURI(h)]}catch(k){throw Error(\"Illegal escape in diff_fromDelta: \"+h);}break;case \"-\":case \"=\":var l=parseInt(h,10);if(isNaN(l)||0>l)throw Error(\"Invalid number in diff_fromDelta: \"+h);h=a.substring(e,e+=l);\"=\"==f[g].charAt(0)?c[d++]=[DIFF_EQUAL,h]:c[d++]=[DIFF_DELETE,h];break;default:if(f[g])throw Error(\"Invalid diff operation in diff_fromDelta: \"+\nf[g]);}}if(e!=a.length)throw Error(\"Delta length (\"+e+\") does not equal source text length (\"+a.length+\").\");return c};diff_match_patch.prototype.match_main=function(a,b,c){if(null==a||null==b||null==c)throw Error(\"Null input. (match_main)\");c=Math.max(0,Math.min(c,a.length));return a==b?0:a.length?a.substring(c,c+b.length)==b?c:this.match_bitap_(a,b,c):-1};\ndiff_match_patch.prototype.match_bitap_=function(a,b,c){function d(a,d){var e=a/b.length,g=Math.abs(c-d);return f.Match_Distance?e+g/f.Match_Distance:g?1:e}if(b.length>this.Match_MaxBits)throw Error(\"Pattern too long for this browser.\");var e=this.match_alphabet_(b),f=this,g=this.Match_Threshold,h=a.indexOf(b,c);-1!=h&&(g=Math.min(d(0,h),g),h=a.lastIndexOf(b,c+b.length),-1!=h&&(g=Math.min(d(0,h),g)));var l=1<<b.length-1;h=-1;for(var k,m,p=b.length+a.length,x,w=0;w<b.length;w++){k=0;for(m=p;k<m;)d(w,\nc+m)<=g?k=m:p=m,m=Math.floor((p-k)/2+k);p=m;k=Math.max(1,c-m+1);var q=Math.min(c+m,a.length)+b.length;m=Array(q+2);for(m[q+1]=(1<<w)-1;q>=k;q--){var t=e[a.charAt(q-1)];m[q]=0===w?(m[q+1]<<1|1)&t:(m[q+1]<<1|1)&t|(x[q+1]|x[q])<<1|1|x[q+1];if(m[q]&l&&(t=d(w,q-1),t<=g))if(g=t,h=q-1,h>c)k=Math.max(1,2*c-h);else break}if(d(w+1,c)>g)break;x=m}return h};\ndiff_match_patch.prototype.match_alphabet_=function(a){for(var b={},c=0;c<a.length;c++)b[a.charAt(c)]=0;for(c=0;c<a.length;c++)b[a.charAt(c)]|=1<<a.length-c-1;return b};\ndiff_match_patch.prototype.patch_addContext_=function(a,b){if(0!=b.length){for(var c=b.substring(a.start2,a.start2+a.length1),d=0;b.indexOf(c)!=b.lastIndexOf(c)&&c.length<this.Match_MaxBits-this.Patch_Margin-this.Patch_Margin;)d+=this.Patch_Margin,c=b.substring(a.start2-d,a.start2+a.length1+d);d+=this.Patch_Margin;(c=b.substring(a.start2-d,a.start2))&&a.diffs.unshift([DIFF_EQUAL,c]);(d=b.substring(a.start2+a.length1,a.start2+a.length1+d))&&a.diffs.push([DIFF_EQUAL,d]);a.start1-=c.length;a.start2-=\nc.length;a.length1+=c.length+d.length;a.length2+=c.length+d.length}};\ndiff_match_patch.prototype.patch_make=function(a,b,c){if(\"string\"==typeof a&&\"string\"==typeof b&&\"undefined\"==typeof c){var d=a;b=this.diff_main(d,b,!0);2<b.length&&(this.diff_cleanupSemantic(b),this.diff_cleanupEfficiency(b))}else if(a&&\"object\"==typeof a&&\"undefined\"==typeof b&&\"undefined\"==typeof c)b=a,d=this.diff_text1(b);else if(\"string\"==typeof a&&b&&\"object\"==typeof b&&\"undefined\"==typeof c)d=a;else if(\"string\"==typeof a&&\"string\"==typeof b&&c&&\"object\"==typeof c)d=a,b=c;else throw Error(\"Unknown call format to patch_make.\");\nif(0===b.length)return[];c=[];a=new diff_match_patch.patch_obj;for(var e=0,f=0,g=0,h=d,l=0;l<b.length;l++){var k=b[l][0],m=b[l][1];e||k===DIFF_EQUAL||(a.start1=f,a.start2=g);switch(k){case DIFF_INSERT:a.diffs[e++]=b[l];a.length2+=m.length;d=d.substring(0,g)+m+d.substring(g);break;case DIFF_DELETE:a.length1+=m.length;a.diffs[e++]=b[l];d=d.substring(0,g)+d.substring(g+m.length);break;case DIFF_EQUAL:m.length<=2*this.Patch_Margin&&e&&b.length!=l+1?(a.diffs[e++]=b[l],a.length1+=m.length,a.length2+=m.length):\nm.length>=2*this.Patch_Margin&&e&&(this.patch_addContext_(a,h),c.push(a),a=new diff_match_patch.patch_obj,e=0,h=d,f=g)}k!==DIFF_INSERT&&(f+=m.length);k!==DIFF_DELETE&&(g+=m.length)}e&&(this.patch_addContext_(a,h),c.push(a));return c};\ndiff_match_patch.prototype.patch_deepCopy=function(a){for(var b=[],c=0;c<a.length;c++){var d=a[c],e=new diff_match_patch.patch_obj;e.diffs=[];for(var f=0;f<d.diffs.length;f++)e.diffs[f]=d.diffs[f].slice();e.start1=d.start1;e.start2=d.start2;e.length1=d.length1;e.length2=d.length2;b[c]=e}return b};\ndiff_match_patch.prototype.patch_apply=function(a,b){if(0==a.length)return[b,[]];a=this.patch_deepCopy(a);var c=this.patch_addPadding(a);b=c+b+c;this.patch_splitMax(a);for(var d=0,e=[],f=0;f<a.length;f++){var g=a[f].start2+d,h=this.diff_text1(a[f].diffs),l=-1;if(h.length>this.Match_MaxBits){var k=this.match_main(b,h.substring(0,this.Match_MaxBits),g);-1!=k&&(l=this.match_main(b,h.substring(h.length-this.Match_MaxBits),g+h.length-this.Match_MaxBits),-1==l||k>=l)&&(k=-1)}else k=this.match_main(b,h,\ng);if(-1==k)e[f]=!1,d-=a[f].length2-a[f].length1;else if(e[f]=!0,d=k-g,g=-1==l?b.substring(k,k+h.length):b.substring(k,l+this.Match_MaxBits),h==g)b=b.substring(0,k)+this.diff_text2(a[f].diffs)+b.substring(k+h.length);else if(g=this.diff_main(h,g,!1),h.length>this.Match_MaxBits&&this.diff_levenshtein(g)/h.length>this.Patch_DeleteThreshold)e[f]=!1;else{this.diff_cleanupSemanticLossless(g);h=0;var m;for(l=0;l<a[f].diffs.length;l++){var p=a[f].diffs[l];p[0]!==DIFF_EQUAL&&(m=this.diff_xIndex(g,h));p[0]===\nDIFF_INSERT?b=b.substring(0,k+m)+p[1]+b.substring(k+m):p[0]===DIFF_DELETE&&(b=b.substring(0,k+m)+b.substring(k+this.diff_xIndex(g,h+p[1].length)));p[0]!==DIFF_DELETE&&(h+=p[1].length)}}}b=b.substring(c.length,b.length-c.length);return[b,e]};\ndiff_match_patch.prototype.patch_addPadding=function(a){for(var b=this.Patch_Margin,c=\"\",d=1;d<=b;d++)c+=String.fromCharCode(d);for(d=0;d<a.length;d++)a[d].start1+=b,a[d].start2+=b;d=a[0];var e=d.diffs;if(0==e.length||e[0][0]!=DIFF_EQUAL)e.unshift([DIFF_EQUAL,c]),d.start1-=b,d.start2-=b,d.length1+=b,d.length2+=b;else if(b>e[0][1].length){var f=b-e[0][1].length;e[0][1]=c.substring(e[0][1].length)+e[0][1];d.start1-=f;d.start2-=f;d.length1+=f;d.length2+=f}d=a[a.length-1];e=d.diffs;0==e.length||e[e.length-\n1][0]!=DIFF_EQUAL?(e.push([DIFF_EQUAL,c]),d.length1+=b,d.length2+=b):b>e[e.length-1][1].length&&(f=b-e[e.length-1][1].length,e[e.length-1][1]+=c.substring(0,f),d.length1+=f,d.length2+=f);return c};\ndiff_match_patch.prototype.patch_splitMax=function(a){for(var b=this.Match_MaxBits,c=0;c<a.length;c++)if(!(a[c].length1<=b)){var d=a[c];a.splice(c--,1);for(var e=d.start1,f=d.start2,g=\"\";0!==d.diffs.length;){var h=new diff_match_patch.patch_obj,l=!0;h.start1=e-g.length;h.start2=f-g.length;\"\"!==g&&(h.length1=h.length2=g.length,h.diffs.push([DIFF_EQUAL,g]));for(;0!==d.diffs.length&&h.length1<b-this.Patch_Margin;){g=d.diffs[0][0];var k=d.diffs[0][1];g===DIFF_INSERT?(h.length2+=k.length,f+=k.length,h.diffs.push(d.diffs.shift()),\nl=!1):g===DIFF_DELETE&&1==h.diffs.length&&h.diffs[0][0]==DIFF_EQUAL&&k.length>2*b?(h.length1+=k.length,e+=k.length,l=!1,h.diffs.push([g,k]),d.diffs.shift()):(k=k.substring(0,b-h.length1-this.Patch_Margin),h.length1+=k.length,e+=k.length,g===DIFF_EQUAL?(h.length2+=k.length,f+=k.length):l=!1,h.diffs.push([g,k]),k==d.diffs[0][1]?d.diffs.shift():d.diffs[0][1]=d.diffs[0][1].substring(k.length))}g=this.diff_text2(h.diffs);g=g.substring(g.length-this.Patch_Margin);k=this.diff_text1(d.diffs).substring(0,\nthis.Patch_Margin);\"\"!==k&&(h.length1+=k.length,h.length2+=k.length,0!==h.diffs.length&&h.diffs[h.diffs.length-1][0]===DIFF_EQUAL?h.diffs[h.diffs.length-1][1]+=k:h.diffs.push([DIFF_EQUAL,k]));l||a.splice(++c,0,h)}}};diff_match_patch.prototype.patch_toText=function(a){for(var b=[],c=0;c<a.length;c++)b[c]=a[c];return b.join(\"\")};\ndiff_match_patch.prototype.patch_fromText=function(a){var b=[];if(!a)return b;a=a.split(\"\\n\");for(var c=0,d=/^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$/;c<a.length;){var e=a[c].match(d);if(!e)throw Error(\"Invalid patch string: \"+a[c]);var f=new diff_match_patch.patch_obj;b.push(f);f.start1=parseInt(e[1],10);\"\"===e[2]?(f.start1--,f.length1=1):\"0\"==e[2]?f.length1=0:(f.start1--,f.length1=parseInt(e[2],10));f.start2=parseInt(e[3],10);\"\"===e[4]?(f.start2--,f.length2=1):\"0\"==e[4]?f.length2=0:(f.start2--,f.length2=\nparseInt(e[4],10));for(c++;c<a.length;){e=a[c].charAt(0);try{var g=decodeURI(a[c].substring(1))}catch(h){throw Error(\"Illegal escape in patch_fromText: \"+g);}if(\"-\"==e)f.diffs.push([DIFF_DELETE,g]);else if(\"+\"==e)f.diffs.push([DIFF_INSERT,g]);else if(\" \"==e)f.diffs.push([DIFF_EQUAL,g]);else if(\"@\"==e)break;else if(\"\"!==e)throw Error('Invalid patch mode \"'+e+'\" in: '+g);c++}}return b};diff_match_patch.patch_obj=function(){this.diffs=[];this.start2=this.start1=null;this.length2=this.length1=0};\ndiff_match_patch.patch_obj.prototype.toString=function(){for(var a=[\"@@ -\"+(0===this.length1?this.start1+\",0\":1==this.length1?this.start1+1:this.start1+1+\",\"+this.length1)+\" +\"+(0===this.length2?this.start2+\",0\":1==this.length2?this.start2+1:this.start2+1+\",\"+this.length2)+\" @@\\n\"],b,c=0;c<this.diffs.length;c++){switch(this.diffs[c][0]){case DIFF_INSERT:b=\"+\";break;case DIFF_DELETE:b=\"-\";break;case DIFF_EQUAL:b=\" \"}a[c+1]=b+encodeURI(this.diffs[c][1])+\"\\n\"}return a.join(\"\").replace(/%20/g,\" \")};\nthis.diff_match_patch=diff_match_patch;this.DIFF_DELETE=DIFF_DELETE;this.DIFF_INSERT=DIFF_INSERT;this.DIFF_EQUAL=DIFF_EQUAL;\n}).call(exports);",
"type": "application/javascript",
"title": "$:/core/modules/utils/diff-match-patch/diff_match_patch.js",
"module-type": "library"
},
"$:/core/modules/utils/dom/animations/slide.js": {
"title": "$:/core/modules/utils/dom/animations/slide.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/animations/slide.js\ntype: application/javascript\nmodule-type: animation\n\nA simple slide animation that varies the height of the element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction slideOpen(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration();\n\t// Get the current height of the domNode\n\tvar computedStyle = window.getComputedStyle(domNode),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrPaddingBottom = parseInt(computedStyle.paddingBottom,10),\n\t\tcurrPaddingTop = parseInt(computedStyle.paddingTop,10),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Reset the margin once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"none\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{marginTop: currMarginTop + \"px\"},\n\t\t{paddingBottom: currPaddingBottom + \"px\"},\n\t\t{paddingTop: currPaddingTop + \"px\"},\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n}\n\nfunction slideClosed(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration(),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Clear the properties we've set when the animation is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n}\n\nexports.slide = {\n\topen: slideOpen,\n\tclose: slideClosed\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "animation"
},
"$:/core/modules/utils/dom/animator.js": {
"title": "$:/core/modules/utils/dom/animator.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/animator.js\ntype: application/javascript\nmodule-type: utils\n\nOrchestrates animations and transitions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Animator() {\n\t// Get the registered animation modules\n\tthis.animations = {};\n\t$tw.modules.applyMethods(\"animation\",this.animations);\n}\n\nAnimator.prototype.perform = function(type,domNode,options) {\n\toptions = options || {};\n\t// Find an animation that can handle this type\n\tvar chosenAnimation;\n\t$tw.utils.each(this.animations,function(animation,name) {\n\t\tif($tw.utils.hop(animation,type)) {\n\t\t\tchosenAnimation = animation[type];\n\t\t}\n\t});\n\tif(!chosenAnimation) {\n\t\tchosenAnimation = function(domNode,options) {\n\t\t\tif(options.callback) {\n\t\t\t\toptions.callback();\n\t\t\t}\n\t\t};\n\t}\n\t// Call the animation\n\tchosenAnimation(domNode,options);\n};\n\nexports.Animator = Animator;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/browser.js": {
"title": "$:/core/modules/utils/dom/browser.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/browser.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser feature detection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet style properties of an element\n\telement: dom node\n\tstyles: ordered array of {name: value} pairs\n*/\nexports.setStyle = function(element,styles) {\n\tif(element.nodeType === 1) { // Element.ELEMENT_NODE\n\t\tfor(var t=0; t<styles.length; t++) {\n\t\t\tfor(var styleName in styles[t]) {\n\t\t\t\telement.style[$tw.utils.convertStyleNameToPropertyName(styleName)] = styles[t][styleName];\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nConverts a standard CSS property name into the local browser-specific equivalent. For example:\n\t\"background-color\" --> \"backgroundColor\"\n\t\"transition\" --> \"webkitTransition\"\n*/\n\nvar styleNameCache = {}; // We'll cache the style name conversions\n\nexports.convertStyleNameToPropertyName = function(styleName) {\n\t// Return from the cache if we can\n\tif(styleNameCache[styleName]) {\n\t\treturn styleNameCache[styleName];\n\t}\n\t// Convert it by first removing any hyphens\n\tvar propertyName = $tw.utils.unHyphenateCss(styleName);\n\t// Then check if it needs a prefix\n\tif($tw.browser && document.body.style[propertyName] === undefined) {\n\t\tvar prefixes = [\"O\",\"MS\",\"Moz\",\"webkit\"];\n\t\tfor(var t=0; t<prefixes.length; t++) {\n\t\t\tvar prefixedName = prefixes[t] + propertyName.substr(0,1).toUpperCase() + propertyName.substr(1);\n\t\t\tif(document.body.style[prefixedName] !== undefined) {\n\t\t\t\tpropertyName = prefixedName;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t// Put it in the cache too\n\tstyleNameCache[styleName] = propertyName;\n\treturn propertyName;\n};\n\n/*\nConverts a JS format CSS property name back into the dashed form used in CSS declarations. For example:\n\t\"backgroundColor\" --> \"background-color\"\n\t\"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.convertPropertyNameToStyleName = function(propertyName) {\n\t// Rehyphenate the name\n\tvar styleName = $tw.utils.hyphenateCss(propertyName);\n\t// If there's a webkit prefix, add a dash (other browsers have uppercase prefixes, and so get the dash automatically)\n\tif(styleName.indexOf(\"webkit\") === 0) {\n\t\tstyleName = \"-\" + styleName;\n\t} else if(styleName.indexOf(\"-m-s\") === 0) {\n\t\tstyleName = \"-ms\" + styleName.substr(4);\n\t}\n\treturn styleName;\n};\n\n/*\nRound trip a stylename to a property name and back again. For example:\n\t\"transform\" --> \"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.roundTripPropertyName = function(propertyName) {\n\treturn $tw.utils.convertPropertyNameToStyleName($tw.utils.convertStyleNameToPropertyName(propertyName));\n};\n\n/*\nConverts a standard event name into the local browser specific equivalent. For example:\n\t\"animationEnd\" --> \"webkitAnimationEnd\"\n*/\n\nvar eventNameCache = {}; // We'll cache the conversions\n\nvar eventNameMappings = {\n\t\"transitionEnd\": {\n\t\tcorrespondingCssProperty: \"transition\",\n\t\tmappings: {\n\t\t\ttransition: \"transitionend\",\n\t\t\tOTransition: \"oTransitionEnd\",\n\t\t\tMSTransition: \"msTransitionEnd\",\n\t\t\tMozTransition: \"transitionend\",\n\t\t\twebkitTransition: \"webkitTransitionEnd\"\n\t\t}\n\t},\n\t\"animationEnd\": {\n\t\tcorrespondingCssProperty: \"animation\",\n\t\tmappings: {\n\t\t\tanimation: \"animationend\",\n\t\t\tOAnimation: \"oAnimationEnd\",\n\t\t\tMSAnimation: \"msAnimationEnd\",\n\t\t\tMozAnimation: \"animationend\",\n\t\t\twebkitAnimation: \"webkitAnimationEnd\"\n\t\t}\n\t}\n};\n\nexports.convertEventName = function(eventName) {\n\tif(eventNameCache[eventName]) {\n\t\treturn eventNameCache[eventName];\n\t}\n\tvar newEventName = eventName,\n\t\tmappings = eventNameMappings[eventName];\n\tif(mappings) {\n\t\tvar convertedProperty = $tw.utils.convertStyleNameToPropertyName(mappings.correspondingCssProperty);\n\t\tif(mappings.mappings[convertedProperty]) {\n\t\t\tnewEventName = mappings.mappings[convertedProperty];\n\t\t}\n\t}\n\t// Put it in the cache too\n\teventNameCache[eventName] = newEventName;\n\treturn newEventName;\n};\n\n/*\nReturn the names of the fullscreen APIs\n*/\nexports.getFullScreenApis = function() {\n\tvar d = document,\n\t\tdb = d.body,\n\t\tresult = {\n\t\t\"_requestFullscreen\": db.webkitRequestFullscreen !== undefined ? \"webkitRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.mozRequestFullScreen !== undefined ? \"mozRequestFullScreen\" :\n\t\t\t\t\t\t\tdb.msRequestFullscreen !== undefined ? \"msRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.requestFullscreen !== undefined ? \"requestFullscreen\" : \"\",\n\t\t\"_exitFullscreen\": d.webkitExitFullscreen !== undefined ? \"webkitExitFullscreen\" :\n\t\t\t\t\t\t\td.mozCancelFullScreen !== undefined ? \"mozCancelFullScreen\" :\n\t\t\t\t\t\t\td.msExitFullscreen !== undefined ? \"msExitFullscreen\" :\n\t\t\t\t\t\t\td.exitFullscreen !== undefined ? \"exitFullscreen\" : \"\",\n\t\t\"_fullscreenElement\": d.webkitFullscreenElement !== undefined ? \"webkitFullscreenElement\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozFullScreenElement\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"msFullscreenElement\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenElement\" : \"\",\n\t\t\"_fullscreenChange\": d.webkitFullscreenElement !== undefined ? \"webkitfullscreenchange\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozfullscreenchange\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"MSFullscreenChange\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenchange\" : \"\"\n\t};\n\tif(!result._requestFullscreen || !result._exitFullscreen || !result._fullscreenElement || !result._fullscreenChange) {\n\t\treturn null;\n\t} else {\n\t\treturn result;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/csscolorparser.js": {
"title": "$:/core/modules/utils/dom/csscolorparser.js",
"text": "// (c) Dean McNamee <dean@gmail.com>, 2012.\n//\n// https://github.com/deanm/css-color-parser-js\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n\n// http://www.w3.org/TR/css3-color/\nvar kCSSColorTable = {\n \"transparent\": [0,0,0,0], \"aliceblue\": [240,248,255,1],\n \"antiquewhite\": [250,235,215,1], \"aqua\": [0,255,255,1],\n \"aquamarine\": [127,255,212,1], \"azure\": [240,255,255,1],\n \"beige\": [245,245,220,1], \"bisque\": [255,228,196,1],\n \"black\": [0,0,0,1], \"blanchedalmond\": [255,235,205,1],\n \"blue\": [0,0,255,1], \"blueviolet\": [138,43,226,1],\n \"brown\": [165,42,42,1], \"burlywood\": [222,184,135,1],\n \"cadetblue\": [95,158,160,1], \"chartreuse\": [127,255,0,1],\n \"chocolate\": [210,105,30,1], \"coral\": [255,127,80,1],\n \"cornflowerblue\": [100,149,237,1], \"cornsilk\": [255,248,220,1],\n \"crimson\": [220,20,60,1], \"cyan\": [0,255,255,1],\n \"darkblue\": [0,0,139,1], \"darkcyan\": [0,139,139,1],\n \"darkgoldenrod\": [184,134,11,1], \"darkgray\": [169,169,169,1],\n \"darkgreen\": [0,100,0,1], \"darkgrey\": [169,169,169,1],\n \"darkkhaki\": [189,183,107,1], \"darkmagenta\": [139,0,139,1],\n \"darkolivegreen\": [85,107,47,1], \"darkorange\": [255,140,0,1],\n \"darkorchid\": [153,50,204,1], \"darkred\": [139,0,0,1],\n \"darksalmon\": [233,150,122,1], \"darkseagreen\": [143,188,143,1],\n \"darkslateblue\": [72,61,139,1], \"darkslategray\": [47,79,79,1],\n \"darkslategrey\": [47,79,79,1], \"darkturquoise\": [0,206,209,1],\n \"darkviolet\": [148,0,211,1], \"deeppink\": [255,20,147,1],\n \"deepskyblue\": [0,191,255,1], \"dimgray\": [105,105,105,1],\n \"dimgrey\": [105,105,105,1], \"dodgerblue\": [30,144,255,1],\n \"firebrick\": [178,34,34,1], \"floralwhite\": [255,250,240,1],\n \"forestgreen\": [34,139,34,1], \"fuchsia\": [255,0,255,1],\n \"gainsboro\": [220,220,220,1], \"ghostwhite\": [248,248,255,1],\n \"gold\": [255,215,0,1], \"goldenrod\": [218,165,32,1],\n \"gray\": [128,128,128,1], \"green\": [0,128,0,1],\n \"greenyellow\": [173,255,47,1], \"grey\": [128,128,128,1],\n \"honeydew\": [240,255,240,1], \"hotpink\": [255,105,180,1],\n \"indianred\": [205,92,92,1], \"indigo\": [75,0,130,1],\n \"ivory\": [255,255,240,1], \"khaki\": [240,230,140,1],\n \"lavender\": [230,230,250,1], \"lavenderblush\": [255,240,245,1],\n \"lawngreen\": [124,252,0,1], \"lemonchiffon\": [255,250,205,1],\n \"lightblue\": [173,216,230,1], \"lightcoral\": [240,128,128,1],\n \"lightcyan\": [224,255,255,1], \"lightgoldenrodyellow\": [250,250,210,1],\n \"lightgray\": [211,211,211,1], \"lightgreen\": [144,238,144,1],\n \"lightgrey\": [211,211,211,1], \"lightpink\": [255,182,193,1],\n \"lightsalmon\": [255,160,122,1], \"lightseagreen\": [32,178,170,1],\n \"lightskyblue\": [135,206,250,1], \"lightslategray\": [119,136,153,1],\n \"lightslategrey\": [119,136,153,1], \"lightsteelblue\": [176,196,222,1],\n \"lightyellow\": [255,255,224,1], \"lime\": [0,255,0,1],\n \"limegreen\": [50,205,50,1], \"linen\": [250,240,230,1],\n \"magenta\": [255,0,255,1], \"maroon\": [128,0,0,1],\n \"mediumaquamarine\": [102,205,170,1], \"mediumblue\": [0,0,205,1],\n \"mediumorchid\": [186,85,211,1], \"mediumpurple\": [147,112,219,1],\n \"mediumseagreen\": [60,179,113,1], \"mediumslateblue\": [123,104,238,1],\n \"mediumspringgreen\": [0,250,154,1], \"mediumturquoise\": [72,209,204,1],\n \"mediumvioletred\": [199,21,133,1], \"midnightblue\": [25,25,112,1],\n \"mintcream\": [245,255,250,1], \"mistyrose\": [255,228,225,1],\n \"moccasin\": [255,228,181,1], \"navajowhite\": [255,222,173,1],\n \"navy\": [0,0,128,1], \"oldlace\": [253,245,230,1],\n \"olive\": [128,128,0,1], \"olivedrab\": [107,142,35,1],\n \"orange\": [255,165,0,1], \"orangered\": [255,69,0,1],\n \"orchid\": [218,112,214,1], \"palegoldenrod\": [238,232,170,1],\n \"palegreen\": [152,251,152,1], \"paleturquoise\": [175,238,238,1],\n \"palevioletred\": [219,112,147,1], \"papayawhip\": [255,239,213,1],\n \"peachpuff\": [255,218,185,1], \"peru\": [205,133,63,1],\n \"pink\": [255,192,203,1], \"plum\": [221,160,221,1],\n \"powderblue\": [176,224,230,1], \"purple\": [128,0,128,1],\n \"red\": [255,0,0,1], \"rosybrown\": [188,143,143,1],\n \"royalblue\": [65,105,225,1], \"saddlebrown\": [139,69,19,1],\n \"salmon\": [250,128,114,1], \"sandybrown\": [244,164,96,1],\n \"seagreen\": [46,139,87,1], \"seashell\": [255,245,238,1],\n \"sienna\": [160,82,45,1], \"silver\": [192,192,192,1],\n \"skyblue\": [135,206,235,1], \"slateblue\": [106,90,205,1],\n \"slategray\": [112,128,144,1], \"slategrey\": [112,128,144,1],\n \"snow\": [255,250,250,1], \"springgreen\": [0,255,127,1],\n \"steelblue\": [70,130,180,1], \"tan\": [210,180,140,1],\n \"teal\": [0,128,128,1], \"thistle\": [216,191,216,1],\n \"tomato\": [255,99,71,1], \"turquoise\": [64,224,208,1],\n \"violet\": [238,130,238,1], \"wheat\": [245,222,179,1],\n \"white\": [255,255,255,1], \"whitesmoke\": [245,245,245,1],\n \"yellow\": [255,255,0,1], \"yellowgreen\": [154,205,50,1]}\n\nfunction clamp_css_byte(i) { // Clamp to integer 0 .. 255.\n i = Math.round(i); // Seems to be what Chrome does (vs truncation).\n return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clamp_css_float(f) { // Clamp to float 0.0 .. 1.0.\n return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parse_css_int(str) { // int or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_byte(parseFloat(str) / 100 * 255);\n return clamp_css_byte(parseInt(str));\n}\n\nfunction parse_css_float(str) { // float or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_float(parseFloat(str) / 100);\n return clamp_css_float(parseFloat(str));\n}\n\nfunction css_hue_to_rgb(m1, m2, h) {\n if (h < 0) h += 1;\n else if (h > 1) h -= 1;\n\n if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;\n if (h * 2 < 1) return m2;\n if (h * 3 < 2) return m1 + (m2 - m1) * (2/3 - h) * 6;\n return m1;\n}\n\nfunction parseCSSColor(css_str) {\n // Remove all whitespace, not compliant, but should just be more accepting.\n var str = css_str.replace(/ /g, '').toLowerCase();\n\n // Color keywords (and transparent) lookup.\n if (str in kCSSColorTable) return kCSSColorTable[str].slice(); // dup.\n\n // #abc and #abc123 syntax.\n if (str[0] === '#') {\n if (str.length === 4) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xfff)) return null; // Covers NaN.\n return [((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n (iv & 0xf0) | ((iv & 0xf0) >> 4),\n (iv & 0xf) | ((iv & 0xf) << 4),\n 1];\n } else if (str.length === 7) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xffffff)) return null; // Covers NaN.\n return [(iv & 0xff0000) >> 16,\n (iv & 0xff00) >> 8,\n iv & 0xff,\n 1];\n }\n\n return null;\n }\n\n var op = str.indexOf('('), ep = str.indexOf(')');\n if (op !== -1 && ep + 1 === str.length) {\n var fname = str.substr(0, op);\n var params = str.substr(op+1, ep-(op+1)).split(',');\n var alpha = 1; // To allow case fallthrough.\n switch (fname) {\n case 'rgba':\n if (params.length !== 4) return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'rgb':\n if (params.length !== 3) return null;\n return [parse_css_int(params[0]),\n parse_css_int(params[1]),\n parse_css_int(params[2]),\n alpha];\n case 'hsla':\n if (params.length !== 4) return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'hsl':\n if (params.length !== 3) return null;\n var h = (((parseFloat(params[0]) % 360) + 360) % 360) / 360; // 0 .. 1\n // NOTE(deanm): According to the CSS spec s/l should only be\n // percentages, but we don't bother and let float or percentage.\n var s = parse_css_float(params[1]);\n var l = parse_css_float(params[2]);\n var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n var m1 = l * 2 - m2;\n return [clamp_css_byte(css_hue_to_rgb(m1, m2, h+1/3) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h-1/3) * 255),\n alpha];\n default:\n return null;\n }\n }\n\n return null;\n}\n\ntry { exports.parseCSSColor = parseCSSColor } catch(e) { }\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom.js": {
"title": "$:/core/modules/utils/dom.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static DOM-related utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDetermines whether element 'a' contains element 'b'\nCode thanks to John Resig, http://ejohn.org/blog/comparing-document-position/\n*/\nexports.domContains = function(a,b) {\n\treturn a.contains ?\n\t\ta !== b && a.contains(b) :\n\t\t!!(a.compareDocumentPosition(b) & 16);\n};\n\nexports.removeChildren = function(node) {\n\twhile(node.hasChildNodes()) {\n\t\tnode.removeChild(node.firstChild);\n\t}\n};\n\nexports.hasClass = function(el,className) {\n\treturn el && el.hasAttribute && el.hasAttribute(\"class\") && el.getAttribute(\"class\").split(\" \").indexOf(className) !== -1;\n};\n\nexports.addClass = function(el,className) {\n\tvar c = (el.getAttribute(\"class\") || \"\").split(\" \");\n\tif(c.indexOf(className) === -1) {\n\t\tc.push(className);\n\t\tel.setAttribute(\"class\",c.join(\" \"));\n\t}\n};\n\nexports.removeClass = function(el,className) {\n\tvar c = (el.getAttribute(\"class\") || \"\").split(\" \"),\n\t\tp = c.indexOf(className);\n\tif(p !== -1) {\n\t\tc.splice(p,1);\n\t\tel.setAttribute(\"class\",c.join(\" \"));\n\t}\n};\n\nexports.toggleClass = function(el,className,status) {\n\tif(status === undefined) {\n\t\tstatus = !exports.hasClass(el,className);\n\t}\n\tif(status) {\n\t\texports.addClass(el,className);\n\t} else {\n\t\texports.removeClass(el,className);\n\t}\n};\n\n/*\nGet the first parent element that has scrollbars or use the body as fallback.\n*/\nexports.getScrollContainer = function(el) {\n\tvar doc = el.ownerDocument;\n\twhile(el.parentNode) {\t\n\t\tel = el.parentNode;\n\t\tif(el.scrollTop) {\n\t\t\treturn el;\n\t\t}\n\t}\n\treturn doc.body;\n};\n\n/*\nGet the scroll position of the viewport\nReturns:\n\t{\n\t\tx: horizontal scroll position in pixels,\n\t\ty: vertical scroll position in pixels\n\t}\n*/\nexports.getScrollPosition = function(srcWindow) {\n\tvar scrollWindow = srcWindow || window;\n\tif(\"scrollX\" in scrollWindow) {\n\t\treturn {x: scrollWindow.scrollX, y: scrollWindow.scrollY};\n\t} else {\n\t\treturn {x: scrollWindow.document.documentElement.scrollLeft, y: scrollWindow.document.documentElement.scrollTop};\n\t}\n};\n\n/*\nAdjust the height of a textarea to fit its content, preserving scroll position, and return the height\n*/\nexports.resizeTextAreaToFit = function(domNode,minHeight) {\n\t// Get the scroll container and register the current scroll position\n\tvar container = $tw.utils.getScrollContainer(domNode),\n\t\tscrollTop = container.scrollTop;\n // Measure the specified minimum height\n\tdomNode.style.height = minHeight;\n\tvar measuredHeight = domNode.offsetHeight || parseInt(minHeight,10);\n\t// Set its height to auto so that it snaps to the correct height\n\tdomNode.style.height = \"auto\";\n\t// Calculate the revised height\n\tvar newHeight = Math.max(domNode.scrollHeight + domNode.offsetHeight - domNode.clientHeight,measuredHeight);\n\t// Only try to change the height if it has changed\n\tif(newHeight !== domNode.offsetHeight) {\n\t\tdomNode.style.height = newHeight + \"px\";\n\t\t// Make sure that the dimensions of the textarea are recalculated\n\t\t$tw.utils.forceLayout(domNode);\n\t\t// Set the container to the position we registered at the beginning\n\t\tcontainer.scrollTop = scrollTop;\n\t}\n\treturn newHeight;\n};\n\n/*\nGets the bounding rectangle of an element in absolute page coordinates\n*/\nexports.getBoundingPageRect = function(element) {\n\tvar scrollPos = $tw.utils.getScrollPosition(element.ownerDocument.defaultView),\n\t\tclientRect = element.getBoundingClientRect();\n\treturn {\n\t\tleft: clientRect.left + scrollPos.x,\n\t\twidth: clientRect.width,\n\t\tright: clientRect.right + scrollPos.x,\n\t\ttop: clientRect.top + scrollPos.y,\n\t\theight: clientRect.height,\n\t\tbottom: clientRect.bottom + scrollPos.y\n\t};\n};\n\n/*\nSaves a named password in the browser\n*/\nexports.savePassword = function(name,password) {\n\tvar done = false;\n\ttry {\n\t\twindow.localStorage.setItem(\"tw5-password-\" + name,password);\n\t\tdone = true;\n\t} catch(e) {\n\t}\n\tif(!done) {\n\t\t$tw.savedPasswords = $tw.savedPasswords || Object.create(null);\n\t\t$tw.savedPasswords[name] = password;\n\t}\n};\n\n/*\nRetrieve a named password from the browser\n*/\nexports.getPassword = function(name) {\n\tvar value;\n\ttry {\n\t\tvalue = window.localStorage.getItem(\"tw5-password-\" + name);\n\t} catch(e) {\n\t}\n\tif(value !== undefined) {\n\t\treturn value;\n\t} else {\n\t\treturn ($tw.savedPasswords || Object.create(null))[name] || \"\";\n\t}\n};\n\n/*\nForce layout of a dom node and its descendents\n*/\nexports.forceLayout = function(element) {\n\tvar dummy = element.offsetWidth;\n};\n\n/*\nPulse an element for debugging purposes\n*/\nexports.pulseElement = function(element) {\n\t// Event handler to remove the class at the end\n\telement.addEventListener($tw.browser.animationEnd,function handler(event) {\n\t\telement.removeEventListener($tw.browser.animationEnd,handler,false);\n\t\t$tw.utils.removeClass(element,\"pulse\");\n\t},false);\n\t// Apply the pulse class\n\t$tw.utils.removeClass(element,\"pulse\");\n\t$tw.utils.forceLayout(element);\n\t$tw.utils.addClass(element,\"pulse\");\n};\n\n/*\nAttach specified event handlers to a DOM node\ndomNode: where to attach the event handlers\nevents: array of event handlers to be added (see below)\nEach entry in the events array is an object with these properties:\nhandlerFunction: optional event handler function\nhandlerObject: optional event handler object\nhandlerMethod: optionally specifies object handler method name (defaults to `handleEvent`)\n*/\nexports.addEventListeners = function(domNode,events) {\n\t$tw.utils.each(events,function(eventInfo) {\n\t\tvar handler;\n\t\tif(eventInfo.handlerFunction) {\n\t\t\thandler = eventInfo.handlerFunction;\n\t\t} else if(eventInfo.handlerObject) {\n\t\t\tif(eventInfo.handlerMethod) {\n\t\t\t\thandler = function(event) {\n\t\t\t\t\teventInfo.handlerObject[eventInfo.handlerMethod].call(eventInfo.handlerObject,event);\n\t\t\t\t};\t\n\t\t\t} else {\n\t\t\t\thandler = eventInfo.handlerObject;\n\t\t\t}\n\t\t}\n\t\tdomNode.addEventListener(eventInfo.name,handler,false);\n\t});\n};\n\n/*\nGet the computed styles applied to an element as an array of strings of individual CSS properties\n*/\nexports.getComputedStyles = function(domNode) {\n\tvar textAreaStyles = window.getComputedStyle(domNode,null),\n\t\tstyleDefs = [],\n\t\tname;\n\tfor(var t=0; t<textAreaStyles.length; t++) {\n\t\tname = textAreaStyles[t];\n\t\tstyleDefs.push(name + \": \" + textAreaStyles.getPropertyValue(name) + \";\");\n\t}\n\treturn styleDefs;\n};\n\n/*\nApply a set of styles passed as an array of strings of individual CSS properties\n*/\nexports.setStyles = function(domNode,styleDefs) {\n\tdomNode.style.cssText = styleDefs.join(\"\");\n};\n\n/*\nCopy the computed styles from a source element to a destination element\n*/\nexports.copyStyles = function(srcDomNode,dstDomNode) {\n\t$tw.utils.setStyles(dstDomNode,$tw.utils.getComputedStyles(srcDomNode));\n};\n\n/*\nCopy plain text to the clipboard on browsers that support it\n*/\nexports.copyToClipboard = function(text,options) {\n\toptions = options || {};\n\tvar textArea = document.createElement(\"textarea\");\n\ttextArea.style.position = \"fixed\";\n\ttextArea.style.top = 0;\n\ttextArea.style.left = 0;\n\ttextArea.style.fontSize = \"12pt\";\n\ttextArea.style.width = \"2em\";\n\ttextArea.style.height = \"2em\";\n\ttextArea.style.padding = 0;\n\ttextArea.style.border = \"none\";\n\ttextArea.style.outline = \"none\";\n\ttextArea.style.boxShadow = \"none\";\n\ttextArea.style.background = \"transparent\";\n\ttextArea.value = text;\n\tdocument.body.appendChild(textArea);\n\ttextArea.select();\n\ttextArea.setSelectionRange(0,text.length);\n\tvar succeeded = false;\n\ttry {\n\t\tsucceeded = document.execCommand(\"copy\");\n\t} catch (err) {\n\t}\n\tif(!options.doNotNotify) {\n\t\t$tw.notifier.display(succeeded ? \"$:/language/Notifications/CopiedToClipboard/Succeeded\" : \"$:/language/Notifications/CopiedToClipboard/Failed\");\n\t}\n\tdocument.body.removeChild(textArea);\n};\n\nexports.getLocationPath = function() {\n\treturn window.location.toString().split(\"#\")[0];\n};\n\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/dragndrop.js": {
"title": "$:/core/modules/utils/dom/dragndrop.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/dragndrop.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser data transfer utilities, used with the clipboard and drag and drop\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOptions:\n\ndomNode: dom node to make draggable\ndragImageType: \"pill\" or \"dom\"\ndragTiddlerFn: optional function to retrieve the title of tiddler to drag\ndragFilterFn: optional function to retreive the filter defining a list of tiddlers to drag\nwidget: widget to use as the contect for the filter\n*/\nexports.makeDraggable = function(options) {\n\tvar dragImageType = options.dragImageType || \"dom\",\n\t\tdragImage,\n\t\tdomNode = options.domNode;\n\t// Make the dom node draggable (not necessary for anchor tags)\n\tif((domNode.tagName || \"\").toLowerCase() !== \"a\") {\n\t\tdomNode.setAttribute(\"draggable\",\"true\");\t\t\n\t}\n\t// Add event handlers\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"dragstart\", handlerFunction: function(event) {\n\t\t\tif(event.dataTransfer === undefined) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Collect the tiddlers being dragged\n\t\t\tvar dragTiddler = options.dragTiddlerFn && options.dragTiddlerFn(),\n\t\t\t\tdragFilter = options.dragFilterFn && options.dragFilterFn(),\n\t\t\t\ttitles = dragTiddler ? [dragTiddler] : [],\n\t\t\t \tstartActions = options.startActions;\n\t\t\tif(dragFilter) {\n\t\t\t\ttitles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget));\n\t\t\t}\n\t\t\tvar titleString = $tw.utils.stringifyList(titles);\n\t\t\t// Check that we've something to drag\n\t\t\tif(titles.length > 0 && event.target === domNode) {\n\t\t\t\t// Mark the drag in progress\n\t\t\t\t$tw.dragInProgress = domNode;\n\t\t\t\t// Set the dragging class on the element being dragged\n\t\t\t\t$tw.utils.addClass(event.target,\"tc-dragging\");\n\t\t\t\t// Invoke drag-start actions if given\n\t\t\t\tif(startActions !== undefined) {\n\t\t\t\t\toptions.widget.invokeActionString(startActions,options.widget,event,{actionTiddler: titleString});\n\t\t\t\t}\n\t\t\t\t// Create the drag image elements\n\t\t\t\tdragImage = options.widget.document.createElement(\"div\");\n\t\t\t\tdragImage.className = \"tc-tiddler-dragger\";\n\t\t\t\tvar inner = options.widget.document.createElement(\"div\");\n\t\t\t\tinner.className = \"tc-tiddler-dragger-inner\";\n\t\t\t\tinner.appendChild(options.widget.document.createTextNode(\n\t\t\t\t\ttitles.length === 1 ? \n\t\t\t\t\t\ttitles[0] :\n\t\t\t\t\t\ttitles.length + \" tiddlers\"\n\t\t\t\t));\n\t\t\t\tdragImage.appendChild(inner);\n\t\t\t\toptions.widget.document.body.appendChild(dragImage);\n\t\t\t\t// Set the data transfer properties\n\t\t\t\tvar dataTransfer = event.dataTransfer;\n\t\t\t\t// Set up the image\n\t\t\t\tdataTransfer.effectAllowed = \"all\";\n\t\t\t\tif(dataTransfer.setDragImage) {\n\t\t\t\t\tif(dragImageType === \"pill\") {\n\t\t\t\t\t\tdataTransfer.setDragImage(dragImage.firstChild,-16,-16);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar r = domNode.getBoundingClientRect();\n\t\t\t\t\t\tdataTransfer.setDragImage(domNode,event.clientX-r.left,event.clientY-r.top);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Set up the data transfer\n\t\t\t\tif(dataTransfer.clearData) {\n\t\t\t\t\tdataTransfer.clearData();\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tvar jsonData = [];\n\t\t\t\tif(titles.length > 1) {\n\t\t\t\t\ttitles.forEach(function(title) {\n\t\t\t\t\t\tjsonData.push(options.widget.wiki.getTiddlerAsJson(title));\n\t\t\t\t\t});\n\t\t\t\t\tjsonData = \"[\" + jsonData.join(\",\") + \"]\";\n\t\t\t\t} else {\n\t\t\t\t\tjsonData = options.widget.wiki.getTiddlerAsJson(titles[0]);\n\t\t\t\t}\n\t\t\t\t// IE doesn't like these content types\n\t\t\t\tif(!$tw.browser.isIE) {\n\t\t\t\t\tdataTransfer.setData(\"text/vnd.tiddler\",jsonData);\n\t\t\t\t\tdataTransfer.setData(\"text/plain\",titleString);\n\t\t\t\t\tdataTransfer.setData(\"text/x-moz-url\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\t\t}\n\t\t\t\tdataTransfer.setData(\"URL\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\t\tdataTransfer.setData(\"Text\",titleString);\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t\treturn false;\n\t\t}},\n\t\t{name: \"dragend\", handlerFunction: function(event) {\n\t\t\tif(event.target === domNode) {\n\t\t\t\t// Collect the tiddlers being dragged\n\t\t\t\tvar dragTiddler = options.dragTiddlerFn && options.dragTiddlerFn(),\n\t\t\t\t\tdragFilter = options.dragFilterFn && options.dragFilterFn(),\n\t\t\t\t\ttitles = dragTiddler ? [dragTiddler] : [],\n\t\t\t \t\tendActions = options.endActions;\n\t\t\t\tif(dragFilter) {\n\t\t\t\t\ttitles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget));\n\t\t\t\t}\n\t\t\t\tvar titleString = $tw.utils.stringifyList(titles);\n\t\t\t\t$tw.dragInProgress = null;\n\t\t\t\t// Invoke drag-end actions if given\n\t\t\t\tif(endActions !== undefined) {\n\t\t\t\t\toptions.widget.invokeActionString(endActions,options.widget,event,{actionTiddler: titleString});\n\t\t\t\t}\n\t\t\t\t// Remove the dragging class on the element being dragged\n\t\t\t\t$tw.utils.removeClass(event.target,\"tc-dragging\");\n\t\t\t\t// Delete the drag image element\n\t\t\t\tif(dragImage) {\n\t\t\t\t\tdragImage.parentNode.removeChild(dragImage);\n\t\t\t\t\tdragImage = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}}\n\t]);\n};\n\nexports.importDataTransfer = function(dataTransfer,fallbackTitle,callback) {\n\t// Try each provided data type in turn\n\tif($tw.log.IMPORT) {\n\t\tconsole.log(\"Available data types:\");\n\t\tfor(var type=0; type<dataTransfer.types.length; type++) {\n\t\t\tconsole.log(\"type\",dataTransfer.types[type],dataTransfer.getData(dataTransfer.types[type]))\n\t\t}\n\t}\n\tfor(var t=0; t<importDataTypes.length; t++) {\n\t\tif(!$tw.browser.isIE || importDataTypes[t].IECompatible) {\n\t\t\t// Get the data\n\t\t\tvar dataType = importDataTypes[t];\n\t\t\t\tvar data = dataTransfer.getData(dataType.type);\n\t\t\t// Import the tiddlers in the data\n\t\t\tif(data !== \"\" && data !== null) {\n\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\tconsole.log(\"Importing data type '\" + dataType.type + \"', data: '\" + data + \"'\")\n\t\t\t\t}\n\t\t\t\tvar tiddlerFields = dataType.toTiddlerFieldsArray(data,fallbackTitle);\n\t\t\t\tcallback(tiddlerFields);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar importDataTypes = [\n\t{type: \"text/vnd.tiddler\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn parseJSONTiddlers(data,fallbackTitle);\n\t}},\n\t{type: \"URL\", IECompatible: true, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURIComponent(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn parseJSONTiddlers(match[1],fallbackTitle);\n\t\t} else {\n\t\t\treturn [{title: fallbackTitle, text: data}]; // As URL string\n\t\t}\n\t}},\n\t{type: \"text/x-moz-url\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURIComponent(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn parseJSONTiddlers(match[1],fallbackTitle);\n\t\t} else {\n\t\t\treturn [{title: fallbackTitle, text: data}]; // As URL string\n\t\t}\n\t}},\n\t{type: \"text/html\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"text/plain\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"Text\", IECompatible: true, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"text/uri-list\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}}\n];\n\nfunction parseJSONTiddlers(json,fallbackTitle) {\n\tvar data = JSON.parse(json);\n\tif(!$tw.utils.isArray(data)) {\n\t\tdata = [data];\n\t}\n\tdata.forEach(function(fields) {\n\t\tfields.title = fields.title || fallbackTitle;\n\t});\n\treturn data;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/http.js": {
"title": "$:/core/modules/utils/dom/http.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/http.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser HTTP support\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nA quick and dirty HTTP function; to be refactored later. Options are:\n\turl: URL to retrieve\n\theaders: hashmap of headers to send\n\ttype: GET, PUT, POST etc\n\tcallback: function invoked with (err,data,xhr)\n\treturnProp: string name of the property to return as first argument of callback\n*/\nexports.httpRequest = function(options) {\n\tvar type = options.type || \"GET\",\n\t\turl = options.url,\n\t\theaders = options.headers || {accept: \"application/json\"},\n\t\thasHeader = function(targetHeader) {\n\t\t\ttargetHeader = targetHeader.toLowerCase();\n\t\t\tvar result = false;\n\t\t\t$tw.utils.each(headers,function(header,headerTitle,object) {\n\t\t\t\tif(headerTitle.toLowerCase() === targetHeader) {\n\t\t\t\t\tresult = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\t\treturnProp = options.returnProp || \"responseText\",\n\t\trequest = new XMLHttpRequest(),\n\t\tdata = \"\",\n\t\tf,results;\n\t// Massage the data hashmap into a string\n\tif(options.data) {\n\t\tif(typeof options.data === \"string\") { // Already a string\n\t\t\tdata = options.data;\n\t\t} else { // A hashmap of strings\n\t\t\tresults = [];\n\t\t\t$tw.utils.each(options.data,function(dataItem,dataItemTitle) {\n\t\t\t\tresults.push(dataItemTitle + \"=\" + encodeURIComponent(dataItem));\n\t\t\t});\n\t\t\tif(type === \"GET\" || type === \"HEAD\") {\n\t\t\t\turl += \"?\" + results.join(\"&\");\n\t\t\t} else {\n\t\t\t\tdata = results.join(\"&\");\n\t\t\t}\n\t\t}\n\t}\n\t// Set up the state change handler\n\trequest.onreadystatechange = function() {\n\t\tif(this.readyState === 4) {\n\t\t\tif(this.status === 200 || this.status === 201 || this.status === 204) {\n\t\t\t\t// Success!\n\t\t\t\toptions.callback(null,this[returnProp],this);\n\t\t\t\treturn;\n\t\t\t}\n\t\t// Something went wrong\n\t\toptions.callback($tw.language.getString(\"Error/XMLHttpRequest\") + \": \" + this.status,null,this);\n\t\t}\n\t};\n\t// Make the request\n\trequest.open(type,url,true);\n\tif(headers) {\n\t\t$tw.utils.each(headers,function(header,headerTitle,object) {\n\t\t\trequest.setRequestHeader(headerTitle,header);\n\t\t});\n\t}\n\tif(data && !hasHeader(\"Content-Type\")) {\n\t\trequest.setRequestHeader(\"Content-Type\",\"application/x-www-form-urlencoded; charset=UTF-8\");\n\t}\n\tif(!hasHeader(\"X-Requested-With\")) {\n\t\trequest.setRequestHeader(\"X-Requested-With\",\"TiddlyWiki\");\n\t}\n\ttry {\n\t\trequest.send(data);\n\t} catch(e) {\n\t\toptions.callback(e,null,this);\n\t}\n\treturn request;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/keyboard.js": {
"title": "$:/core/modules/utils/dom/keyboard.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/keyboard.js\ntype: application/javascript\nmodule-type: utils\n\nKeyboard utilities; now deprecated. Instead, use $tw.keyboardManager\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n[\"parseKeyDescriptor\",\"checkKeyDescriptor\"].forEach(function(method) {\n\texports[method] = function() {\n\t\tif($tw.keyboardManager) {\n\t\t\treturn $tw.keyboardManager[method].apply($tw.keyboardManager,Array.prototype.slice.call(arguments,0));\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t};\n});\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/modal.js": {
"title": "$:/core/modules/utils/dom/modal.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/modal.js\ntype: application/javascript\nmodule-type: utils\n\nModal message mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\nvar navigator = require(\"$:/core/modules/widgets/navigator.js\");\n\nvar Modal = function(wiki) {\n\tthis.wiki = wiki;\n\tthis.modalCount = 0;\n};\n\n/*\nDisplay a modal dialogue\n\ttitle: Title of tiddler to display\n\toptions: see below\nOptions include:\n\tdownloadLink: Text of a big download link to include\n*/\nModal.prototype.display = function(title,options) {\n\toptions = options || {};\n\tthis.srcDocument = options.variables && (options.variables.rootwindow === \"true\" ||\n\t\t\t\toptions.variables.rootwindow === \"yes\") ? document :\n\t\t\t\t(options.event.event && options.event.event.target ? options.event.event.target.ownerDocument : document);\n\tthis.srcWindow = this.srcDocument.defaultView;\n\tvar self = this,\n\t\trefreshHandler,\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\ttiddler = this.wiki.getTiddler(title);\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Create the variables\n\tvar variables = $tw.utils.extend({\n\t\t\tcurrentTiddler: title,\n\t\t\t\"tv-story-list\": (options.event && options.event.widget ? options.event.widget.getVariable(\"tv-story-list\") : \"\"),\n\t\t\t\"tv-history-list\": (options.event && options.event.widget ? options.event.widget.getVariable(\"tv-history-list\") : \"\")\n\t\t},options.variables);\n\n\t// Create the wrapper divs\n\tvar wrapper = this.srcDocument.createElement(\"div\"),\n\t\tmodalBackdrop = this.srcDocument.createElement(\"div\"),\n\t\tmodalWrapper = this.srcDocument.createElement(\"div\"),\n\t\tmodalHeader = this.srcDocument.createElement(\"div\"),\n\t\theaderTitle = this.srcDocument.createElement(\"h3\"),\n\t\tmodalBody = this.srcDocument.createElement(\"div\"),\n\t\tmodalLink = this.srcDocument.createElement(\"a\"),\n\t\tmodalFooter = this.srcDocument.createElement(\"div\"),\n\t\tmodalFooterHelp = this.srcDocument.createElement(\"span\"),\n\t\tmodalFooterButtons = this.srcDocument.createElement(\"span\");\n\t// Up the modal count and adjust the body class\n\tthis.modalCount++;\n\tthis.adjustPageClass();\n\t// Add classes\n\t$tw.utils.addClass(wrapper,\"tc-modal-wrapper\");\n\tif(tiddler.fields && tiddler.fields.class) {\n\t\t$tw.utils.addClass(wrapper,tiddler.fields.class);\n\t}\n\t$tw.utils.addClass(modalBackdrop,\"tc-modal-backdrop\");\n\t$tw.utils.addClass(modalWrapper,\"tc-modal\");\n\t$tw.utils.addClass(modalHeader,\"tc-modal-header\");\n\t$tw.utils.addClass(modalBody,\"tc-modal-body\");\n\t$tw.utils.addClass(modalFooter,\"tc-modal-footer\");\n\t// Join them together\n\twrapper.appendChild(modalBackdrop);\n\twrapper.appendChild(modalWrapper);\n\tmodalHeader.appendChild(headerTitle);\n\tmodalWrapper.appendChild(modalHeader);\n\tmodalWrapper.appendChild(modalBody);\n\tmodalFooter.appendChild(modalFooterHelp);\n\tmodalFooter.appendChild(modalFooterButtons);\n\tmodalWrapper.appendChild(modalFooter);\n\tvar navigatorTree = {\n\t\t\"type\": \"navigator\",\n\t\t\"attributes\": {\n\t\t\t\"story\": {\n\t\t\t\t\"name\": \"story\",\n\t\t\t\t\"type\": \"string\",\n\t\t\t\t\"value\": variables[\"tv-story-list\"]\n\t\t\t},\n\t\t\t\"history\": {\n\t\t\t\t\"name\": \"history\",\n\t\t\t\t\"type\": \"string\",\n\t\t\t\t\"value\": variables[\"tv-history-list\"]\n\t\t\t}\n\t\t},\n\t\t\"tag\": \"$navigator\",\n\t\t\"isBlock\": true,\n\t\t\"children\": []\n\t};\n\tvar navigatorWidgetNode = new navigator.navigator(navigatorTree, {\n\t\twiki: this.wiki,\n\t\tdocument : this.srcDocument,\n\t\tparentWidget: $tw.rootWidget\n\t});\n\tnavigatorWidgetNode.render(modalBody,null);\n\t\n\t// Render the title of the message\n\tvar headerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"subtitle\",\n\t\tmode: \"inline\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\tattributes: {\n\t\t\t\ttext: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: title\n\t\t}}}],\n\t\tparentWidget: navigatorWidgetNode,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\theaderWidgetNode.render(headerTitle,null);\n\t// Render the body of the message\n\tvar bodyWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tparentWidget: navigatorWidgetNode,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\n\tbodyWidgetNode.render(modalBody,null);\n\t// Setup the link if present\n\tif(options.downloadLink) {\n\t\tmodalLink.href = options.downloadLink;\n\t\tmodalLink.appendChild(this.srcDocument.createTextNode(\"Right-click to save changes\"));\n\t\tmodalBody.appendChild(modalLink);\n\t}\n\t// Render the footer of the message\n\tif(tiddler.fields && tiddler.fields.help) {\n\t\tvar link = this.srcDocument.createElement(\"a\");\n\t\tlink.setAttribute(\"href\",tiddler.fields.help);\n\t\tlink.setAttribute(\"target\",\"_blank\");\n\t\tlink.setAttribute(\"rel\",\"noopener noreferrer\");\n\t\tlink.appendChild(this.srcDocument.createTextNode(\"Help\"));\n\t\tmodalFooterHelp.appendChild(link);\n\t\tmodalFooterHelp.style.float = \"left\";\n\t}\n\tvar footerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"footer\",\n\t\tmode: \"inline\",\n\t\tchildren: [{\n\t\t\ttype: \"button\",\n\t\t\tattributes: {\n\t\t\t\tmessage: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: \"tm-close-tiddler\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\tattributes: {\n\t\t\t\t\ttext: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tvalue: $tw.language.getString(\"Buttons/Close/Caption\")\n\t\t\t}}}\n\t\t]}],\n\t\tparentWidget: navigatorWidgetNode,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\tfooterWidgetNode.render(modalFooterButtons,null);\n\t// Set up the refresh handler\n\trefreshHandler = function(changes) {\n\t\theaderWidgetNode.refresh(changes,modalHeader,null);\n\t\tbodyWidgetNode.refresh(changes,modalBody,null);\n\t\tfooterWidgetNode.refresh(changes,modalFooterButtons,null);\n\t};\n\tthis.wiki.addEventListener(\"change\",refreshHandler);\n\t// Add the close event handler\n\tvar closeHandler = function(event) {\n\t\t// Remove our refresh handler\n\t\tself.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t// Decrease the modal count and adjust the body class\n\t\tself.modalCount--;\n\t\tself.adjustPageClass();\n\t\t// Force layout and animate the modal message away\n\t\t$tw.utils.forceLayout(modalBackdrop);\n\t\t$tw.utils.forceLayout(modalWrapper);\n\t\t$tw.utils.setStyle(modalBackdrop,[\n\t\t\t{opacity: \"0\"}\n\t\t]);\n\t\t$tw.utils.setStyle(modalWrapper,[\n\t\t\t{transform: \"translateY(\" + self.srcWindow.innerHeight + \"px)\"}\n\t\t]);\n\t\t// Set up an event for the transition end\n\t\tself.srcWindow.setTimeout(function() {\n\t\t\tif(wrapper.parentNode) {\n\t\t\t\t// Remove the modal message from the DOM\n\t\t\t\tself.srcDocument.body.removeChild(wrapper);\n\t\t\t}\n\t\t},duration);\n\t\t// Don't let anyone else handle the tm-close-tiddler message\n\t\treturn false;\n\t};\n\theaderWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tbodyWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tfooterWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\t// Set the initial styles for the message\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-this.srcWindow.innerHeight) + \"px)\"}\n\t]);\n\t// Put the message into the document\n\tthis.srcDocument.body.appendChild(wrapper);\n\t// Set up animation for the styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{transition: \"opacity \" + duration + \"ms ease-out\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(modalBackdrop);\n\t$tw.utils.forceLayout(modalWrapper);\n\t// Set final animated styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0.7\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n};\n\nModal.prototype.adjustPageClass = function() {\n\tvar windowContainer = $tw.pageContainer ? ($tw.pageContainer === this.srcDocument.body.firstChild ? $tw.pageContainer : this.srcDocument.body.firstChild) : null;\n\tif(windowContainer) {\n\t\t$tw.utils.toggleClass(windowContainer,\"tc-modal-displayed\",this.modalCount > 0);\n\t}\n};\n\nexports.Modal = Modal;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/notifier.js": {
"title": "$:/core/modules/utils/dom/notifier.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/notifier.js\ntype: application/javascript\nmodule-type: utils\n\nNotifier mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar Notifier = function(wiki) {\n\tthis.wiki = wiki;\n};\n\n/*\nDisplay a notification\n\ttitle: Title of tiddler containing the notification text\n\toptions: see below\nOptions include:\n*/\nNotifier.prototype.display = function(title,options) {\n\toptions = options || {};\n\t// Create the wrapper divs\n\tvar self = this,\n\t\tnotification = document.createElement(\"div\"),\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\trefreshHandler;\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Add classes\n\t$tw.utils.addClass(notification,\"tc-notification\");\n\t// Create the variables\n\tvar variables = $tw.utils.extend({currentTiddler: title},options.variables);\n\t// Render the body of the notification\n\tvar widgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables,\n\t\timportPageMacros: true});\n\twidgetNode.render(notification,null);\n\trefreshHandler = function(changes) {\n\t\twidgetNode.refresh(changes,notification,null);\n\t};\n\tthis.wiki.addEventListener(\"change\",refreshHandler);\n\t// Set the initial styles for the notification\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"0\"},\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-window.innerHeight) + \"px)\"},\n\t\t{transition: \"opacity \" + duration + \"ms ease-out, \" + $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Add the notification to the DOM\n\tdocument.body.appendChild(notification);\n\t// Force layout\n\t$tw.utils.forceLayout(notification);\n\t// Set final animated styles\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n\t// Set a timer to remove the notification\n\twindow.setTimeout(function() {\n\t\t// Remove our change event handler\n\t\tself.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t// Force layout and animate the notification away\n\t\t$tw.utils.forceLayout(notification);\n\t\t$tw.utils.setStyle(notification,[\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transform: \"translateX(\" + (notification.offsetWidth) + \"px)\"}\n\t\t]);\n\t\t// Remove the modal message from the DOM once the transition ends\n\t\tsetTimeout(function() {\n\t\t\tif(notification.parentNode) {\n\t\t\t\tdocument.body.removeChild(notification);\n\t\t\t}\n\t\t},duration);\n\t},$tw.config.preferences.notificationDuration);\n};\n\nexports.Notifier = Notifier;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/popup.js": {
"title": "$:/core/modules/utils/dom/popup.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/popup.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Popup object prototype that manages popups in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreates a Popup object with these options:\n\trootElement: the DOM element to which the popup zapper should be attached\n*/\nvar Popup = function(options) {\n\toptions = options || {};\n\tthis.rootElement = options.rootElement || document.documentElement;\n\tthis.popups = []; // Array of {title:,wiki:,domNode:} objects\n};\n\n/*\nTrigger a popup open or closed. Parameters are in a hashmap:\n\ttitle: title of the tiddler where the popup details are stored\n\tdomNode: dom node to which the popup will be positioned (one of domNode or domNodeRect is required)\n\tdomNodeRect: rectangle to which the popup will be positioned\n\twiki: wiki\n\tforce: if specified, forces the popup state to true or false (instead of toggling it)\n\tfloating: if true, skips registering the popup, meaning that it will need manually clearing\n*/\nPopup.prototype.triggerPopup = function(options) {\n\t// Check if this popup is already active\n\tvar index = this.findPopup(options.title);\n\t// Compute the new state\n\tvar state = index === -1;\n\tif(options.force !== undefined) {\n\t\tstate = options.force;\n\t}\n\t// Show or cancel the popup according to the new state\n\tif(state) {\n\t\tthis.show(options);\n\t} else {\n\t\tthis.cancel(index);\n\t}\n};\n\nPopup.prototype.findPopup = function(title) {\n\tvar index = -1;\n\tfor(var t=0; t<this.popups.length; t++) {\n\t\tif(this.popups[t].title === title) {\n\t\t\tindex = t;\n\t\t}\n\t}\n\treturn index;\n};\n\nPopup.prototype.handleEvent = function(event) {\n\tif(event.type === \"click\") {\n\t\t// Find out what was clicked on\n\t\tvar info = this.popupInfo(event.target),\n\t\t\tcancelLevel = info.popupLevel - 1;\n\t\t// Don't remove the level that was clicked on if we clicked on a handle\n\t\tif(info.isHandle) {\n\t\t\tcancelLevel++;\n\t\t}\n\t\t// Cancel\n\t\tthis.cancel(cancelLevel);\n\t}\n};\n\n/*\nFind the popup level containing a DOM node. Returns:\npopupLevel: count of the number of nested popups containing the specified element\nisHandle: true if the specified element is within a popup handle\n*/\nPopup.prototype.popupInfo = function(domNode) {\n\tvar isHandle = false,\n\t\tpopupCount = 0,\n\t\tnode = domNode;\n\t// First check ancestors to see if we're within a popup handle\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup-handle\")) {\n\t\t\tisHandle = true;\n\t\t\tpopupCount++;\n\t\t}\n\t\tif($tw.utils.hasClass(node,\"tc-popup-keep\")) {\n\t\t\tisHandle = true;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\t// Then count the number of ancestor popups\n\tnode = domNode;\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup\")) {\n\t\t\tpopupCount++;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\tvar info = {\n\t\tpopupLevel: popupCount,\n\t\tisHandle: isHandle\n\t};\n\treturn info;\n};\n\n/*\nDisplay a popup by adding it to the stack\n*/\nPopup.prototype.show = function(options) {\n\t// Find out what was clicked on\n\tvar info = this.popupInfo(options.domNode);\n\t// Cancel any higher level popups\n\tthis.cancel(info.popupLevel);\n\n\t// Store the popup details if not already there\n\tif(!options.floating && this.findPopup(options.title) === -1) {\n\t\tthis.popups.push({\n\t\t\ttitle: options.title,\n\t\t\twiki: options.wiki,\n\t\t\tdomNode: options.domNode,\n\t\t\tnoStateReference: options.noStateReference\n\t\t});\n\t}\n\t// Set the state tiddler\n\tvar rect;\n\tif(options.domNodeRect) {\n\t\trect = options.domNodeRect;\n\t} else {\n\t\trect = {\n\t\t\tleft: options.domNode.offsetLeft,\n\t\t\ttop: options.domNode.offsetTop,\n\t\t\twidth: options.domNode.offsetWidth,\n\t\t\theight: options.domNode.offsetHeight\n\t\t};\n\t}\n\tvar popupRect = \"(\" + rect.left + \",\" + rect.top + \",\" + \n\t\t\t\trect.width + \",\" + rect.height + \")\";\n\tif(options.noStateReference) {\n\t\toptions.wiki.setText(options.title,\"text\",undefined,popupRect);\n\t} else {\n\t\toptions.wiki.setTextReference(options.title,popupRect);\n\t}\n\t// Add the click handler if we have any popups\n\tif(this.popups.length > 0) {\n\t\tthis.rootElement.addEventListener(\"click\",this,true);\t\t\n\t}\n};\n\n/*\nCancel all popups at or above a specified level or DOM node\nlevel: popup level to cancel (0 cancels all popups)\n*/\nPopup.prototype.cancel = function(level) {\n\tvar numPopups = this.popups.length;\n\tlevel = Math.max(0,Math.min(level,numPopups));\n\tfor(var t=level; t<numPopups; t++) {\n\t\tvar popup = this.popups.pop();\n\t\tif(popup.title) {\n\t\t\tif(popup.noStateReference) {\n\t\t\t\tpopup.wiki.deleteTiddler(popup.title);\n\t\t\t} else {\n\t\t\t\tpopup.wiki.deleteTiddler($tw.utils.parseTextReference(popup.title).title);\n \t\t}\n\t\t}\n\t}\n\tif(this.popups.length === 0) {\n\t\tthis.rootElement.removeEventListener(\"click\",this,false);\n\t}\n};\n\n/*\nReturns true if the specified title and text identifies an active popup\n*/\nPopup.prototype.readPopupState = function(text) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/;\n\treturn popupLocationRegExp.test(text);\n};\n\nexports.Popup = Popup;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/scroller.js": {
"title": "$:/core/modules/utils/dom/scroller.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/scroller.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Scroller object prototype that manages scrolling in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nEvent handler for when the `tm-scroll` event hits the document body\n*/\nvar PageScroller = function() {\n\tthis.idRequestFrame = null;\n\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\twindow.webkitRequestAnimationFrame ||\n\t\twindow.mozRequestAnimationFrame ||\n\t\tfunction(callback) {\n\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t};\n\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\twindow.webkitCancelAnimationFrame ||\n\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\twindow.mozCancelAnimationFrame ||\n\t\twindow.mozCancelRequestAnimationFrame ||\n\t\tfunction(id) {\n\t\t\twindow.clearTimeout(id);\n\t\t};\n};\n\nPageScroller.prototype.isScrolling = function() {\n\treturn this.idRequestFrame !== null;\n}\n\nPageScroller.prototype.cancelScroll = function(srcWindow) {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(srcWindow,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle an event\n*/\nPageScroller.prototype.handleEvent = function(event) {\n\tif(event.type === \"tm-scroll\") {\n\t\tif(event.paramObject && event.paramObject.selector) {\n\t\t\tthis.scrollSelectorIntoView(null,event.paramObject.selector);\n\t\t} else {\n\t\t\tthis.scrollIntoView(event.target);\t\t\t\n\t\t}\n\t\treturn false; // Event was handled\n\t}\n\treturn true;\n};\n\n/*\nHandle a scroll event hitting the page document\n*/\nPageScroller.prototype.scrollIntoView = function(element,callback) {\n\tvar self = this,\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t srcWindow = element ? element.ownerDocument.defaultView : window;\n\t// Now get ready to scroll the body\n\tthis.cancelScroll(srcWindow);\n\tthis.startTime = Date.now();\n\t// Get the height of any position:fixed toolbars\n\tvar toolbar = srcWindow.document.querySelector(\".tc-adjust-top-of-scroll\"),\n\t\toffset = 0;\n\tif(toolbar) {\n\t\toffset = toolbar.offsetHeight;\n\t}\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar getBounds = function() {\n\t\t\tvar clientBounds = typeof callback === 'function' ? callback() : element.getBoundingClientRect(),\n\t\t\t\tscrollPosition = $tw.utils.getScrollPosition(srcWindow);\n\t\t\treturn {\n\t\t\t\tleft: clientBounds.left + scrollPosition.x,\n\t\t\t\ttop: clientBounds.top + scrollPosition.y - offset,\n\t\t\t\twidth: clientBounds.width,\n\t\t\t\theight: clientBounds.height\n\t\t\t};\n\t\t},\n\t\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\t\t// targetPos/targetSize - position and size of the target element\n\t\t// currentPos/currentSize - position and size of the current scroll viewport\n\t\t// returns: new position of the scroll viewport\n\t\tgetEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\tvar newPos = targetPos;\n\t\t\t// If we are scrolling within 50 pixels of the top/left then snap to zero\n\t\t\tif(newPos < 50) {\n\t\t\t\tnewPos = 0;\n\t\t\t}\n\t\t\treturn newPos;\n\t\t},\n\t\tdrawFrame = function drawFrame() {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll(srcWindow);\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\tvar scrollPosition = $tw.utils.getScrollPosition(srcWindow),\n\t\t\t\tbounds = getBounds(),\n\t\t\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,srcWindow.innerWidth),\n\t\t\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,srcWindow.innerHeight);\n\t\t\tsrcWindow.scrollTo(scrollPosition.x + (endX - scrollPosition.x) * t,scrollPosition.y + (endY - scrollPosition.y) * t);\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(srcWindow,drawFrame);\n\t\t\t}\n\t\t};\n\tdrawFrame();\n};\n\nPageScroller.prototype.scrollSelectorIntoView = function(baseElement,selector,callback) {\n\tbaseElement = baseElement || document.body;\n\tvar element = baseElement.querySelector(selector);\n\tif(element) {\n\t\tthis.scrollIntoView(element,callback);\t\t\n\t}\n};\n\nexports.PageScroller = PageScroller;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/edition-info.js": {
"title": "$:/core/modules/utils/edition-info.js",
"text": "/*\\\ntitle: $:/core/modules/utils/edition-info.js\ntype: application/javascript\nmodule-type: utils-node\n\nInformation about the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\nvar editionInfo;\n\nexports.getEditionInfo = function() {\n\tif(!editionInfo) {\n\t\t// Enumerate the edition paths\n\t\tvar editionPaths = $tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar);\n\t\teditionInfo = {};\n\t\tfor(var editionIndex=0; editionIndex<editionPaths.length; editionIndex++) {\n\t\t\tvar editionPath = editionPaths[editionIndex];\n\t\t\t// Enumerate the folders\n\t\t\tvar entries = fs.readdirSync(editionPath);\n\t\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\t\tvar entry = entries[entryIndex];\n\t\t\t\t// Check if directories have a valid tiddlywiki.info\n\t\t\t\tif(!editionInfo[entry] && $tw.utils.isDirectory(path.resolve(editionPath,entry))) {\n\t\t\t\t\tvar info;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tinfo = JSON.parse(fs.readFileSync(path.resolve(editionPath,entry,\"tiddlywiki.info\"),\"utf8\"));\n\t\t\t\t\t} catch(ex) {\n\t\t\t\t\t}\n\t\t\t\t\tif(info) {\n\t\t\t\t\t\teditionInfo[entry] = info;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn editionInfo;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils-node"
},
"$:/core/modules/utils/fakedom.js": {
"title": "$:/core/modules/utils/fakedom.js",
"text": "/*\\\ntitle: $:/core/modules/utils/fakedom.js\ntype: application/javascript\nmodule-type: global\n\nA barebones implementation of DOM interfaces needed by the rendering mechanism.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Sequence number used to enable us to track objects for testing\nvar sequenceNumber = null;\n\nvar bumpSequenceNumber = function(object) {\n\tif(sequenceNumber !== null) {\n\t\tobject.sequenceNumber = sequenceNumber++;\n\t}\n};\n\nvar TW_Node = function (){\n\tthrow TypeError(\"Illegal constructor\");\n};\n\nObject.defineProperty(TW_Node.prototype, 'ELEMENT_NODE', {\n\tget: function() {\n\t\treturn 1;\n\t}\n});\n\nObject.defineProperty(TW_Node.prototype, 'TEXT_NODE', {\n\tget: function() {\n\t\treturn 3;\n\t}\n});\n\nvar TW_TextNode = function(text) {\n\tbumpSequenceNumber(this);\n\tthis.textContent = text + \"\";\n};\n\nTW_TextNode.prototype = Object.create(TW_Node.prototype);\n\nObject.defineProperty(TW_TextNode.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn this.TEXT_NODE;\n\t}\n});\n\nObject.defineProperty(TW_TextNode.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\treturn this.textContent.replace(/(\\r?\\n)/g,\"\");\n\t}\n});\n\nvar TW_Element = function(tag,namespace) {\n\tbumpSequenceNumber(this);\n\tthis.isTiddlyWikiFakeDom = true;\n\tthis.tag = tag;\n\tthis.attributes = {};\n\tthis.isRaw = false;\n\tthis.children = [];\n\tthis._style = {};\n\tthis.namespaceURI = namespace || \"http://www.w3.org/1999/xhtml\";\n};\n\nTW_Element.prototype = Object.create(TW_Node.prototype);\n\nObject.defineProperty(TW_Element.prototype, \"style\", {\n\tget: function() {\n\t\treturn this._style;\n\t},\n\tset: function(str) {\n\t\tvar self = this;\n\t\tstr = str || \"\";\n\t\t$tw.utils.each(str.split(\";\"),function(declaration) {\n\t\t\tvar parts = declaration.split(\":\"),\n\t\t\t\tname = $tw.utils.trim(parts[0]),\n\t\t\t\tvalue = $tw.utils.trim(parts[1]);\n\t\t\tif(name && value) {\n\t\t\t\tself._style[$tw.utils.convertStyleNameToPropertyName(name)] = value;\n\t\t\t}\n\t\t});\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn this.ELEMENT_NODE;\n\t}\n});\n\nTW_Element.prototype.getAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot getAttribute on a raw TW_Element\";\n\t}\n\treturn this.attributes[name];\n};\n\nTW_Element.prototype.setAttribute = function(name,value) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot setAttribute on a raw TW_Element\";\n\t}\n\tthis.attributes[name] = value + \"\";\n};\n\nTW_Element.prototype.setAttributeNS = function(namespace,name,value) {\n\tthis.setAttribute(name,value);\n};\n\nTW_Element.prototype.removeAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot removeAttribute on a raw TW_Element\";\n\t}\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\tdelete this.attributes[name];\n\t}\n};\n\nTW_Element.prototype.appendChild = function(node) {\n\tthis.children.push(node);\n\tnode.parentNode = this;\n};\n\nTW_Element.prototype.insertBefore = function(node,nextSibling) {\n\tif(nextSibling) {\n\t\tvar p = this.children.indexOf(nextSibling);\n\t\tif(p !== -1) {\n\t\t\tthis.children.splice(p,0,node);\n\t\t\tnode.parentNode = this;\n\t\t} else {\n\t\t\tthis.appendChild(node);\n\t\t}\n\t} else {\n\t\tthis.appendChild(node);\n\t}\n};\n\nTW_Element.prototype.removeChild = function(node) {\n\tvar p = this.children.indexOf(node);\n\tif(p !== -1) {\n\t\tthis.children.splice(p,1);\n\t}\n};\n\nTW_Element.prototype.hasChildNodes = function() {\n\treturn !!this.children.length;\n};\n\nObject.defineProperty(TW_Element.prototype, \"childNodes\", {\n\tget: function() {\n\t\treturn this.children;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"firstChild\", {\n\tget: function() {\n\t\treturn this.children[0];\n\t}\n});\n\nTW_Element.prototype.addEventListener = function(type,listener,useCapture) {\n\t// Do nothing\n};\n\nObject.defineProperty(TW_Element.prototype, \"tagName\", {\n\tget: function() {\n\t\treturn this.tag || \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"className\", {\n\tget: function() {\n\t\treturn this.attributes[\"class\"] || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes[\"class\"] = value + \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"value\", {\n\tget: function() {\n\t\treturn this.attributes.value || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes.value = value + \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"outerHTML\", {\n\tget: function() {\n\t\tvar output = [],attr,a,v;\n\t\toutput.push(\"<\",this.tag);\n\t\tif(this.attributes) {\n\t\t\tattr = [];\n\t\t\tfor(a in this.attributes) {\n\t\t\t\tattr.push(a);\n\t\t\t}\n\t\t\tattr.sort();\n\t\t\tfor(a=0; a<attr.length; a++) {\n\t\t\t\tv = this.attributes[attr[a]];\n\t\t\t\tif(v !== undefined) {\n\t\t\t\t\toutput.push(\" \",attr[a],\"=\\\"\",$tw.utils.htmlEncode(v),\"\\\"\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(this._style) {\n\t\t\tvar style = [];\n\t\t\tfor(var s in this._style) {\n\t\t\t\tstyle.push($tw.utils.convertPropertyNameToStyleName(s) + \":\" + this._style[s] + \";\");\n\t\t\t}\n\t\t\tif(style.length > 0) {\n\t\t\t\toutput.push(\" style=\\\"\",style.join(\"\"),\"\\\"\");\n\t\t\t}\n\t\t}\n\t\toutput.push(\">\");\n\t\tif($tw.config.htmlVoidElements.indexOf(this.tag) === -1) {\n\t\t\toutput.push(this.innerHTML);\n\t\t\toutput.push(\"</\",this.tag,\">\");\n\t\t}\n\t\treturn output.join(\"\");\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"innerHTML\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\treturn this.rawHTML;\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tif(node instanceof TW_Element) {\n\t\t\t\t\tb.push(node.outerHTML);\n\t\t\t\t} else if(node instanceof TW_TextNode) {\n\t\t\t\t\tb.push($tw.utils.htmlEncode(node.textContent));\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.isRaw = true;\n\t\tthis.rawHTML = value;\n\t\tthis.rawTextContent = null;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"textInnerHTML\", {\n\tset: function(value) {\n\t\tif(this.isRaw) {\n\t\t\tthis.rawTextContent = value;\n\t\t} else {\n\t\t\tthrow \"Cannot set textInnerHTML of a non-raw TW_Element\";\n\t\t}\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"textContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\tif(this.rawTextContent === null) {\n\t\t\t\treturn \"\";\n\t\t\t} else {\n\t\t\t\treturn this.rawTextContent;\n\t\t\t}\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.textContent);\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.children = [new TW_TextNode(value)];\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\treturn \"\";\n\t\t} else {\n\t\t\tvar b = [],\n\t\t\t\tisBlock = $tw.config.htmlBlockElements.indexOf(this.tag) !== -1;\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\tif(this.tag === \"li\") {\n\t\t\t\tb.push(\"* \");\n\t\t\t}\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.formattedTextContent);\n\t\t\t});\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\treturn b.join(\"\");\n\t\t}\n\t}\n});\n\nvar document = {\n\tsetSequenceNumber: function(value) {\n\t\tsequenceNumber = value;\n\t},\n\tcreateElementNS: function(namespace,tag) {\n\t\treturn new TW_Element(tag,namespace);\n\t},\n\tcreateElement: function(tag) {\n\t\treturn new TW_Element(tag);\n\t},\n\tcreateTextNode: function(text) {\n\t\treturn new TW_TextNode(text);\n\t},\n\tcompatMode: \"CSS1Compat\", // For KaTeX to know that we're not a browser in quirks mode\n\tisTiddlyWikiFakeDom: true\n};\n\nexports.fakeDocument = document;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/utils/filesystem.js": {
"title": "$:/core/modules/utils/filesystem.js",
"text": "/*\\\ntitle: $:/core/modules/utils/filesystem.js\ntype: application/javascript\nmodule-type: utils-node\n\nFile system utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\n/*\nReturn the subdirectories of a path\n*/\nexports.getSubdirectories = function(dirPath) {\n\tif(!$tw.utils.isDirectory(dirPath)) {\n\t\treturn null;\n\t}\n\tvar subdirs = [];\n\t$tw.utils.each(fs.readdirSync(dirPath),function(item) {\n\t\tif($tw.utils.isDirectory(path.resolve(dirPath,item))) {\n\t\t\tsubdirs.push(item);\n\t\t}\n\t});\n\treturn subdirs;\n}\n\n/*\nRecursively (and synchronously) copy a directory and all its content\n*/\nexports.copyDirectory = function(srcPath,dstPath) {\n\t// Remove any trailing path separators\n\tsrcPath = path.resolve($tw.utils.removeTrailingSeparator(srcPath));\n\tdstPath = path.resolve($tw.utils.removeTrailingSeparator(dstPath));\n\t// Check that neither director is within the other\n\tif(srcPath.substring(0,dstPath.length) === dstPath || dstPath.substring(0,srcPath.length) === srcPath) {\n\t\treturn \"Cannot copy nested directories\";\n\t}\n\t// Create the destination directory\n\tvar err = $tw.utils.createDirectory(dstPath);\n\tif(err) {\n\t\treturn err;\n\t}\n\t// Function to copy a folder full of files\n\tvar copy = function(srcPath,dstPath) {\n\t\tvar srcStats = fs.lstatSync(srcPath),\n\t\t\tdstExists = fs.existsSync(dstPath);\n\t\tif(srcStats.isFile()) {\n\t\t\t$tw.utils.copyFile(srcPath,dstPath);\n\t\t} else if(srcStats.isDirectory()) {\n\t\t\tvar items = fs.readdirSync(srcPath);\n\t\t\tfor(var t=0; t<items.length; t++) {\n\t\t\t\tvar item = items[t],\n\t\t\t\t\terr = copy(srcPath + path.sep + item,dstPath + path.sep + item);\n\t\t\t\tif(err) {\n\t\t\t\t\treturn err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tcopy(srcPath,dstPath);\n\treturn null;\n};\n\n/*\nCopy a file\n*/\nvar FILE_BUFFER_LENGTH = 64 * 1024,\n\tfileBuffer;\n\nexports.copyFile = function(srcPath,dstPath) {\n\t// Create buffer if required\n\tif(!fileBuffer) {\n\t\tfileBuffer = Buffer.alloc(FILE_BUFFER_LENGTH);\n\t}\n\t// Create any directories in the destination\n\t$tw.utils.createDirectory(path.dirname(dstPath));\n\t// Copy the file\n\tvar srcFile = fs.openSync(srcPath,\"r\"),\n\t\tdstFile = fs.openSync(dstPath,\"w\"),\n\t\tbytesRead = 1,\n\t\tpos = 0;\n\twhile (bytesRead > 0) {\n\t\tbytesRead = fs.readSync(srcFile,fileBuffer,0,FILE_BUFFER_LENGTH,pos);\n\t\tfs.writeSync(dstFile,fileBuffer,0,bytesRead);\n\t\tpos += bytesRead;\n\t}\n\tfs.closeSync(srcFile);\n\tfs.closeSync(dstFile);\n\treturn null;\n};\n\n/*\nRemove trailing path separator\n*/\nexports.removeTrailingSeparator = function(dirPath) {\n\tvar len = dirPath.length;\n\tif(dirPath.charAt(len-1) === path.sep) {\n\t\tdirPath = dirPath.substr(0,len-1);\n\t}\n\treturn dirPath;\n};\n\n/*\nRecursively create a directory\n*/\nexports.createDirectory = function(dirPath) {\n\tif(dirPath.substr(dirPath.length-1,1) !== path.sep) {\n\t\tdirPath = dirPath + path.sep;\n\t}\n\tvar pos = 1;\n\tpos = dirPath.indexOf(path.sep,pos);\n\twhile(pos !== -1) {\n\t\tvar subDirPath = dirPath.substr(0,pos);\n\t\tif(!$tw.utils.isDirectory(subDirPath)) {\n\t\t\ttry {\n\t\t\t\tfs.mkdirSync(subDirPath);\n\t\t\t} catch(e) {\n\t\t\t\treturn \"Error creating directory '\" + subDirPath + \"'\";\n\t\t\t}\n\t\t}\n\t\tpos = dirPath.indexOf(path.sep,pos + 1);\n\t}\n\treturn null;\n};\n\n/*\nRecursively create directories needed to contain a specified file\n*/\nexports.createFileDirectories = function(filePath) {\n\treturn $tw.utils.createDirectory(path.dirname(filePath));\n};\n\n/*\nRecursively delete a directory\n*/\nexports.deleteDirectory = function(dirPath) {\n\tif(fs.existsSync(dirPath)) {\n\t\tvar entries = fs.readdirSync(dirPath);\n\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\tvar currPath = dirPath + path.sep + entries[entryIndex];\n\t\t\tif(fs.lstatSync(currPath).isDirectory()) {\n\t\t\t\t$tw.utils.deleteDirectory(currPath);\n\t\t\t} else {\n\t\t\t\tfs.unlinkSync(currPath);\n\t\t\t}\n\t\t}\n\tfs.rmdirSync(dirPath);\n\t}\n\treturn null;\n};\n\n/*\nCheck if a path identifies a directory\n*/\nexports.isDirectory = function(dirPath) {\n\treturn fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();\n};\n\n/*\nCheck if a path identifies a directory that is empty\n*/\nexports.isDirectoryEmpty = function(dirPath) {\n\tif(!$tw.utils.isDirectory(dirPath)) {\n\t\treturn false;\n\t}\n\tvar files = fs.readdirSync(dirPath),\n\t\tempty = true;\n\t$tw.utils.each(files,function(file,index) {\n\t\tif(file.charAt(0) !== \".\") {\n\t\t\tempty = false;\n\t\t}\n\t});\n\treturn empty;\n};\n\n/*\nRecursively delete a tree of empty directories\n*/\nexports.deleteEmptyDirs = function(dirpath,callback) {\n\tvar self = this;\n\tfs.readdir(dirpath,function(err,files) {\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\tif(files.length > 0) {\n\t\t\treturn callback(null);\n\t\t}\n\t\tfs.rmdir(dirpath,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.deleteEmptyDirs(path.dirname(dirpath),callback);\n\t\t});\n\t});\n};\n\n/*\nCreate a fileInfo object for saving a tiddler:\n\tfilepath: the absolute path to the file containing the tiddler\n\ttype: the type of the tiddler file on disk (NOT the type of the tiddler)\n\thasMetaFile: true if the file also has a companion .meta file\n\tisEditableFile: true if the tiddler was loaded via non-standard options & marked editable\nOptions include:\n\tdirectory: absolute path of root directory to which we are saving\n\tpathFilters: optional array of filters to be used to generate the base path\n\textFilters: optional array of filters to be used to generate the base path\n\twiki: optional wiki for evaluating the pathFilters,\n\tfileInfo: an existing fileInfo to check against\n\toriginalpath: a preferred filepath if no pathFilters match\n*/\nexports.generateTiddlerFileInfo = function(tiddler,options) {\n\tvar fileInfo = {}, metaExt;\n\t// Propagate the isEditableFile flag\n\tif(options.fileInfo) {\n\t\tfileInfo.isEditableFile = options.fileInfo.isEditableFile || false;\n\t}\n\t// Check if the tiddler has any unsafe fields that can't be expressed in a .tid or .meta file: containing control characters, or leading/trailing whitespace\n\tvar hasUnsafeFields = false;\n\t$tw.utils.each(tiddler.getFieldStrings(),function(value,fieldName) {\n\t\tif(fieldName !== \"text\") {\n\t\t\thasUnsafeFields = hasUnsafeFields || /[\\x00-\\x1F]/mg.test(value);\n\t\t\thasUnsafeFields = hasUnsafeFields || ($tw.utils.trim(value) !== value);\n\t\t}\n\t});\n\t// Check for field values \n\tif(hasUnsafeFields) {\n\t\t// Save as a JSON file\n\t\tfileInfo.type = \"application/json\";\n\t\tfileInfo.hasMetaFile = false;\n\t} else {\n\t\t// Save as a .tid or a text/binary file plus a .meta file\n\t\tvar tiddlerType = tiddler.fields.type || \"text/vnd.tiddlywiki\";\n\t\tif(tiddlerType === \"text/vnd.tiddlywiki\") {\n\t\t\t// Save as a .tid file\n\t\t\tfileInfo.type = \"application/x-tiddler\";\n\t\t\tfileInfo.hasMetaFile = false;\n\t\t} else {\n\t\t\t// Save as a text/binary file and a .meta file\n\t\t\tfileInfo.type = tiddlerType;\n\t\t\tfileInfo.hasMetaFile = true;\n\t\t}\n\t\tif(options.extFilters) {\n\t\t\t// Check for extension override\n\t\t\tmetaExt = $tw.utils.generateTiddlerExtension(tiddler.fields.title,{\n\t\t\t\textFilters: options.extFilters,\n\t\t\t\twiki: options.wiki\n\t\t\t});\n\t\t\tif(metaExt){\n\t\t\t\tif(metaExt === \".tid\") {\n\t\t\t\t\t// Overriding to the .tid extension needs special handling\n\t\t\t\t\tfileInfo.type = \"application/x-tiddler\";\n\t\t\t\t\tfileInfo.hasMetaFile = false;\n\t\t\t\t} else if (metaExt === \".json\") {\n\t\t\t\t\t// Overriding to the .json extension needs special handling\n\t\t\t\t\tfileInfo.type = \"application/json\";\n\t\t\t\t\tfileInfo.hasMetaFile = false;\n\t\t\t\t} else {\n\t\t\t\t\t//If the new type matches a known extention, use that MIME type's encoding\n\t\t\t\t\tvar extInfo = $tw.utils.getFileExtensionInfo(metaExt);\n\t\t\t\t\tfileInfo.type = extInfo ? extInfo.type : null;\n\t\t\t\t\tfileInfo.encoding = $tw.utils.getTypeEncoding(metaExt);\n\t\t\t\t\tfileInfo.hasMetaFile = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Take the file extension from the tiddler content type or metaExt\n\tvar contentTypeInfo = $tw.config.contentTypeInfo[fileInfo.type] || {extension: \"\"};\n\t// Generate the filepath\n\tfileInfo.filepath = $tw.utils.generateTiddlerFilepath(tiddler.fields.title,{\n\t\textension: metaExt || contentTypeInfo.extension,\n\t\tdirectory: options.directory,\n\t\tpathFilters: options.pathFilters,\n\t\twiki: options.wiki,\n\t\tfileInfo: options.fileInfo,\n\t\toriginalpath: options.originalpath\n\t});\n\treturn fileInfo;\n};\n\n/*\nGenerate the file extension for saving a tiddler\nOptions include:\n\textFilters: optional array of filters to be used to generate the extention\n\twiki: optional wiki for evaluating the extFilters\n*/\nexports.generateTiddlerExtension = function(title,options) {\n\tvar self = this,\n\t\textension;\n\t// Check if any of the extFilters applies\n\tif(options.extFilters && options.wiki) { \n\t\t$tw.utils.each(options.extFilters,function(filter) {\n\t\t\tif(!extension) {\n\t\t\t\tvar source = options.wiki.makeTiddlerIterator([title]),\n\t\t\t\t\tresult = options.wiki.filterTiddlers(filter,null,source);\n\t\t\t\tif(result.length > 0) {\n\t\t\t\t\textension = result[0];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn extension;\n};\n\n/*\nGenerate the filepath for saving a tiddler\nOptions include:\n\textension: file extension to be added the finished filepath\n\tdirectory: absolute path of root directory to which we are saving\n\tpathFilters: optional array of filters to be used to generate the base path\n\twiki: optional wiki for evaluating the pathFilters\n\tfileInfo: an existing fileInfo object to check against\n*/\nexports.generateTiddlerFilepath = function(title,options) {\n\tvar self = this,\n\t\tdirectory = options.directory || \"\",\n\t\textension = options.extension || \"\",\n\t\toriginalpath = options.originalpath || \"\",\n\t\tfilepath;\t\n\t// Check if any of the pathFilters applies\n\tif(options.pathFilters && options.wiki) {\n\t\t$tw.utils.each(options.pathFilters,function(filter) {\n\t\t\tif(!filepath) {\n\t\t\t\tvar source = options.wiki.makeTiddlerIterator([title]),\n\t\t\t\t\tresult = options.wiki.filterTiddlers(filter,null,source);\n\t\t\t\tif(result.length > 0) {\n\t\t\t\t\tfilepath = result[0];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\tif(!filepath && originalpath !== \"\") {\n\t\t//Use the originalpath without the extension\n\t\tvar ext = path.extname(originalpath);\n\t\tfilepath = originalpath.substring(0,originalpath.length - ext.length);\n\t} else if(!filepath) {\n\t\tfilepath = title;\n\t\t// If the filepath already ends in the extension then remove it\n\t\tif(filepath.substring(filepath.length - extension.length) === extension) {\n\t\t\tfilepath = filepath.substring(0,filepath.length - extension.length);\n\t\t}\n\t\t// Remove any forward or backward slashes so we don't create directories\n\t\tfilepath = filepath.replace(/\\/|\\\\/g,\"_\");\n\t}\n\t//If the path does not start with \".\" or \"..\" and a path seperator, then\n\tif(!/^\\.{1,2}[/\\\\]/g.test(filepath)) {\n\t\t// Don't let the filename start with any dots because such files are invisible on *nix\n\t\tfilepath = filepath.replace(/^\\.+/g,\"_\");\n\t}\n\t// Remove any characters that can't be used in cross-platform filenames\n\tfilepath = $tw.utils.transliterate(filepath.replace(/<|>|~|\\:|\\\"|\\||\\?|\\*|\\^/g,\"_\"));\n\t// Truncate the filename if it is too long\n\tif(filepath.length > 200) {\n\t\tfilepath = filepath.substr(0,200);\n\t}\n\t// If the resulting filename is blank (eg because the title is just punctuation characters)\n\tif(!filepath) {\n\t\t// ...then just use the character codes of the title\n\t\tfilepath = \"\";\t\n\t\t$tw.utils.each(title.split(\"\"),function(char) {\n\t\t\tif(filepath) {\n\t\t\t\tfilepath += \"-\";\n\t\t\t}\n\t\t\tfilepath += char.charCodeAt(0).toString();\n\t\t});\n\t}\n\t// Add a uniquifier if the file already exists\n\tvar fullPath, oldPath = (options.fileInfo) ? options.fileInfo.filepath : undefined,\n\t\tcount = 0;\n\tdo {\n\t\tfullPath = path.resolve(directory,filepath + (count ? \"_\" + count : \"\") + extension);\n\t\tif(oldPath && oldPath == fullPath) {\n\t\t\tbreak;\n\t\t}\n\t\tcount++;\n\t} while(fs.existsSync(fullPath));\n\t// If the last write failed with an error, or if path does not start with:\n\t//\tthe resolved options.directory, the resolved wikiPath directory, or the wikiTiddlersPath directory, \n\t//\tthen encodeURIComponent() and resolve to tiddler directory\n\tvar newPath = fullPath,\n\t\tencode = (options.fileInfo || {writeError: false}).writeError == true;\n\tif(!encode){\n\t\tencode = !(fullPath.indexOf(path.resolve(directory)) == 0 ||\n\t\t\tfullPath.indexOf(path.resolve($tw.boot.wikiPath)) == 0 ||\n\t\t\tfullPath.indexOf($tw.boot.wikiTiddlersPath) == 0);\n\t\t}\n\tif(encode){\n\t\tfullPath = path.resolve(directory, encodeURIComponent(fullPath));\n\t}\n\t// Call hook to allow plugins to modify the final path\n\tfullPath = $tw.hooks.invokeHook(\"th-make-tiddler-path\", newPath, fullPath);\n\t// Return the full path to the file\n\treturn fullPath;\n};\n\n/*\nSave a tiddler to a file described by the fileInfo:\n\tfilepath: the absolute path to the file containing the tiddler\n\ttype: the type of the tiddler file (NOT the type of the tiddler)\n\thasMetaFile: true if the file also has a companion .meta file\n*/\nexports.saveTiddlerToFile = function(tiddler,fileInfo,callback) {\n\t$tw.utils.createDirectory(path.dirname(fileInfo.filepath));\n\tif(fileInfo.hasMetaFile) {\n\t\t// Save the tiddler as a separate body and meta file\n\t\tvar typeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/plain\"] || {encoding: \"utf8\"};\n\t\tfs.writeFile(fileInfo.filepath,tiddler.fields.text,typeInfo.encoding,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tfs.writeFile(fileInfo.filepath + \".meta\",tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}),\"utf8\",callback);\n\t\t});\n\t} else {\n\t\t// Save the tiddler as a self contained templated file\n\t\tif(fileInfo.type === \"application/x-tiddler\") {\n\t\t\tfs.writeFile(fileInfo.filepath,tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}) + (!!tiddler.fields.text ? \"\\n\\n\" + tiddler.fields.text : \"\"),\"utf8\",callback);\n\t\t} else {\n\t\t\tfs.writeFile(fileInfo.filepath,JSON.stringify([tiddler.getFieldStrings({exclude: [\"bag\"]})],null,$tw.config.preferences.jsonSpaces),\"utf8\",callback);\n\t\t}\n\t}\n};\n\n/*\nSave a tiddler to a file described by the fileInfo:\n\tfilepath: the absolute path to the file containing the tiddler\n\ttype: the type of the tiddler file (NOT the type of the tiddler)\n\thasMetaFile: true if the file also has a companion .meta file\n*/\nexports.saveTiddlerToFileSync = function(tiddler,fileInfo) {\n\t$tw.utils.createDirectory(path.dirname(fileInfo.filepath));\n\tif(fileInfo.hasMetaFile) {\n\t\t// Save the tiddler as a separate body and meta file\n\t\tvar typeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/plain\"] || {encoding: \"utf8\"};\n\t\tfs.writeFileSync(fileInfo.filepath,tiddler.fields.text,typeInfo.encoding);\n\t\tfs.writeFileSync(fileInfo.filepath + \".meta\",tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}),\"utf8\");\n\t} else {\n\t\t// Save the tiddler as a self contained templated file\n\t\tif(fileInfo.type === \"application/x-tiddler\") {\n\t\t\tfs.writeFileSync(fileInfo.filepath,tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}) + (!!tiddler.fields.text ? \"\\n\\n\" + tiddler.fields.text : \"\"),\"utf8\");\n\t\t} else {\n\t\t\tfs.writeFileSync(fileInfo.filepath,JSON.stringify([tiddler.getFieldStrings({exclude: [\"bag\"]})],null,$tw.config.preferences.jsonSpaces),\"utf8\");\n\t\t}\n\t}\n};\n\n/*\nDelete a file described by the fileInfo if it exits\n*/\nexports.deleteTiddlerFile = function(fileInfo, callback) {\n\t//Only attempt to delete files that exist on disk\n\tif(!fileInfo.filepath || !fs.existsSync(fileInfo.filepath)) {\n\t\treturn callback(null);\n\t}\n\t// Delete the file\n\tfs.unlink(fileInfo.filepath,function(err) {\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\t\n\t\t// Delete the metafile if present\n\t\tif(fileInfo.hasMetaFile && fs.existsSync(fileInfo.filepath + \".meta\")) {\n\t\t\tfs.unlink(fileInfo.filepath + \".meta\",function(err) {\n\t\t\t\tif(err) {\n\t\t\t\t\treturn callback(err);\n\t\t\t\t}\n\t\t\t\treturn $tw.utils.deleteEmptyDirs(path.dirname(fileInfo.filepath),callback);\n\t\t\t});\n\t\t} else {\n\t\t\treturn $tw.utils.deleteEmptyDirs(path.dirname(fileInfo.filepath),callback);\n\t\t}\n\t});\n};\n\n/*\nCleanup old files on disk, by comparing the options values:\n\tadaptorInfo from $tw.syncer.tiddlerInfo\n\tbootInfo from $tw.boot.files\n*/\nexports.cleanupTiddlerFiles = function(options, callback) {\n\tvar adaptorInfo = options.adaptorInfo || {},\n\tbootInfo = options.bootInfo || {},\n\ttitle = options.title || \"undefined\";\n\tif(adaptorInfo.filepath && bootInfo.filepath && adaptorInfo.filepath !== bootInfo.filepath) {\n\t\treturn $tw.utils.deleteTiddlerFile(adaptorInfo, function(err){\n\t\t\tif(err) {\n\t\t\t\tif ((err.code == \"EPERM\" || err.code == \"EACCES\") && err.syscall == \"unlink\") {\n\t\t\t\t\t// Error deleting the previous file on disk, should fail gracefully\n\t\t\t\t\t$tw.syncer.displayError(\"Server desynchronized. Error cleaning up previous file for tiddler: \"+title, err);\n\t\t\t\t\treturn callback(null);\n\t\t\t\t} else {\n\t\t\t\t\treturn callback(err);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn callback(null);\n\t\t});\n\t} else {\n\t\treturn callback(null);\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils-node"
},
"$:/core/modules/utils/linkedlist.js": {
"title": "$:/core/modules/utils/linkedlist.js",
"text": "/*\\\nmodule-type: utils\ntitle: $:/core/modules/utils/linkedlist.js\ntype: application/javascript\n\nThis is a doubly-linked indexed list intended for manipulation, particularly\npushTop, which it does with significantly better performance than an array.\n\n\\*/\n(function(){\n\nfunction LinkedList() {\n\tthis.clear();\n};\n\nLinkedList.prototype.clear = function() {\n\tthis.index = Object.create(null);\n\t// LinkedList performs the duty of both the head and tail node\n\tthis.next = this;\n\tthis.prev = this;\n\tthis.length = 0;\n};\n\nLinkedList.prototype.remove = function(value) {\n\tif($tw.utils.isArray(value)) {\n\t\tfor(var t=0; t<value.length; t++) {\n\t\t\t_removeOne(this,value[t]);\n\t\t}\n\t} else {\n\t\t_removeOne(this,value);\n\t}\n};\n\nLinkedList.prototype.push = function(/* values */) {\n\tfor(var i = 0; i < arguments.length; i++) {\n\t\tvar value = arguments[i];\n\t\tvar node = {value: value};\n\t\tvar preexistingNode = this.index[value];\n\t\t_linkToEnd(this,node);\n\t\tif(preexistingNode) {\n\t\t\t// We want to keep pointing to the first instance, but we want\n\t\t\t// to have that instance (or chain of instances) point to the\n\t\t\t// new one.\n\t\t\twhile (preexistingNode.copy) {\n\t\t\t\tpreexistingNode = preexistingNode.copy;\n\t\t\t}\n\t\t\tpreexistingNode.copy = node;\n\t\t} else {\n\t\t\tthis.index[value] = node;\n\t\t}\n\t}\n};\n\nLinkedList.prototype.pushTop = function(value) {\n\tif($tw.utils.isArray(value)) {\n\t\tfor(var t=0; t<value.length; t++) {\n\t\t\t_removeOne(this,value[t]);\n\t\t}\n\t\tthis.push.apply(this,value);\n\t} else {\n\t\tvar node = _removeOne(this,value);\n\t\tif(!node) {\n\t\t\tnode = {value: value};\n\t\t\tthis.index[value] = node;\n\t\t} else {\n\t\t\t// Put this node at the end of the copy chain.\n\t\t\tvar preexistingNode = node;\n\t\t\twhile(preexistingNode.copy) {\n\t\t\t\tpreexistingNode = preexistingNode.copy;\n\t\t\t}\n\t\t\t// The order of these three statements is important,\n\t\t\t// because sometimes preexistingNode == node.\n\t\t\tpreexistingNode.copy = node;\n\t\t\tthis.index[value] = node.copy;\n\t\t\tnode.copy = undefined;\n\t\t}\n\t\t_linkToEnd(this,node);\n\t}\n};\n\nLinkedList.prototype.each = function(callback) {\n\tfor(var ptr = this.next; ptr !== this; ptr = ptr.next) {\n\t\tcallback(ptr.value);\n\t}\n};\n\nLinkedList.prototype.toArray = function() {\n\tvar output = [];\n\tfor(var ptr = this.next; ptr !== this; ptr = ptr.next) {\n\t\toutput.push(ptr.value);\n\t}\n\treturn output;\n};\n\nfunction _removeOne(list,value) {\n\tvar node = list.index[value];\n\tif(node) {\n\t\tnode.prev.next = node.next;\n\t\tnode.next.prev = node.prev;\n\t\tlist.length -= 1;\n\t\t// Point index to the next instance of the same value, maybe nothing.\n\t\tlist.index[value] = node.copy;\n\t}\n\treturn node;\n};\n\nfunction _linkToEnd(list,node) {\n\t// Sticks the given node onto the end of the list.\n\tlist.prev.next = node;\n\tnode.prev = list.prev;\n\tlist.prev = node;\n\tnode.next = list;\n\tlist.length += 1;\n};\n\nexports.LinkedList = LinkedList;\n\n})();\n",
"module-type": "utils",
"type": "application/javascript"
},
"$:/core/modules/utils/logger.js": {
"title": "$:/core/modules/utils/logger.js",
"text": "/*\\\ntitle: $:/core/modules/utils/logger.js\ntype: application/javascript\nmodule-type: utils\n\nA basic logging implementation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ALERT_TAG = \"$:/tags/Alert\";\n\n/*\nMake a new logger\n*/\nfunction Logger(componentName,options) {\n\toptions = options || {};\n\tthis.componentName = componentName || \"\";\n\tthis.colour = options.colour || \"white\";\n\tthis.enable = \"enable\" in options ? options.enable : true;\n\tthis.save = \"save\" in options ? options.save : true;\n\tthis.saveLimit = options.saveLimit || 100 * 1024;\n\tthis.saveBufferLogger = this;\n\tthis.buffer = \"\";\n\tthis.alertCount = 0;\n}\n\nLogger.prototype.setSaveBuffer = function(logger) {\n\tthis.saveBufferLogger = logger;\n};\n\n/*\nLog a message\n*/\nLogger.prototype.log = function(/* args */) {\n\tvar self = this;\n\tif(this.enable) {\n\t\tif(this.saveBufferLogger.save) {\n\t\t\tthis.saveBufferLogger.buffer += $tw.utils.formatDateString(new Date(),\"YYYY MM DD 0hh:0mm:0ss.0XXX\") + \":\";\n\t\t\t$tw.utils.each(Array.prototype.slice.call(arguments,0),function(arg,index) {\n\t\t\t\tself.saveBufferLogger.buffer += \" \" + arg;\n\t\t\t});\n\t\t\tthis.saveBufferLogger.buffer += \"\\n\";\n\t\t\tthis.saveBufferLogger.buffer = this.saveBufferLogger.buffer.slice(-this.saveBufferLogger.saveLimit);\t\t\t\n\t\t}\n\t\tif(console !== undefined && console.log !== undefined) {\n\t\t\treturn Function.apply.call(console.log, console, [$tw.utils.terminalColour(this.colour),this.componentName + \":\"].concat(Array.prototype.slice.call(arguments,0)).concat($tw.utils.terminalColour()));\n\t\t}\n\t} \n};\n\n/*\nRead the message buffer\n*/\nLogger.prototype.getBuffer = function() {\n\treturn this.saveBufferLogger.buffer;\n};\n\n/*\nLog a structure as a table\n*/\nLogger.prototype.table = function(value) {\n\t(console.table || console.log)(value);\n};\n\n/*\nAlert a message\n*/\nLogger.prototype.alert = function(/* args */) {\n\tif(this.enable) {\n\t\t// Prepare the text of the alert\n\t\tvar text = Array.prototype.join.call(arguments,\" \");\n\t\t// Create alert tiddlers in the browser\n\t\tif($tw.browser) {\n\t\t\t// Check if there is an existing alert with the same text and the same component\n\t\t\tvar existingAlerts = $tw.wiki.getTiddlersWithTag(ALERT_TAG),\n\t\t\t\talertFields,\n\t\t\t\texistingCount,\n\t\t\t\tself = this;\n\t\t\t$tw.utils.each(existingAlerts,function(title) {\n\t\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\t\tif(tiddler.fields.text === text && tiddler.fields.component === self.componentName && tiddler.fields.modified && (!alertFields || tiddler.fields.modified < alertFields.modified)) {\n\t\t\t\t\t\talertFields = $tw.utils.extend({},tiddler.fields);\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(alertFields) {\n\t\t\t\texistingCount = alertFields.count || 1;\n\t\t\t} else {\n\t\t\t\talertFields = {\n\t\t\t\t\ttitle: $tw.wiki.generateNewTitle(\"$:/temp/alerts/alert\",{prefix: \"\"}),\n\t\t\t\t\ttext: text,\n\t\t\t\t\ttags: [ALERT_TAG],\n\t\t\t\t\tcomponent: this.componentName\n\t\t\t\t};\n\t\t\t\texistingCount = 0;\n\t\t\t\tthis.alertCount += 1;\n\t\t\t}\n\t\t\talertFields.modified = new Date();\n\t\t\tif(++existingCount > 1) {\n\t\t\t\talertFields.count = existingCount;\n\t\t\t} else {\n\t\t\t\talertFields.count = undefined;\n\t\t\t}\n\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler(alertFields));\n\t\t\t// Log the alert as well\n\t\t\tthis.log.apply(this,Array.prototype.slice.call(arguments,0));\n\t\t} else {\n\t\t\t// Print an orange message to the console if not in the browser\n\t\t\tconsole.error(\"\\x1b[1;33m\" + text + \"\\x1b[0m\");\n\t\t}\t\t\n\t}\n};\n\n/*\nClear outstanding alerts\n*/\nLogger.prototype.clearAlerts = function() {\n\tvar self = this;\n\tif($tw.browser && this.alertCount > 0) {\n\t\t$tw.utils.each($tw.wiki.getTiddlersWithTag(ALERT_TAG),function(title) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\tif(tiddler.fields.component === self.componentName) {\n\t\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t\t}\n\t\t});\n\t\tthis.alertCount = 0;\n\t}\n};\n\nexports.Logger = Logger;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/parsetree.js": {
"title": "$:/core/modules/utils/parsetree.js",
"text": "/*\\\ntitle: $:/core/modules/utils/parsetree.js\ntype: application/javascript\nmodule-type: utils\n\nParse tree utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.addAttributeToParseTreeNode = function(node,name,value) {\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[name] = {type: \"string\", value: value};\n};\n\nexports.getAttributeValueFromParseTreeNode = function(node,name,defaultValue) {\n\tif(node.attributes && node.attributes[name] && node.attributes[name].value !== undefined) {\n\t\treturn node.attributes[name].value;\n\t}\n\treturn defaultValue;\n};\n\nexports.addClassToParseTreeNode = function(node,classString) {\n\tvar classes = [];\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[\"class\"] = node.attributes[\"class\"] || {type: \"string\", value: \"\"};\n\tif(node.attributes[\"class\"].type === \"string\") {\n\t\tif(node.attributes[\"class\"].value !== \"\") {\n\t\t\tclasses = node.attributes[\"class\"].value.split(\" \");\n\t\t}\n\t\tif(classString !== \"\") {\n\t\t\t$tw.utils.pushTop(classes,classString.split(\" \"));\n\t\t}\n\t\tnode.attributes[\"class\"].value = classes.join(\" \");\n\t}\n};\n\nexports.addStyleToParseTreeNode = function(node,name,value) {\n\t\tnode.attributes = node.attributes || {};\n\t\tnode.attributes.style = node.attributes.style || {type: \"string\", value: \"\"};\n\t\tif(node.attributes.style.type === \"string\") {\n\t\t\tnode.attributes.style.value += name + \":\" + value + \";\";\n\t\t}\n};\n\nexports.findParseTreeNode = function(nodeArray,search) {\n\tfor(var t=0; t<nodeArray.length; t++) {\n\t\tif(nodeArray[t].type === search.type && nodeArray[t].tag === search.tag) {\n\t\t\treturn nodeArray[t];\n\t\t}\n\t}\n\treturn undefined;\n};\n\n/*\nHelper to get the text of a parse tree node or array of nodes\n*/\nexports.getParseTreeText = function getParseTreeText(tree) {\n\tvar output = [];\n\tif($tw.utils.isArray(tree)) {\n\t\t$tw.utils.each(tree,function(node) {\n\t\t\toutput.push(getParseTreeText(node));\n\t\t});\n\t} else {\n\t\tif(tree.type === \"text\") {\n\t\t\toutput.push(tree.text);\n\t\t}\n\t\tif(tree.children) {\n\t\t\treturn getParseTreeText(tree.children);\n\t\t}\n\t}\n\treturn output.join(\"\");\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/performance.js": {
"title": "$:/core/modules/utils/performance.js",
"text": "/*\\\ntitle: $:/core/modules/utils/performance.js\ntype: application/javascript\nmodule-type: global\n\nPerformance measurement.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Performance(enabled) {\n\tthis.enabled = !!enabled;\n\tthis.measures = {}; // Hashmap by measurement name of {time:, invocations:}\n\tthis.logger = new $tw.utils.Logger(\"performance\");\n\tthis.showGreeting();\n}\n\nPerformance.prototype.showGreeting = function() {\n\tif($tw.browser) {\n\t\tthis.logger.log(\"Execute $tw.perf.log(); to see filter execution timings\");\t\t\n\t}\n};\n\n/*\nWrap performance reporting around a top level function\n*/\nPerformance.prototype.report = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments);\n\t\t\tself.logger.log(name + \": \" + $tw.utils.timer(startTime).toFixed(2) + \"ms\");\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\nPerformance.prototype.log = function() {\n\tvar self = this,\n\t\ttotalTime = 0,\n\t\torderedMeasures = Object.keys(this.measures).sort(function(a,b) {\n\t\t\tif(self.measures[a].time > self.measures[b].time) {\n\t\t\t\treturn -1;\n\t\t\t} else if (self.measures[a].time < self.measures[b].time) {\n\t\t\t\treturn + 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t});\n\t$tw.utils.each(orderedMeasures,function(name) {\n\t\ttotalTime += self.measures[name].time;\n\t});\n\tvar results = []\n\t$tw.utils.each(orderedMeasures,function(name) {\n\t\tvar measure = self.measures[name];\n\t\tresults.push({name: name,invocations: measure.invocations, avgTime: measure.time / measure.invocations, totalTime: measure.time, percentTime: (measure.time / totalTime) * 100})\n\t});\n\tself.logger.table(results);\n};\n\n/*\nWrap performance measurements around a subfunction\n*/\nPerformance.prototype.measure = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments);\n\t\t\tif(!(name in self.measures)) {\n\t\t\t\tself.measures[name] = {time: 0, invocations: 0};\n\t\t\t}\n\t\t\tself.measures[name].time += $tw.utils.timer(startTime);\n\t\t\tself.measures[name].invocations++;\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\nexports.Performance = Performance;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/utils/pluginmaker.js": {
"title": "$:/core/modules/utils/pluginmaker.js",
"text": "/*\\\ntitle: $:/core/modules/utils/pluginmaker.js\ntype: application/javascript\nmodule-type: utils\n\nA quick and dirty way to pack up plugins within the browser.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRepack a plugin, and then delete any non-shadow payload tiddlers\n*/\nexports.repackPlugin = function(title,additionalTiddlers,excludeTiddlers) {\n\tadditionalTiddlers = additionalTiddlers || [];\n\texcludeTiddlers = excludeTiddlers || [];\n\t// Get the plugin tiddler\n\tvar pluginTiddler = $tw.wiki.getTiddler(title);\n\tif(!pluginTiddler) {\n\t\tthrow \"No such tiddler as \" + title;\n\t}\n\t// Extract the JSON\n\tvar jsonPluginTiddler;\n\ttry {\n\t\tjsonPluginTiddler = JSON.parse(pluginTiddler.fields.text);\n\t} catch(e) {\n\t\tthrow \"Cannot parse plugin tiddler \" + title + \"\\n\" + $tw.language.getString(\"Error/Caption\") + \": \" + e;\n\t}\n\t// Get the list of tiddlers\n\tvar tiddlers = Object.keys(jsonPluginTiddler.tiddlers);\n\t// Add the additional tiddlers\n\t$tw.utils.pushTop(tiddlers,additionalTiddlers);\n\t// Remove any excluded tiddlers\n\tfor(var t=tiddlers.length-1; t>=0; t--) {\n\t\tif(excludeTiddlers.indexOf(tiddlers[t]) !== -1) {\n\t\t\ttiddlers.splice(t,1);\n\t\t}\n\t}\n\t// Pack up the tiddlers into a block of JSON\n\tvar plugins = {};\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = $tw.wiki.getTiddler(title),\n\t\t\tfields = {};\n\t\t$tw.utils.each(tiddler.fields,function (value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\tplugins[title] = fields;\n\t});\n\t// Retrieve and bump the version number\n\tvar pluginVersion = $tw.utils.parseVersion(pluginTiddler.getFieldString(\"version\") || \"0.0.0\") || {\n\t\t\tmajor: \"0\",\n\t\t\tminor: \"0\",\n\t\t\tpatch: \"0\"\n\t\t};\n\tpluginVersion.patch++;\n\tvar version = pluginVersion.major + \".\" + pluginVersion.minor + \".\" + pluginVersion.patch;\n\tif(pluginVersion.prerelease) {\n\t\tversion += \"-\" + pluginVersion.prerelease;\n\t}\n\tif(pluginVersion.build) {\n\t\tversion += \"+\" + pluginVersion.build;\n\t}\n\t// Save the tiddler\n\t$tw.wiki.addTiddler(new $tw.Tiddler(pluginTiddler,{text: JSON.stringify({tiddlers: plugins},null,4), version: version}));\n\t// Delete any non-shadow constituent tiddlers\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tif($tw.wiki.tiddlerExists(title)) {\n\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t}\n\t});\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t// Return a heartwarming confirmation\n\treturn \"Plugin \" + title + \" successfully saved\";\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/transliterate.js": {
"title": "$:/core/modules/utils/transliterate.js",
"text": "/*\\\ntitle: $:/core/modules/utils/transliterate.js\ntype: application/javascript\nmodule-type: utils\n\nTransliteration static utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nTransliterate string to ASCII\n\n(Some pairs taken from http://semplicewebsites.com/removing-accents-javascript)\n*/\nexports.transliterationPairs = {\n\t\"Á\":\"A\",\n\t\"Ă\":\"A\",\n\t\"Ắ\":\"A\",\n\t\"Ặ\":\"A\",\n\t\"Ằ\":\"A\",\n\t\"Ẳ\":\"A\",\n\t\"Ẵ\":\"A\",\n\t\"Ǎ\":\"A\",\n\t\"Â\":\"A\",\n\t\"Ấ\":\"A\",\n\t\"Ậ\":\"A\",\n\t\"Ầ\":\"A\",\n\t\"Ẩ\":\"A\",\n\t\"Ẫ\":\"A\",\n\t\"Ä\":\"A\",\n\t\"Ǟ\":\"A\",\n\t\"Ȧ\":\"A\",\n\t\"Ǡ\":\"A\",\n\t\"Ạ\":\"A\",\n\t\"Ȁ\":\"A\",\n\t\"À\":\"A\",\n\t\"Ả\":\"A\",\n\t\"Ȃ\":\"A\",\n\t\"Ā\":\"A\",\n\t\"Ą\":\"A\",\n\t\"Å\":\"A\",\n\t\"Ǻ\":\"A\",\n\t\"Ḁ\":\"A\",\n\t\"Ⱥ\":\"A\",\n\t\"Ã\":\"A\",\n\t\"Ꜳ\":\"AA\",\n\t\"Æ\":\"AE\",\n\t\"Ǽ\":\"AE\",\n\t\"Ǣ\":\"AE\",\n\t\"Ꜵ\":\"AO\",\n\t\"Ꜷ\":\"AU\",\n\t\"Ꜹ\":\"AV\",\n\t\"Ꜻ\":\"AV\",\n\t\"Ꜽ\":\"AY\",\n\t\"Ḃ\":\"B\",\n\t\"Ḅ\":\"B\",\n\t\"Ɓ\":\"B\",\n\t\"Ḇ\":\"B\",\n\t\"Ƀ\":\"B\",\n\t\"Ƃ\":\"B\",\n\t\"Ć\":\"C\",\n\t\"Č\":\"C\",\n\t\"Ç\":\"C\",\n\t\"Ḉ\":\"C\",\n\t\"Ĉ\":\"C\",\n\t\"Ċ\":\"C\",\n\t\"Ƈ\":\"C\",\n\t\"Ȼ\":\"C\",\n\t\"Ď\":\"D\",\n\t\"Ḑ\":\"D\",\n\t\"Ḓ\":\"D\",\n\t\"Ḋ\":\"D\",\n\t\"Ḍ\":\"D\",\n\t\"Ɗ\":\"D\",\n\t\"Ḏ\":\"D\",\n\t\"Dz\":\"D\",\n\t\"Dž\":\"D\",\n\t\"Đ\":\"D\",\n\t\"Ƌ\":\"D\",\n\t\"DZ\":\"DZ\",\n\t\"DŽ\":\"DZ\",\n\t\"É\":\"E\",\n\t\"Ĕ\":\"E\",\n\t\"Ě\":\"E\",\n\t\"Ȩ\":\"E\",\n\t\"Ḝ\":\"E\",\n\t\"Ê\":\"E\",\n\t\"Ế\":\"E\",\n\t\"Ệ\":\"E\",\n\t\"Ề\":\"E\",\n\t\"Ể\":\"E\",\n\t\"Ễ\":\"E\",\n\t\"Ḙ\":\"E\",\n\t\"Ë\":\"E\",\n\t\"Ė\":\"E\",\n\t\"Ẹ\":\"E\",\n\t\"Ȅ\":\"E\",\n\t\"È\":\"E\",\n\t\"Ẻ\":\"E\",\n\t\"Ȇ\":\"E\",\n\t\"Ē\":\"E\",\n\t\"Ḗ\":\"E\",\n\t\"Ḕ\":\"E\",\n\t\"Ę\":\"E\",\n\t\"Ɇ\":\"E\",\n\t\"Ẽ\":\"E\",\n\t\"Ḛ\":\"E\",\n\t\"Ꝫ\":\"ET\",\n\t\"Ḟ\":\"F\",\n\t\"Ƒ\":\"F\",\n\t\"Ǵ\":\"G\",\n\t\"Ğ\":\"G\",\n\t\"Ǧ\":\"G\",\n\t\"Ģ\":\"G\",\n\t\"Ĝ\":\"G\",\n\t\"Ġ\":\"G\",\n\t\"Ɠ\":\"G\",\n\t\"Ḡ\":\"G\",\n\t\"Ǥ\":\"G\",\n\t\"Ḫ\":\"H\",\n\t\"Ȟ\":\"H\",\n\t\"Ḩ\":\"H\",\n\t\"Ĥ\":\"H\",\n\t\"Ⱨ\":\"H\",\n\t\"Ḧ\":\"H\",\n\t\"Ḣ\":\"H\",\n\t\"Ḥ\":\"H\",\n\t\"Ħ\":\"H\",\n\t\"Í\":\"I\",\n\t\"Ĭ\":\"I\",\n\t\"Ǐ\":\"I\",\n\t\"Î\":\"I\",\n\t\"Ï\":\"I\",\n\t\"Ḯ\":\"I\",\n\t\"İ\":\"I\",\n\t\"Ị\":\"I\",\n\t\"Ȉ\":\"I\",\n\t\"Ì\":\"I\",\n\t\"Ỉ\":\"I\",\n\t\"Ȋ\":\"I\",\n\t\"Ī\":\"I\",\n\t\"Į\":\"I\",\n\t\"Ɨ\":\"I\",\n\t\"Ĩ\":\"I\",\n\t\"Ḭ\":\"I\",\n\t\"Ꝺ\":\"D\",\n\t\"Ꝼ\":\"F\",\n\t\"Ᵹ\":\"G\",\n\t\"Ꞃ\":\"R\",\n\t\"Ꞅ\":\"S\",\n\t\"Ꞇ\":\"T\",\n\t\"Ꝭ\":\"IS\",\n\t\"Ĵ\":\"J\",\n\t\"Ɉ\":\"J\",\n\t\"Ḱ\":\"K\",\n\t\"Ǩ\":\"K\",\n\t\"Ķ\":\"K\",\n\t\"Ⱪ\":\"K\",\n\t\"Ꝃ\":\"K\",\n\t\"Ḳ\":\"K\",\n\t\"Ƙ\":\"K\",\n\t\"Ḵ\":\"K\",\n\t\"Ꝁ\":\"K\",\n\t\"Ꝅ\":\"K\",\n\t\"Ĺ\":\"L\",\n\t\"Ƚ\":\"L\",\n\t\"Ľ\":\"L\",\n\t\"Ļ\":\"L\",\n\t\"Ḽ\":\"L\",\n\t\"Ḷ\":\"L\",\n\t\"Ḹ\":\"L\",\n\t\"Ⱡ\":\"L\",\n\t\"Ꝉ\":\"L\",\n\t\"Ḻ\":\"L\",\n\t\"Ŀ\":\"L\",\n\t\"Ɫ\":\"L\",\n\t\"Lj\":\"L\",\n\t\"Ł\":\"L\",\n\t\"LJ\":\"LJ\",\n\t\"Ḿ\":\"M\",\n\t\"Ṁ\":\"M\",\n\t\"Ṃ\":\"M\",\n\t\"Ɱ\":\"M\",\n\t\"Ń\":\"N\",\n\t\"Ň\":\"N\",\n\t\"Ņ\":\"N\",\n\t\"Ṋ\":\"N\",\n\t\"Ṅ\":\"N\",\n\t\"Ṇ\":\"N\",\n\t\"Ǹ\":\"N\",\n\t\"Ɲ\":\"N\",\n\t\"Ṉ\":\"N\",\n\t\"Ƞ\":\"N\",\n\t\"Nj\":\"N\",\n\t\"Ñ\":\"N\",\n\t\"NJ\":\"NJ\",\n\t\"Ó\":\"O\",\n\t\"Ŏ\":\"O\",\n\t\"Ǒ\":\"O\",\n\t\"Ô\":\"O\",\n\t\"Ố\":\"O\",\n\t\"Ộ\":\"O\",\n\t\"Ồ\":\"O\",\n\t\"Ổ\":\"O\",\n\t\"Ỗ\":\"O\",\n\t\"Ö\":\"O\",\n\t\"Ȫ\":\"O\",\n\t\"Ȯ\":\"O\",\n\t\"Ȱ\":\"O\",\n\t\"Ọ\":\"O\",\n\t\"Ő\":\"O\",\n\t\"Ȍ\":\"O\",\n\t\"Ò\":\"O\",\n\t\"Ỏ\":\"O\",\n\t\"Ơ\":\"O\",\n\t\"Ớ\":\"O\",\n\t\"Ợ\":\"O\",\n\t\"Ờ\":\"O\",\n\t\"Ở\":\"O\",\n\t\"Ỡ\":\"O\",\n\t\"Ȏ\":\"O\",\n\t\"Ꝋ\":\"O\",\n\t\"Ꝍ\":\"O\",\n\t\"Ō\":\"O\",\n\t\"Ṓ\":\"O\",\n\t\"Ṑ\":\"O\",\n\t\"Ɵ\":\"O\",\n\t\"Ǫ\":\"O\",\n\t\"Ǭ\":\"O\",\n\t\"Ø\":\"O\",\n\t\"Ǿ\":\"O\",\n\t\"Õ\":\"O\",\n\t\"Ṍ\":\"O\",\n\t\"Ṏ\":\"O\",\n\t\"Ȭ\":\"O\",\n\t\"Ƣ\":\"OI\",\n\t\"Ꝏ\":\"OO\",\n\t\"Ɛ\":\"E\",\n\t\"Ɔ\":\"O\",\n\t\"Ȣ\":\"OU\",\n\t\"Ṕ\":\"P\",\n\t\"Ṗ\":\"P\",\n\t\"Ꝓ\":\"P\",\n\t\"Ƥ\":\"P\",\n\t\"Ꝕ\":\"P\",\n\t\"Ᵽ\":\"P\",\n\t\"Ꝑ\":\"P\",\n\t\"Ꝙ\":\"Q\",\n\t\"Ꝗ\":\"Q\",\n\t\"Ŕ\":\"R\",\n\t\"Ř\":\"R\",\n\t\"Ŗ\":\"R\",\n\t\"Ṙ\":\"R\",\n\t\"Ṛ\":\"R\",\n\t\"Ṝ\":\"R\",\n\t\"Ȑ\":\"R\",\n\t\"Ȓ\":\"R\",\n\t\"Ṟ\":\"R\",\n\t\"Ɍ\":\"R\",\n\t\"Ɽ\":\"R\",\n\t\"Ꜿ\":\"C\",\n\t\"Ǝ\":\"E\",\n\t\"Ś\":\"S\",\n\t\"Ṥ\":\"S\",\n\t\"Š\":\"S\",\n\t\"Ṧ\":\"S\",\n\t\"Ş\":\"S\",\n\t\"Ŝ\":\"S\",\n\t\"Ș\":\"S\",\n\t\"Ṡ\":\"S\",\n\t\"Ṣ\":\"S\",\n\t\"Ṩ\":\"S\",\n\t\"Ť\":\"T\",\n\t\"Ţ\":\"T\",\n\t\"Ṱ\":\"T\",\n\t\"Ț\":\"T\",\n\t\"Ⱦ\":\"T\",\n\t\"Ṫ\":\"T\",\n\t\"Ṭ\":\"T\",\n\t\"Ƭ\":\"T\",\n\t\"Ṯ\":\"T\",\n\t\"Ʈ\":\"T\",\n\t\"Ŧ\":\"T\",\n\t\"Ɐ\":\"A\",\n\t\"Ꞁ\":\"L\",\n\t\"Ɯ\":\"M\",\n\t\"Ʌ\":\"V\",\n\t\"Ꜩ\":\"TZ\",\n\t\"Ú\":\"U\",\n\t\"Ŭ\":\"U\",\n\t\"Ǔ\":\"U\",\n\t\"Û\":\"U\",\n\t\"Ṷ\":\"U\",\n\t\"Ü\":\"U\",\n\t\"Ǘ\":\"U\",\n\t\"Ǚ\":\"U\",\n\t\"Ǜ\":\"U\",\n\t\"Ǖ\":\"U\",\n\t\"Ṳ\":\"U\",\n\t\"Ụ\":\"U\",\n\t\"Ű\":\"U\",\n\t\"Ȕ\":\"U\",\n\t\"Ù\":\"U\",\n\t\"Ủ\":\"U\",\n\t\"Ư\":\"U\",\n\t\"Ứ\":\"U\",\n\t\"Ự\":\"U\",\n\t\"Ừ\":\"U\",\n\t\"Ử\":\"U\",\n\t\"Ữ\":\"U\",\n\t\"Ȗ\":\"U\",\n\t\"Ū\":\"U\",\n\t\"Ṻ\":\"U\",\n\t\"Ų\":\"U\",\n\t\"Ů\":\"U\",\n\t\"Ũ\":\"U\",\n\t\"Ṹ\":\"U\",\n\t\"Ṵ\":\"U\",\n\t\"Ꝟ\":\"V\",\n\t\"Ṿ\":\"V\",\n\t\"Ʋ\":\"V\",\n\t\"Ṽ\":\"V\",\n\t\"Ꝡ\":\"VY\",\n\t\"Ẃ\":\"W\",\n\t\"Ŵ\":\"W\",\n\t\"Ẅ\":\"W\",\n\t\"Ẇ\":\"W\",\n\t\"Ẉ\":\"W\",\n\t\"Ẁ\":\"W\",\n\t\"Ⱳ\":\"W\",\n\t\"Ẍ\":\"X\",\n\t\"Ẋ\":\"X\",\n\t\"Ý\":\"Y\",\n\t\"Ŷ\":\"Y\",\n\t\"Ÿ\":\"Y\",\n\t\"Ẏ\":\"Y\",\n\t\"Ỵ\":\"Y\",\n\t\"Ỳ\":\"Y\",\n\t\"Ƴ\":\"Y\",\n\t\"Ỷ\":\"Y\",\n\t\"Ỿ\":\"Y\",\n\t\"Ȳ\":\"Y\",\n\t\"Ɏ\":\"Y\",\n\t\"Ỹ\":\"Y\",\n\t\"Ź\":\"Z\",\n\t\"Ž\":\"Z\",\n\t\"Ẑ\":\"Z\",\n\t\"Ⱬ\":\"Z\",\n\t\"Ż\":\"Z\",\n\t\"Ẓ\":\"Z\",\n\t\"Ȥ\":\"Z\",\n\t\"Ẕ\":\"Z\",\n\t\"Ƶ\":\"Z\",\n\t\"IJ\":\"IJ\",\n\t\"Œ\":\"OE\",\n\t\"ᴀ\":\"A\",\n\t\"ᴁ\":\"AE\",\n\t\"ʙ\":\"B\",\n\t\"ᴃ\":\"B\",\n\t\"ᴄ\":\"C\",\n\t\"ᴅ\":\"D\",\n\t\"ᴇ\":\"E\",\n\t\"ꜰ\":\"F\",\n\t\"ɢ\":\"G\",\n\t\"ʛ\":\"G\",\n\t\"ʜ\":\"H\",\n\t\"ɪ\":\"I\",\n\t\"ʁ\":\"R\",\n\t\"ᴊ\":\"J\",\n\t\"ᴋ\":\"K\",\n\t\"ʟ\":\"L\",\n\t\"ᴌ\":\"L\",\n\t\"ᴍ\":\"M\",\n\t\"ɴ\":\"N\",\n\t\"ᴏ\":\"O\",\n\t\"ɶ\":\"OE\",\n\t\"ᴐ\":\"O\",\n\t\"ᴕ\":\"OU\",\n\t\"ᴘ\":\"P\",\n\t\"ʀ\":\"R\",\n\t\"ᴎ\":\"N\",\n\t\"ᴙ\":\"R\",\n\t\"ꜱ\":\"S\",\n\t\"ᴛ\":\"T\",\n\t\"ⱻ\":\"E\",\n\t\"ᴚ\":\"R\",\n\t\"ᴜ\":\"U\",\n\t\"ᴠ\":\"V\",\n\t\"ᴡ\":\"W\",\n\t\"ʏ\":\"Y\",\n\t\"ᴢ\":\"Z\",\n\t\"á\":\"a\",\n\t\"ă\":\"a\",\n\t\"ắ\":\"a\",\n\t\"ặ\":\"a\",\n\t\"ằ\":\"a\",\n\t\"ẳ\":\"a\",\n\t\"ẵ\":\"a\",\n\t\"ǎ\":\"a\",\n\t\"â\":\"a\",\n\t\"ấ\":\"a\",\n\t\"ậ\":\"a\",\n\t\"ầ\":\"a\",\n\t\"ẩ\":\"a\",\n\t\"ẫ\":\"a\",\n\t\"ä\":\"a\",\n\t\"ǟ\":\"a\",\n\t\"ȧ\":\"a\",\n\t\"ǡ\":\"a\",\n\t\"ạ\":\"a\",\n\t\"ȁ\":\"a\",\n\t\"à\":\"a\",\n\t\"ả\":\"a\",\n\t\"ȃ\":\"a\",\n\t\"ā\":\"a\",\n\t\"ą\":\"a\",\n\t\"ᶏ\":\"a\",\n\t\"ẚ\":\"a\",\n\t\"å\":\"a\",\n\t\"ǻ\":\"a\",\n\t\"ḁ\":\"a\",\n\t\"ⱥ\":\"a\",\n\t\"ã\":\"a\",\n\t\"ꜳ\":\"aa\",\n\t\"æ\":\"ae\",\n\t\"ǽ\":\"ae\",\n\t\"ǣ\":\"ae\",\n\t\"ꜵ\":\"ao\",\n\t\"ꜷ\":\"au\",\n\t\"ꜹ\":\"av\",\n\t\"ꜻ\":\"av\",\n\t\"ꜽ\":\"ay\",\n\t\"ḃ\":\"b\",\n\t\"ḅ\":\"b\",\n\t\"ɓ\":\"b\",\n\t\"ḇ\":\"b\",\n\t\"ᵬ\":\"b\",\n\t\"ᶀ\":\"b\",\n\t\"ƀ\":\"b\",\n\t\"ƃ\":\"b\",\n\t\"ɵ\":\"o\",\n\t\"ć\":\"c\",\n\t\"č\":\"c\",\n\t\"ç\":\"c\",\n\t\"ḉ\":\"c\",\n\t\"ĉ\":\"c\",\n\t\"ɕ\":\"c\",\n\t\"ċ\":\"c\",\n\t\"ƈ\":\"c\",\n\t\"ȼ\":\"c\",\n\t\"ď\":\"d\",\n\t\"ḑ\":\"d\",\n\t\"ḓ\":\"d\",\n\t\"ȡ\":\"d\",\n\t\"ḋ\":\"d\",\n\t\"ḍ\":\"d\",\n\t\"ɗ\":\"d\",\n\t\"ᶑ\":\"d\",\n\t\"ḏ\":\"d\",\n\t\"ᵭ\":\"d\",\n\t\"ᶁ\":\"d\",\n\t\"đ\":\"d\",\n\t\"ɖ\":\"d\",\n\t\"ƌ\":\"d\",\n\t\"ı\":\"i\",\n\t\"ȷ\":\"j\",\n\t\"ɟ\":\"j\",\n\t\"ʄ\":\"j\",\n\t\"dz\":\"dz\",\n\t\"dž\":\"dz\",\n\t\"é\":\"e\",\n\t\"ĕ\":\"e\",\n\t\"ě\":\"e\",\n\t\"ȩ\":\"e\",\n\t\"ḝ\":\"e\",\n\t\"ê\":\"e\",\n\t\"ế\":\"e\",\n\t\"ệ\":\"e\",\n\t\"ề\":\"e\",\n\t\"ể\":\"e\",\n\t\"ễ\":\"e\",\n\t\"ḙ\":\"e\",\n\t\"ë\":\"e\",\n\t\"ė\":\"e\",\n\t\"ẹ\":\"e\",\n\t\"ȅ\":\"e\",\n\t\"è\":\"e\",\n\t\"ẻ\":\"e\",\n\t\"ȇ\":\"e\",\n\t\"ē\":\"e\",\n\t\"ḗ\":\"e\",\n\t\"ḕ\":\"e\",\n\t\"ⱸ\":\"e\",\n\t\"ę\":\"e\",\n\t\"ᶒ\":\"e\",\n\t\"ɇ\":\"e\",\n\t\"ẽ\":\"e\",\n\t\"ḛ\":\"e\",\n\t\"ꝫ\":\"et\",\n\t\"ḟ\":\"f\",\n\t\"ƒ\":\"f\",\n\t\"ᵮ\":\"f\",\n\t\"ᶂ\":\"f\",\n\t\"ǵ\":\"g\",\n\t\"ğ\":\"g\",\n\t\"ǧ\":\"g\",\n\t\"ģ\":\"g\",\n\t\"ĝ\":\"g\",\n\t\"ġ\":\"g\",\n\t\"ɠ\":\"g\",\n\t\"ḡ\":\"g\",\n\t\"ᶃ\":\"g\",\n\t\"ǥ\":\"g\",\n\t\"ḫ\":\"h\",\n\t\"ȟ\":\"h\",\n\t\"ḩ\":\"h\",\n\t\"ĥ\":\"h\",\n\t\"ⱨ\":\"h\",\n\t\"ḧ\":\"h\",\n\t\"ḣ\":\"h\",\n\t\"ḥ\":\"h\",\n\t\"ɦ\":\"h\",\n\t\"ẖ\":\"h\",\n\t\"ħ\":\"h\",\n\t\"ƕ\":\"hv\",\n\t\"í\":\"i\",\n\t\"ĭ\":\"i\",\n\t\"ǐ\":\"i\",\n\t\"î\":\"i\",\n\t\"ï\":\"i\",\n\t\"ḯ\":\"i\",\n\t\"ị\":\"i\",\n\t\"ȉ\":\"i\",\n\t\"ì\":\"i\",\n\t\"ỉ\":\"i\",\n\t\"ȋ\":\"i\",\n\t\"ī\":\"i\",\n\t\"į\":\"i\",\n\t\"ᶖ\":\"i\",\n\t\"ɨ\":\"i\",\n\t\"ĩ\":\"i\",\n\t\"ḭ\":\"i\",\n\t\"ꝺ\":\"d\",\n\t\"ꝼ\":\"f\",\n\t\"ᵹ\":\"g\",\n\t\"ꞃ\":\"r\",\n\t\"ꞅ\":\"s\",\n\t\"ꞇ\":\"t\",\n\t\"ꝭ\":\"is\",\n\t\"ǰ\":\"j\",\n\t\"ĵ\":\"j\",\n\t\"ʝ\":\"j\",\n\t\"ɉ\":\"j\",\n\t\"ḱ\":\"k\",\n\t\"ǩ\":\"k\",\n\t\"ķ\":\"k\",\n\t\"ⱪ\":\"k\",\n\t\"ꝃ\":\"k\",\n\t\"ḳ\":\"k\",\n\t\"ƙ\":\"k\",\n\t\"ḵ\":\"k\",\n\t\"ᶄ\":\"k\",\n\t\"ꝁ\":\"k\",\n\t\"ꝅ\":\"k\",\n\t\"ĺ\":\"l\",\n\t\"ƚ\":\"l\",\n\t\"ɬ\":\"l\",\n\t\"ľ\":\"l\",\n\t\"ļ\":\"l\",\n\t\"ḽ\":\"l\",\n\t\"ȴ\":\"l\",\n\t\"ḷ\":\"l\",\n\t\"ḹ\":\"l\",\n\t\"ⱡ\":\"l\",\n\t\"ꝉ\":\"l\",\n\t\"ḻ\":\"l\",\n\t\"ŀ\":\"l\",\n\t\"ɫ\":\"l\",\n\t\"ᶅ\":\"l\",\n\t\"ɭ\":\"l\",\n\t\"ł\":\"l\",\n\t\"lj\":\"lj\",\n\t\"ſ\":\"s\",\n\t\"ẜ\":\"s\",\n\t\"ẛ\":\"s\",\n\t\"ẝ\":\"s\",\n\t\"ḿ\":\"m\",\n\t\"ṁ\":\"m\",\n\t\"ṃ\":\"m\",\n\t\"ɱ\":\"m\",\n\t\"ᵯ\":\"m\",\n\t\"ᶆ\":\"m\",\n\t\"ń\":\"n\",\n\t\"ň\":\"n\",\n\t\"ņ\":\"n\",\n\t\"ṋ\":\"n\",\n\t\"ȵ\":\"n\",\n\t\"ṅ\":\"n\",\n\t\"ṇ\":\"n\",\n\t\"ǹ\":\"n\",\n\t\"ɲ\":\"n\",\n\t\"ṉ\":\"n\",\n\t\"ƞ\":\"n\",\n\t\"ᵰ\":\"n\",\n\t\"ᶇ\":\"n\",\n\t\"ɳ\":\"n\",\n\t\"ñ\":\"n\",\n\t\"nj\":\"nj\",\n\t\"ó\":\"o\",\n\t\"ŏ\":\"o\",\n\t\"ǒ\":\"o\",\n\t\"ô\":\"o\",\n\t\"ố\":\"o\",\n\t\"ộ\":\"o\",\n\t\"ồ\":\"o\",\n\t\"ổ\":\"o\",\n\t\"ỗ\":\"o\",\n\t\"ö\":\"o\",\n\t\"ȫ\":\"o\",\n\t\"ȯ\":\"o\",\n\t\"ȱ\":\"o\",\n\t\"ọ\":\"o\",\n\t\"ő\":\"o\",\n\t\"ȍ\":\"o\",\n\t\"ò\":\"o\",\n\t\"ỏ\":\"o\",\n\t\"ơ\":\"o\",\n\t\"ớ\":\"o\",\n\t\"ợ\":\"o\",\n\t\"ờ\":\"o\",\n\t\"ở\":\"o\",\n\t\"ỡ\":\"o\",\n\t\"ȏ\":\"o\",\n\t\"ꝋ\":\"o\",\n\t\"ꝍ\":\"o\",\n\t\"ⱺ\":\"o\",\n\t\"ō\":\"o\",\n\t\"ṓ\":\"o\",\n\t\"ṑ\":\"o\",\n\t\"ǫ\":\"o\",\n\t\"ǭ\":\"o\",\n\t\"ø\":\"o\",\n\t\"ǿ\":\"o\",\n\t\"õ\":\"o\",\n\t\"ṍ\":\"o\",\n\t\"ṏ\":\"o\",\n\t\"ȭ\":\"o\",\n\t\"ƣ\":\"oi\",\n\t\"ꝏ\":\"oo\",\n\t\"ɛ\":\"e\",\n\t\"ᶓ\":\"e\",\n\t\"ɔ\":\"o\",\n\t\"ᶗ\":\"o\",\n\t\"ȣ\":\"ou\",\n\t\"ṕ\":\"p\",\n\t\"ṗ\":\"p\",\n\t\"ꝓ\":\"p\",\n\t\"ƥ\":\"p\",\n\t\"ᵱ\":\"p\",\n\t\"ᶈ\":\"p\",\n\t\"ꝕ\":\"p\",\n\t\"ᵽ\":\"p\",\n\t\"ꝑ\":\"p\",\n\t\"ꝙ\":\"q\",\n\t\"ʠ\":\"q\",\n\t\"ɋ\":\"q\",\n\t\"ꝗ\":\"q\",\n\t\"ŕ\":\"r\",\n\t\"ř\":\"r\",\n\t\"ŗ\":\"r\",\n\t\"ṙ\":\"r\",\n\t\"ṛ\":\"r\",\n\t\"ṝ\":\"r\",\n\t\"ȑ\":\"r\",\n\t\"ɾ\":\"r\",\n\t\"ᵳ\":\"r\",\n\t\"ȓ\":\"r\",\n\t\"ṟ\":\"r\",\n\t\"ɼ\":\"r\",\n\t\"ᵲ\":\"r\",\n\t\"ᶉ\":\"r\",\n\t\"ɍ\":\"r\",\n\t\"ɽ\":\"r\",\n\t\"ↄ\":\"c\",\n\t\"ꜿ\":\"c\",\n\t\"ɘ\":\"e\",\n\t\"ɿ\":\"r\",\n\t\"ś\":\"s\",\n\t\"ṥ\":\"s\",\n\t\"š\":\"s\",\n\t\"ṧ\":\"s\",\n\t\"ş\":\"s\",\n\t\"ŝ\":\"s\",\n\t\"ș\":\"s\",\n\t\"ṡ\":\"s\",\n\t\"ṣ\":\"s\",\n\t\"ṩ\":\"s\",\n\t\"ʂ\":\"s\",\n\t\"ᵴ\":\"s\",\n\t\"ᶊ\":\"s\",\n\t\"ȿ\":\"s\",\n\t\"ɡ\":\"g\",\n\t\"ᴑ\":\"o\",\n\t\"ᴓ\":\"o\",\n\t\"ᴝ\":\"u\",\n\t\"ť\":\"t\",\n\t\"ţ\":\"t\",\n\t\"ṱ\":\"t\",\n\t\"ț\":\"t\",\n\t\"ȶ\":\"t\",\n\t\"ẗ\":\"t\",\n\t\"ⱦ\":\"t\",\n\t\"ṫ\":\"t\",\n\t\"ṭ\":\"t\",\n\t\"ƭ\":\"t\",\n\t\"ṯ\":\"t\",\n\t\"ᵵ\":\"t\",\n\t\"ƫ\":\"t\",\n\t\"ʈ\":\"t\",\n\t\"ŧ\":\"t\",\n\t\"ᵺ\":\"th\",\n\t\"ɐ\":\"a\",\n\t\"ᴂ\":\"ae\",\n\t\"ǝ\":\"e\",\n\t\"ᵷ\":\"g\",\n\t\"ɥ\":\"h\",\n\t\"ʮ\":\"h\",\n\t\"ʯ\":\"h\",\n\t\"ᴉ\":\"i\",\n\t\"ʞ\":\"k\",\n\t\"ꞁ\":\"l\",\n\t\"ɯ\":\"m\",\n\t\"ɰ\":\"m\",\n\t\"ᴔ\":\"oe\",\n\t\"ɹ\":\"r\",\n\t\"ɻ\":\"r\",\n\t\"ɺ\":\"r\",\n\t\"ⱹ\":\"r\",\n\t\"ʇ\":\"t\",\n\t\"ʌ\":\"v\",\n\t\"ʍ\":\"w\",\n\t\"ʎ\":\"y\",\n\t\"ꜩ\":\"tz\",\n\t\"ú\":\"u\",\n\t\"ŭ\":\"u\",\n\t\"ǔ\":\"u\",\n\t\"û\":\"u\",\n\t\"ṷ\":\"u\",\n\t\"ü\":\"u\",\n\t\"ǘ\":\"u\",\n\t\"ǚ\":\"u\",\n\t\"ǜ\":\"u\",\n\t\"ǖ\":\"u\",\n\t\"ṳ\":\"u\",\n\t\"ụ\":\"u\",\n\t\"ű\":\"u\",\n\t\"ȕ\":\"u\",\n\t\"ù\":\"u\",\n\t\"ủ\":\"u\",\n\t\"ư\":\"u\",\n\t\"ứ\":\"u\",\n\t\"ự\":\"u\",\n\t\"ừ\":\"u\",\n\t\"ử\":\"u\",\n\t\"ữ\":\"u\",\n\t\"ȗ\":\"u\",\n\t\"ū\":\"u\",\n\t\"ṻ\":\"u\",\n\t\"ų\":\"u\",\n\t\"ᶙ\":\"u\",\n\t\"ů\":\"u\",\n\t\"ũ\":\"u\",\n\t\"ṹ\":\"u\",\n\t\"ṵ\":\"u\",\n\t\"ᵫ\":\"ue\",\n\t\"ꝸ\":\"um\",\n\t\"ⱴ\":\"v\",\n\t\"ꝟ\":\"v\",\n\t\"ṿ\":\"v\",\n\t\"ʋ\":\"v\",\n\t\"ᶌ\":\"v\",\n\t\"ⱱ\":\"v\",\n\t\"ṽ\":\"v\",\n\t\"ꝡ\":\"vy\",\n\t\"ẃ\":\"w\",\n\t\"ŵ\":\"w\",\n\t\"ẅ\":\"w\",\n\t\"ẇ\":\"w\",\n\t\"ẉ\":\"w\",\n\t\"ẁ\":\"w\",\n\t\"ⱳ\":\"w\",\n\t\"ẘ\":\"w\",\n\t\"ẍ\":\"x\",\n\t\"ẋ\":\"x\",\n\t\"ᶍ\":\"x\",\n\t\"ý\":\"y\",\n\t\"ŷ\":\"y\",\n\t\"ÿ\":\"y\",\n\t\"ẏ\":\"y\",\n\t\"ỵ\":\"y\",\n\t\"ỳ\":\"y\",\n\t\"ƴ\":\"y\",\n\t\"ỷ\":\"y\",\n\t\"ỿ\":\"y\",\n\t\"ȳ\":\"y\",\n\t\"ẙ\":\"y\",\n\t\"ɏ\":\"y\",\n\t\"ỹ\":\"y\",\n\t\"ź\":\"z\",\n\t\"ž\":\"z\",\n\t\"ẑ\":\"z\",\n\t\"ʑ\":\"z\",\n\t\"ⱬ\":\"z\",\n\t\"ż\":\"z\",\n\t\"ẓ\":\"z\",\n\t\"ȥ\":\"z\",\n\t\"ẕ\":\"z\",\n\t\"ᵶ\":\"z\",\n\t\"ᶎ\":\"z\",\n\t\"ʐ\":\"z\",\n\t\"ƶ\":\"z\",\n\t\"ɀ\":\"z\",\n\t\"ff\":\"ff\",\n\t\"ffi\":\"ffi\",\n\t\"ffl\":\"ffl\",\n\t\"fi\":\"fi\",\n\t\"fl\":\"fl\",\n\t\"ij\":\"ij\",\n\t\"œ\":\"oe\",\n\t\"st\":\"st\",\n\t\"ₐ\":\"a\",\n\t\"ₑ\":\"e\",\n\t\"ᵢ\":\"i\",\n\t\"ⱼ\":\"j\",\n\t\"ₒ\":\"o\",\n\t\"ᵣ\":\"r\",\n\t\"ᵤ\":\"u\",\n\t\"ᵥ\":\"v\",\n\t\"ₓ\":\"x\",\n\t\"Ё\":\"YO\",\n\t\"Й\":\"I\",\n\t\"Ц\":\"TS\",\n\t\"У\":\"U\",\n\t\"К\":\"K\",\n\t\"Е\":\"E\",\n\t\"Н\":\"N\",\n\t\"Г\":\"G\",\n\t\"Ш\":\"SH\",\n\t\"Щ\":\"SCH\",\n\t\"З\":\"Z\",\n\t\"Х\":\"H\",\n\t\"Ъ\":\"'\",\n\t\"ё\":\"yo\",\n\t\"й\":\"i\",\n\t\"ц\":\"ts\",\n\t\"у\":\"u\",\n\t\"к\":\"k\",\n\t\"е\":\"e\",\n\t\"н\":\"n\",\n\t\"г\":\"g\",\n\t\"ш\":\"sh\",\n\t\"щ\":\"sch\",\n\t\"з\":\"z\",\n\t\"х\":\"h\",\n\t\"ъ\":\"'\",\n\t\"Ф\":\"F\",\n\t\"Ы\":\"I\",\n\t\"В\":\"V\",\n\t\"А\":\"a\",\n\t\"П\":\"P\",\n\t\"Р\":\"R\",\n\t\"О\":\"O\",\n\t\"Л\":\"L\",\n\t\"Д\":\"D\",\n\t\"Ж\":\"ZH\",\n\t\"Э\":\"E\",\n\t\"ф\":\"f\",\n\t\"ы\":\"i\",\n\t\"в\":\"v\",\n\t\"а\":\"a\",\n\t\"п\":\"p\",\n\t\"р\":\"r\",\n\t\"о\":\"o\",\n\t\"л\":\"l\",\n\t\"д\":\"d\",\n\t\"ж\":\"zh\",\n\t\"э\":\"e\",\n\t\"Я\":\"Ya\",\n\t\"Ч\":\"CH\",\n\t\"С\":\"S\",\n\t\"М\":\"M\",\n\t\"И\":\"I\",\n\t\"Т\":\"T\",\n\t\"Ь\":\"'\",\n\t\"Б\":\"B\",\n\t\"Ю\":\"YU\",\n\t\"я\":\"ya\",\n\t\"ч\":\"ch\",\n\t\"с\":\"s\",\n\t\"м\":\"m\",\n\t\"и\":\"i\",\n\t\"т\":\"t\",\n\t\"ь\":\"'\",\n\t\"б\":\"b\",\n\t\"ю\":\"yu\"\n};\n\nexports.transliterate = function(str) {\n\treturn str.replace(/[^A-Za-z0-9\\[\\] ]/g,function(ch) {\n\t\treturn exports.transliterationPairs[ch] || ch\n\t});\n};\n\nexports.transliterateToSafeASCII = function(str) {\n\treturn str.replace(/[^\\x00-\\x7F]/g,function(ch) {\n\t\treturn exports.transliterationPairs[ch] || \"\"\n\t});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/utils.js": {
"title": "$:/core/modules/utils/utils.js",
"text": "/*\\\ntitle: $:/core/modules/utils/utils.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar base64utf8 = require(\"$:/core/modules/utils/base64-utf8/base64-utf8.module.js\");\n\n/*\nDisplay a message, in colour if we're on a terminal\n*/\nexports.log = function(text,colour) {\n\tconsole.log($tw.node ? exports.terminalColour(colour) + text + exports.terminalColour() : text);\n};\n\nexports.terminalColour = function(colour) {\n\tif(!$tw.browser && $tw.node && process.stdout.isTTY) {\n\t\tif(colour) {\n\t\t\tvar code = exports.terminalColourLookup[colour];\n\t\t\tif(code) {\n\t\t\t\treturn \"\\x1b[\" + code + \"m\";\n\t\t\t}\n\t\t} else {\n\t\t\treturn \"\\x1b[0m\"; // Cancel colour\n\t\t}\n\t}\n\treturn \"\";\n};\n\nexports.terminalColourLookup = {\n\t\"black\": \"0;30\",\n\t\"red\": \"0;31\",\n\t\"green\": \"0;32\",\n\t\"brown/orange\": \"0;33\",\n\t\"blue\": \"0;34\",\n\t\"purple\": \"0;35\",\n\t\"cyan\": \"0;36\",\n\t\"light gray\": \"0;37\"\n};\n\n/*\nDisplay a warning, in colour if we're on a terminal\n*/\nexports.warning = function(text) {\n\texports.log(text,\"brown/orange\");\n};\n\n/*\nLog a table of name: value pairs\n*/\nexports.logTable = function(data) {\n\tif(console.table) {\n\t\tconsole.table(data);\n\t} else {\n\t\t$tw.utils.each(data,function(value,name) {\n\t\t\tconsole.log(name + \": \" + value);\n\t\t});\n\t}\n}\n\n/*\nReturn the integer represented by the str (string).\nReturn the dflt (default) parameter if str is not a base-10 number.\n*/\nexports.getInt = function(str,deflt) {\n\tvar i = parseInt(str,10);\n\treturn isNaN(i) ? deflt : i;\n}\n\n/*\nRepeatedly replaces a substring within a string. Like String.prototype.replace, but without any of the default special handling of $ sequences in the replace string\n*/\nexports.replaceString = function(text,search,replace) {\n\treturn text.replace(search,function() {\n\t\treturn replace;\n\t});\n};\n\n/*\nRepeats a string\n*/\nexports.repeat = function(str,count) {\n\tvar result = \"\";\n\tfor(var t=0;t<count;t++) {\n\t\tresult += str;\n\t}\n\treturn result;\n};\n\n/*\nTrim whitespace from the start and end of a string\nThanks to Steven Levithan, http://blog.stevenlevithan.com/archives/faster-trim-javascript\n*/\nexports.trim = function(str) {\n\tif(typeof str === \"string\") {\n\t\treturn str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\t} else {\n\t\treturn str;\n\t}\n};\n\nexports.trimPrefix = function(str,unwanted) {\n\tif(typeof str === \"string\" && typeof unwanted === \"string\") {\n\t\tif(unwanted === \"\") {\n\t\t\treturn str.replace(/^\\s\\s*/, '');\n\t\t} else {\n\t\t\t// Safely regexp-escape the unwanted text\n\t\t\tunwanted = unwanted.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\t\t\tvar regex = new RegExp('^(' + unwanted + ')+');\n\t\t\treturn str.replace(regex, '');\n\t\t}\n\t} else {\n\t\treturn str;\n\t}\n};\n\nexports.trimSuffix = function(str,unwanted) {\n\tif(typeof str === \"string\" && typeof unwanted === \"string\") {\n\t\tif(unwanted === \"\") {\n\t\t\treturn str.replace(/\\s\\s*$/, '');\n\t\t} else {\n\t\t\t// Safely regexp-escape the unwanted text\n\t\t\tunwanted = unwanted.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\t\t\tvar regex = new RegExp('(' + unwanted + ')+$');\n\t\t\treturn str.replace(regex, '');\n\t\t}\n\t} else {\n\t\treturn str;\n\t}\n};\n\n/*\nConvert a string to sentence case (ie capitalise first letter)\n*/\nexports.toSentenceCase = function(str) {\n\treturn (str || \"\").replace(/^\\S/, function(c) {return c.toUpperCase();});\n}\n\n/*\nConvert a string to title case (ie capitalise each initial letter)\n*/\nexports.toTitleCase = function(str) {\n\treturn (str || \"\").replace(/(^|\\s)\\S/g, function(c) {return c.toUpperCase();});\n}\n\t\n/*\nFind the line break preceding a given position in a string\nReturns position immediately after that line break, or the start of the string\n*/\nexports.findPrecedingLineBreak = function(text,pos) {\n\tvar result = text.lastIndexOf(\"\\n\",pos - 1);\n\tif(result === -1) {\n\t\tresult = 0;\n\t} else {\n\t\tresult++;\n\t\tif(text.charAt(result) === \"\\r\") {\n\t\t\tresult++;\n\t\t}\n\t}\n\treturn result;\n};\n\n/*\nFind the line break following a given position in a string\n*/\nexports.findFollowingLineBreak = function(text,pos) {\n\t// Cut to just past the following line break, or to the end of the text\n\tvar result = text.indexOf(\"\\n\",pos);\n\tif(result === -1) {\n\t\tresult = text.length;\n\t} else {\n\t\tif(text.charAt(result) === \"\\r\") {\n\t\t\tresult++;\n\t\t}\n\t}\n\treturn result;\n};\n\n/*\nReturn the number of keys in an object\n*/\nexports.count = function(object) {\n\treturn Object.keys(object || {}).length;\n};\n\n/*\nDetermine whether an array-item is an object-property\n*/\nexports.hopArray = function(object,array) {\n\tfor(var i=0; i<array.length; i++) {\n\t\tif($tw.utils.hop(object,array[i])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nRemove entries from an array\n\tarray: array to modify\n\tvalue: a single value to remove, or an array of values to remove\n*/\nexports.removeArrayEntries = function(array,value) {\n\tvar t,p;\n\tif($tw.utils.isArray(value)) {\n\t\tfor(t=0; t<value.length; t++) {\n\t\t\tp = array.indexOf(value[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tarray.splice(p,1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tp = array.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tarray.splice(p,1);\n\t\t}\n\t}\n};\n\n/*\nCheck whether any members of a hashmap are present in another hashmap\n*/\nexports.checkDependencies = function(dependencies,changes) {\n\tvar hit = false;\n\t$tw.utils.each(changes,function(change,title) {\n\t\tif($tw.utils.hop(dependencies,title)) {\n\t\t\thit = true;\n\t\t}\n\t});\n\treturn hit;\n};\n\nexports.extend = function(object /* [, src] */) {\n\t$tw.utils.each(Array.prototype.slice.call(arguments, 1), function(source) {\n\t\tif(source) {\n\t\t\tfor(var property in source) {\n\t\t\t\tobject[property] = source[property];\n\t\t\t}\n\t\t}\n\t});\n\treturn object;\n};\n\nexports.deepCopy = function(object) {\n\tvar result,t;\n\tif($tw.utils.isArray(object)) {\n\t\t// Copy arrays\n\t\tresult = object.slice(0);\n\t} else if(typeof object === \"object\") {\n\t\tresult = {};\n\t\tfor(t in object) {\n\t\t\tif(object[t] !== undefined) {\n\t\t\t\tresult[t] = $tw.utils.deepCopy(object[t]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tresult = object;\n\t}\n\treturn result;\n};\n\nexports.extendDeepCopy = function(object,extendedProperties) {\n\tvar result = $tw.utils.deepCopy(object),t;\n\tfor(t in extendedProperties) {\n\t\tif(extendedProperties[t] !== undefined) {\n\t\t\tresult[t] = $tw.utils.deepCopy(extendedProperties[t]);\n\t\t}\n\t}\n\treturn result;\n};\n\nexports.deepFreeze = function deepFreeze(object) {\n\tvar property, key;\n\tif(object) {\n\t\tObject.freeze(object);\n\t\tfor(key in object) {\n\t\t\tproperty = object[key];\n\t\t\tif($tw.utils.hop(object,key) && (typeof property === \"object\") && !Object.isFrozen(property)) {\n\t\t\t\tdeepFreeze(property);\n\t\t\t}\n\t\t}\n\t}\n};\n\nexports.slowInSlowOut = function(t) {\n\treturn (1 - ((Math.cos(t * Math.PI) + 1) / 2));\n};\n\nexports.formatDateString = function(date,template) {\n\tvar result = \"\",\n\t\tt = template,\n\t\tmatches = [\n\t\t\t[/^0hh12/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getHours12(date));\n\t\t\t}],\n\t\t\t[/^wYYYY/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getYearForWeekNo(date),4);\n\t\t\t}],\n\t\t\t[/^hh12/, function() {\n\t\t\t\treturn $tw.utils.getHours12(date);\n\t\t\t}],\n\t\t\t[/^DDth/, function() {\n\t\t\t\treturn date.getDate() + $tw.utils.getDaySuffix(date);\n\t\t\t}],\n\t\t\t[/^YYYY/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getFullYear(),4);\n\t\t\t}],\n\t\t\t[/^aYYYY/, function() {\n\t\t\t\treturn $tw.utils.pad(Math.abs(date.getFullYear()),4);\n\t\t\t}],\n\t\t\t[/^\\{era:([^,\\|}]*)\\|([^}\\|]*)\\|([^}]*)\\}/, function(match) {\n\t\t\t\tvar year = date.getFullYear();\n\t\t\t\treturn year === 0 ? match[2] : (year < 0 ? match[1] : match[3]);\n\t\t\t}],\n\t\t\t[/^0hh/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getHours());\n\t\t\t}],\n\t\t\t[/^0mm/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMinutes());\n\t\t\t}],\n\t\t\t[/^0ss/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getSeconds());\n\t\t\t}],\n\t\t\t[/^0XXX/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMilliseconds(),3);\n\t\t\t}],\n\t\t\t[/^0DD/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getDate());\n\t\t\t}],\n\t\t\t[/^0MM/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMonth()+1);\n\t\t\t}],\n\t\t\t[/^0WW/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getWeek(date));\n\t\t\t}],\n\t\t\t[/^ddd/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^mmm/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^DDD/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^MMM/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^TZD/, function() {\n\t\t\t\tvar tz = date.getTimezoneOffset(),\n\t\t\t\tatz = Math.abs(tz);\n\t\t\t\treturn (tz < 0 ? '+' : '-') + $tw.utils.pad(Math.floor(atz / 60)) + ':' + $tw.utils.pad(atz % 60);\n\t\t\t}],\n\t\t\t[/^wYY/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getYearForWeekNo(date) - 2000);\n\t\t\t}],\n\t\t\t[/^[ap]m/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toLowerCase();\n\t\t\t}],\n\t\t\t[/^hh/, function() {\n\t\t\t\treturn date.getHours();\n\t\t\t}],\n\t\t\t[/^mm/, function() {\n\t\t\t\treturn date.getMinutes();\n\t\t\t}],\n\t\t\t[/^ss/, function() {\n\t\t\t\treturn date.getSeconds();\n\t\t\t}],\n\t\t\t[/^XXX/, function() {\n\t\t\t\treturn date.getMilliseconds();\n\t\t\t}],\n\t\t\t[/^[AP]M/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toUpperCase();\n\t\t\t}],\n\t\t\t[/^DD/, function() {\n\t\t\t\treturn date.getDate();\n\t\t\t}],\n\t\t\t[/^MM/, function() {\n\t\t\t\treturn date.getMonth() + 1;\n\t\t\t}],\n\t\t\t[/^WW/, function() {\n\t\t\t\treturn $tw.utils.getWeek(date);\n\t\t\t}],\n\t\t\t[/^YY/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getFullYear() - 2000);\n\t\t\t}]\n\t\t];\n\t// If the user wants everything in UTC, shift the datestamp\n\t// Optimize for format string that essentially means\n\t// 'return raw UTC (tiddlywiki style) date string.'\n\tif(t.indexOf(\"[UTC]\") == 0 ) {\n\t\tif(t == \"[UTC]YYYY0MM0DD0hh0mm0ssXXX\")\n\t\t\treturn $tw.utils.stringifyDate(new Date());\n\t\tvar offset = date.getTimezoneOffset() ; // in minutes\n\t\tdate = new Date(date.getTime()+offset*60*1000) ;\n\t\tt = t.substr(5) ;\n\t}\n\twhile(t.length){\n\t\tvar matchString = \"\";\n\t\t$tw.utils.each(matches, function(m) {\n\t\t\tvar match = m[0].exec(t);\n\t\t\tif(match) {\n\t\t\t\tmatchString = m[1].call(null,match);\n\t\t\t\tt = t.substr(match[0].length);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\tif(matchString) {\n\t\t\tresult += matchString;\n\t\t} else {\n\t\t\tresult += t.charAt(0);\n\t\t\tt = t.substr(1);\n\t\t}\n\t}\n\tresult = result.replace(/\\\\(.)/g,\"$1\");\n\treturn result;\n};\n\nexports.getAmPm = function(date) {\n\treturn $tw.language.getString(\"Date/Period/\" + (date.getHours() >= 12 ? \"pm\" : \"am\"));\n};\n\nexports.getDaySuffix = function(date) {\n\treturn $tw.language.getString(\"Date/DaySuffix/\" + date.getDate());\n};\n\nexports.getWeek = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week to calculate weekNo\n\tvar x = new Date(dt.getFullYear(),0,1);\n\tvar n = Math.floor((dt.getTime() - x.getTime()) / 86400000);\n\treturn Math.floor(n / 7) + 1;\n};\n\nexports.getYearForWeekNo = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week\n\treturn dt.getFullYear();\n};\n\nexports.getHours12 = function(date) {\n\tvar h = date.getHours();\n\treturn h > 12 ? h-12 : ( h > 0 ? h : 12 );\n};\n\n/*\nConvert a date delta in milliseconds into a string representation of \"23 seconds ago\", \"27 minutes ago\" etc.\n\tdelta: delta in milliseconds\nReturns an object with these members:\n\tdescription: string describing the delta period\n\tupdatePeriod: time in millisecond until the string will be inaccurate\n*/\nexports.getRelativeDate = function(delta) {\n\tvar futurep = false;\n\tif(delta < 0) {\n\t\tdelta = -1 * delta;\n\t\tfuturep = true;\n\t}\n\tvar units = [\n\t\t{name: \"Years\", duration: 365 * 24 * 60 * 60 * 1000},\n\t\t{name: \"Months\", duration: (365/12) * 24 * 60 * 60 * 1000},\n\t\t{name: \"Days\", duration: 24 * 60 * 60 * 1000},\n\t\t{name: \"Hours\", duration: 60 * 60 * 1000},\n\t\t{name: \"Minutes\", duration: 60 * 1000},\n\t\t{name: \"Seconds\", duration: 1000}\n\t];\n\tfor(var t=0; t<units.length; t++) {\n\t\tvar result = Math.floor(delta / units[t].duration);\n\t\tif(result >= 2) {\n\t\t\treturn {\n\t\t\t\tdelta: delta,\n\t\t\t\tdescription: $tw.language.getString(\n\t\t\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/\" + units[t].name,\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{period: result.toString()}\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t\tupdatePeriod: units[t].duration\n\t\t\t};\n\t\t}\n\t}\n\treturn {\n\t\tdelta: delta,\n\t\tdescription: $tw.language.getString(\n\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/Second\",\n\t\t\t{variables:\n\t\t\t\t{period: \"1\"}\n\t\t\t}\n\t\t),\n\t\tupdatePeriod: 1000\n\t};\n};\n\n// Convert & to \"&\", < to \"<\", > to \">\", \" to \""\"\nexports.htmlEncode = function(s) {\n\tif(s) {\n\t\treturn s.toString().replace(/&/mg,\"&\").replace(/</mg,\"<\").replace(/>/mg,\">\").replace(/\\\"/mg,\""\");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n// Converts all HTML entities to their character equivalents\nexports.entityDecode = function(s) {\n\tvar converter = String.fromCodePoint || String.fromCharCode,\n\t\te = s.substr(1,s.length-2), // Strip the & and the ;\n\t\tc;\n\tif(e.charAt(0) === \"#\") {\n\t\tif(e.charAt(1) === \"x\" || e.charAt(1) === \"X\") {\n\t\t\tc = parseInt(e.substr(2),16);\n\t\t} else {\n\t\t\tc = parseInt(e.substr(1),10);\n\t\t}\n\t\tif(isNaN(c)) {\n\t\t\treturn s;\n\t\t} else {\n\t\t\treturn converter(c);\n\t\t}\n\t} else {\n\t\tc = $tw.config.htmlEntities[e];\n\t\tif(c) {\n\t\t\treturn converter(c);\n\t\t} else {\n\t\t\treturn s; // Couldn't convert it as an entity, just return it raw\n\t\t}\n\t}\n};\n\nexports.unescapeLineBreaks = function(s) {\n\treturn s.replace(/\\\\n/mg,\"\\n\").replace(/\\\\b/mg,\" \").replace(/\\\\s/mg,\"\\\\\").replace(/\\r/mg,\"\");\n};\n\n/*\n * Returns an escape sequence for given character. Uses \\x for characters <=\n * 0xFF to save space, \\u for the rest.\n *\n * The code needs to be in sync with th code template in the compilation\n * function for \"action\" nodes.\n */\n// Copied from peg.js, thanks to David Majda\nexports.escape = function(ch) {\n\tvar charCode = ch.charCodeAt(0);\n\tif(charCode <= 0xFF) {\n\t\treturn '\\\\x' + $tw.utils.pad(charCode.toString(16).toUpperCase());\n\t} else {\n\t\treturn '\\\\u' + $tw.utils.pad(charCode.toString(16).toUpperCase(),4);\n\t}\n};\n\n// Turns a string into a legal JavaScript string\n// Copied from peg.js, thanks to David Majda\nexports.stringify = function(s, rawUnicode) {\n\t/*\n\t* ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a string\n\t* literal except for the closing quote character, backslash, carriage return,\n\t* line separator, paragraph separator, and line feed. Any character may\n\t* appear in the form of an escape sequence.\n\t*\n\t* For portability, we also escape all non-ASCII characters.\n\t*/\n\tvar regex = rawUnicode ? /[\\x00-\\x1f]/g : /[\\x00-\\x1f\\x80-\\uFFFF]/g;\n\treturn (s || \"\")\n\t\t.replace(/\\\\/g, '\\\\\\\\') // backslash\n\t\t.replace(/\"/g, '\\\\\"') // double quote character\n\t\t.replace(/'/g, \"\\\\'\") // single quote character\n\t\t.replace(/\\r/g, '\\\\r') // carriage return\n\t\t.replace(/\\n/g, '\\\\n') // line feed\n\t\t.replace(regex, exports.escape); // non-ASCII characters\n};\n\n// Turns a string into a legal JSON string\n// Derived from peg.js, thanks to David Majda\nexports.jsonStringify = function(s, rawUnicode) {\n\t// See http://www.json.org/\n\tvar regex = rawUnicode ? /[\\x00-\\x1f]/g : /[\\x00-\\x1f\\x80-\\uFFFF]/g;\n\treturn (s || \"\")\n\t\t.replace(/\\\\/g, '\\\\\\\\') // backslash\n\t\t.replace(/\"/g, '\\\\\"') // double quote character\n\t\t.replace(/\\r/g, '\\\\r') // carriage return\n\t\t.replace(/\\n/g, '\\\\n') // line feed\n\t\t.replace(/\\x08/g, '\\\\b') // backspace\n\t\t.replace(/\\x0c/g, '\\\\f') // formfeed\n\t\t.replace(/\\t/g, '\\\\t') // tab\n\t\t.replace(regex,function(s) {\n\t\t\treturn '\\\\u' + $tw.utils.pad(s.charCodeAt(0).toString(16).toUpperCase(),4);\n\t\t}); // non-ASCII characters\n};\n\n/*\nEscape the RegExp special characters with a preceding backslash\n*/\nexports.escapeRegExp = function(s) {\n return s.replace(/[\\-\\/\\\\\\^\\$\\*\\+\\?\\.\\(\\)\\|\\[\\]\\{\\}]/g, '\\\\$&');\n};\n\n// Checks whether a link target is external, i.e. not a tiddler title\nexports.isLinkExternal = function(to) {\n\tvar externalRegExp = /^(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|\"\\\\^]+(?:\\/|\\b)/i;\n\treturn externalRegExp.test(to);\n};\n\nexports.nextTick = function(fn) {\n/*global window: false */\n\tif(typeof process === \"undefined\") {\n\t\t// Apparently it would be faster to use postMessage - http://dbaron.org/log/20100309-faster-timeouts\n\t\twindow.setTimeout(fn,4);\n\t} else {\n\t\tprocess.nextTick(fn);\n\t}\n};\n\n/*\nConvert a hyphenated CSS property name into a camel case one\n*/\nexports.unHyphenateCss = function(propName) {\n\treturn propName.replace(/-([a-z])/gi, function(match0,match1) {\n\t\treturn match1.toUpperCase();\n\t});\n};\n\n/*\nConvert a camelcase CSS property name into a dashed one (\"backgroundColor\" --> \"background-color\")\n*/\nexports.hyphenateCss = function(propName) {\n\treturn propName.replace(/([A-Z])/g, function(match0,match1) {\n\t\treturn \"-\" + match1.toLowerCase();\n\t});\n};\n\n/*\nParse a text reference of one of these forms:\n* title\n* !!field\n* title!!field\n* title##index\n* etc\nReturns an object with the following fields, all optional:\n* title: tiddler title\n* field: tiddler field name\n* index: JSON property index\n*/\nexports.parseTextReference = function(textRef) {\n\t// Separate out the title, field name and/or JSON indices\n\tvar reTextRef = /(?:(.*?)!!(.+))|(?:(.*?)##(.+))|(.*)/mg,\n\t\tmatch = reTextRef.exec(textRef),\n\t\tresult = {};\n\tif(match && reTextRef.lastIndex === textRef.length) {\n\t\t// Return the parts\n\t\tif(match[1]) {\n\t\t\tresult.title = match[1];\n\t\t}\n\t\tif(match[2]) {\n\t\t\tresult.field = match[2];\n\t\t}\n\t\tif(match[3]) {\n\t\t\tresult.title = match[3];\n\t\t}\n\t\tif(match[4]) {\n\t\t\tresult.index = match[4];\n\t\t}\n\t\tif(match[5]) {\n\t\t\tresult.title = match[5];\n\t\t}\n\t} else {\n\t\t// If we couldn't parse it\n\t\tresult.title = textRef\n\t}\n\treturn result;\n};\n\n/*\nChecks whether a string is a valid fieldname\n*/\nexports.isValidFieldName = function(name) {\n\tif(!name || typeof name !== \"string\") {\n\t\treturn false;\n\t}\n\tname = name.toLowerCase().trim();\n\tvar fieldValidatorRegEx = /^[a-z0-9\\-\\._]+$/mg;\n\treturn fieldValidatorRegEx.test(name);\n};\n\n/*\nExtract the version number from the meta tag or from the boot file\n*/\n\n// Browser version\nexports.extractVersionInfo = function() {\n\tif($tw.packageInfo) {\n\t\treturn $tw.packageInfo.version;\n\t} else {\n\t\tvar metatags = document.getElementsByTagName(\"meta\");\n\t\tfor(var t=0; t<metatags.length; t++) {\n\t\t\tvar m = metatags[t];\n\t\t\tif(m.name === \"tiddlywiki-version\") {\n\t\t\t\treturn m.content;\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the animation duration in ms\n*/\nexports.getAnimationDuration = function() {\n\treturn parseInt($tw.wiki.getTiddlerText(\"$:/config/AnimationDuration\",\"400\"),10) || 0;\n};\n\n/*\nHash a string to a number\nDerived from http://stackoverflow.com/a/15710692\n*/\nexports.hashString = function(str) {\n\treturn str.split(\"\").reduce(function(a,b) {\n\t\ta = ((a << 5) - a) + b.charCodeAt(0);\n\t\treturn a & a;\n\t},0);\n};\n\n/*\nDecode a base64 string\n*/\nexports.base64Decode = function(string64) {\n\treturn base64utf8.base64.decode.call(base64utf8,string64);\n};\n\n/*\nEncode a string to base64\n*/\nexports.base64Encode = function(string64) {\n\treturn base64utf8.base64.encode.call(base64utf8,string64);\n};\n\n/*\nConvert a hashmap into a tiddler dictionary format sequence of name:value pairs\n*/\nexports.makeTiddlerDictionary = function(data) {\n\tvar output = [];\n\tfor(var name in data) {\n\t\toutput.push(name + \": \" + data[name]);\n\t}\n\treturn output.join(\"\\n\");\n};\n\n/*\nHigh resolution microsecond timer for profiling\n*/\nexports.timer = function(base) {\n\tvar m;\n\tif($tw.node) {\n\t\tvar r = process.hrtime();\n\t\tm = r[0] * 1e3 + (r[1] / 1e6);\n\t} else if(window.performance) {\n\t\tm = performance.now();\n\t} else {\n\t\tm = Date.now();\n\t}\n\tif(typeof base !== \"undefined\") {\n\t\tm = m - base;\n\t}\n\treturn m;\n};\n\n/*\nConvert text and content type to a data URI\n*/\nexports.makeDataUri = function(text,type,_canonical_uri) {\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar typeInfo = $tw.config.contentTypeInfo[type] || $tw.config.contentTypeInfo[\"text/plain\"],\n\t\tisBase64 = typeInfo.encoding === \"base64\",\n\t\tparts = [];\n\tif(_canonical_uri) {\n\t\tparts.push(_canonical_uri);\n\t} else {\n\t\tparts.push(\"data:\");\n\t\tparts.push(type);\n\t\tparts.push(isBase64 ? \";base64\" : \"\");\n\t\tparts.push(\",\");\n\t\tparts.push(isBase64 ? text : encodeURIComponent(text));\t\t\n\t}\n\treturn parts.join(\"\");\n};\n\n/*\nUseful for finding out the fully escaped CSS selector equivalent to a given tag. For example:\n\n$tw.utils.tagToCssSelector(\"$:/tags/Stylesheet\") --> tc-tagged-\\%24\\%3A\\%2Ftags\\%2FStylesheet\n*/\nexports.tagToCssSelector = function(tagName) {\n\treturn \"tc-tagged-\" + encodeURIComponent(tagName).replace(/[!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^`{\\|}~,]/mg,function(c) {\n\t\treturn \"\\\\\" + c;\n\t});\n};\n\n/*\nIE does not have sign function\n*/\nexports.sign = Math.sign || function(x) {\n\tx = +x; // convert to a number\n\tif (x === 0 || isNaN(x)) {\n\t\treturn x;\n\t}\n\treturn x > 0 ? 1 : -1;\n};\n\n/*\nIE does not have an endsWith function\n*/\nexports.strEndsWith = function(str,ending,position) {\n\tif(str.endsWith) {\n\t\treturn str.endsWith(ending,position);\n\t} else {\n\t\tif (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > str.length) {\n\t\t\tposition = str.length;\n\t\t}\n\t\tposition -= ending.length;\n\t\tvar lastIndex = str.indexOf(ending, position);\n\t\treturn lastIndex !== -1 && lastIndex === position;\n\t}\n};\n\n/*\nReturn system information useful for debugging\n*/\nexports.getSystemInfo = function(str,ending,position) {\n\tvar results = [],\n\t\tsave = function(desc,value) {\n\t\t\tresults.push(desc + \": \" + value);\n\t\t};\n\tif($tw.browser) {\n\t\tsave(\"User Agent\",navigator.userAgent);\n\t\tsave(\"Online Status\",window.navigator.onLine);\n\t}\n\tif($tw.node) {\n\t\tsave(\"Node Version\",process.version);\n\t}\n\treturn results.join(\"\\n\");\n};\n\nexports.parseNumber = function(str) {\n\treturn parseFloat(str) || 0;\n};\n\nexports.parseInt = function(str) {\n\treturn parseInt(str,10) || 0;\n};\n\nexports.stringifyNumber = function(num) {\n\treturn num + \"\";\n};\n\nexports.makeCompareFunction = function(type,options) {\n\toptions = options || {};\n\tvar gt = options.invert ? -1 : +1,\n\t\tlt = options.invert ? +1 : -1,\n\t\tcompare = function(a,b) {\n\t\t\tif(a > b) {\n\t\t\t\treturn gt ;\n\t\t\t} else if(a < b) {\n\t\t\t\treturn lt;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t},\n\t\ttypes = {\n\t\t\t\"number\": function(a,b) {\n\t\t\t\treturn compare($tw.utils.parseNumber(a),$tw.utils.parseNumber(b));\n\t\t\t},\n\t\t\t\"integer\": function(a,b) {\n\t\t\t\treturn compare($tw.utils.parseInt(a),$tw.utils.parseInt(b));\n\t\t\t},\n\t\t\t\"string\": function(a,b) {\n\t\t\t\treturn compare(\"\" + a,\"\" +b);\n\t\t\t},\n\t\t\t\"date\": function(a,b) {\n\t\t\t\tvar dateA = $tw.utils.parseDate(a),\n\t\t\t\t\tdateB = $tw.utils.parseDate(b);\n\t\t\t\tif(!isFinite(dateA)) {\n\t\t\t\t\tdateA = new Date(0);\n\t\t\t\t}\n\t\t\t\tif(!isFinite(dateB)) {\n\t\t\t\t\tdateB = new Date(0);\n\t\t\t\t}\n\t\t\t\treturn compare(dateA,dateB);\n\t\t\t},\n\t\t\t\"version\": function(a,b) {\n\t\t\t\treturn $tw.utils.compareVersions(a,b);\n\t\t\t}\n\t\t};\n\treturn (types[type] || types[options.defaultType] || types.number);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/widgets/action-confirm.js": {
"title": "$:/core/modules/widgets/action-confirm.js",
"text": "/*\\\n\ntitle: $:/core/modules/widgets/action-confirm.js\ntype: application/javascript\nmodule-type: widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ConfirmWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nConfirmWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nConfirmWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.parentDomNode = parent;\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nConfirmWidget.prototype.execute = function() {\n\tthis.message = this.getAttribute(\"$message\",$tw.language.getString(\"ConfirmAction\"));\n\tthis.prompt = (this.getAttribute(\"$prompt\",\"yes\") == \"no\" ? false : true);\n\tthis.makeChildWidgets();\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nConfirmWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$message\"] || changedAttributes[\"$prompt\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nConfirmWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar invokeActions = true,\n\t\thandled = true;\n\tif(this.prompt) {\n\t\tinvokeActions = confirm(this.message);\n\t}\n\tif(invokeActions) {\n\t\thandled = this.invokeActions(triggeringWidget,event);\n\t}\n\treturn handled;\n};\n\nConfirmWidget.prototype.allowActionPropagation = function() {\n\treturn false;\n};\n\nexports[\"action-confirm\"] = ConfirmWidget;\n\n})();",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-createtiddler.js": {
"title": "$:/core/modules/widgets/action-createtiddler.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-createtiddler.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to create a new tiddler with a unique name and specified fields.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw:false, require:false, exports:false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CreateTiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCreateTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCreateTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nCreateTiddlerWidget.prototype.execute = function() {\n\tthis.actionBaseTitle = this.getAttribute(\"$basetitle\");\n\tthis.hasBase = !!this.actionBaseTitle;\n\tthis.actionSaveTitle = this.getAttribute(\"$savetitle\");\n\tthis.actionSaveDraftTitle = this.getAttribute(\"$savedrafttitle\");\n\tthis.actionTimestamp = this.getAttribute(\"$timestamp\",\"yes\") === \"yes\";\n\t//Following params are new since 5.1.22\n\tthis.actionTemplate = this.getAttribute(\"$template\");\n\tthis.useTemplate = !!this.actionTemplate;\n\tthis.actionOverwrite = this.getAttribute(\"$overwrite\",\"no\");\n\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nCreateTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nCreateTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar title = this.wiki.getTiddlerText(\"$:/language/DefaultNewTiddlerTitle\"), // Get the initial new-tiddler title\n\t\tfields = {},\n\t\tcreationFields,\n\t\tmodificationFields;\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tfields[name] = attribute;\n\t\t}\n\t});\n\tif(this.actionTimestamp) {\n\t\tcreationFields = this.wiki.getCreationFields();\n\t\tmodificationFields = this.wiki.getModificationFields();\n\t}\n\tif(this.hasBase && this.actionOverwrite === \"no\") {\n\t\ttitle = this.wiki.generateNewTitle(this.actionBaseTitle);\n\t} else if (this.hasBase && this.actionOverwrite === \"yes\") {\n\t\ttitle = this.actionBaseTitle\n\t}\n\t// NO $basetitle BUT $template parameter is available\n\t// the title MUST be unique, otherwise the template would be overwritten\n\tif (!this.hasBase && this.useTemplate) {\n\t\ttitle = this.wiki.generateNewTitle(this.actionTemplate);\n\t} else if (!this.hasBase && !this.useTemplate) {\n\t\t// If NO $basetitle AND NO $template use initial title\n\t\t// DON'T overwrite any stuff\n\t\ttitle = this.wiki.generateNewTitle(title);\n\t}\n\tvar templateTiddler = this.wiki.getTiddler(this.actionTemplate) || {};\n\tvar tiddler = this.wiki.addTiddler(new $tw.Tiddler(templateTiddler.fields,creationFields,fields,modificationFields,{title: title}));\n\tif(this.actionSaveTitle) {\n\t\tthis.wiki.setTextReference(this.actionSaveTitle,title,this.getVariable(\"currentTiddler\"));\n\t}\n\tif(this.actionSaveDraftTitle) {\n\t\tthis.wiki.setTextReference(this.actionSaveDraftTitle,this.wiki.generateDraftTitle(title),this.getVariable(\"currentTiddler\"));\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-createtiddler\"] = CreateTiddlerWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-deletefield.js": {
"title": "$:/core/modules/widgets/action-deletefield.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-deletefield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete fields of a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\ttiddler = this.wiki.getTiddler(self.actionTiddler),\n\t\tremoveFields = {},\n\t\thasChanged = false;\n\tif(this.actionField && tiddler) {\n\t\tremoveFields[this.actionField] = undefined;\n\t\tif(this.actionField in tiddler.fields) {\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\tif(tiddler) {\n\t\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\t\tif(name.charAt(0) !== \"$\" && name !== \"title\") {\n\t\t\t\tremoveFields[name] = undefined;\n\t\t\t\thasChanged = true;\n\t\t\t}\n\t\t});\n\t\tif(hasChanged) {\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,removeFields,this.wiki.getModificationFields()));\t\t\t\n\t\t}\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletefield\"] = DeleteFieldWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-deletetiddler.js": {
"title": "$:/core/modules/widgets/action-deletetiddler.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-deletetiddler.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteTiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteTiddlerWidget.prototype.execute = function() {\n\tthis.actionFilter = this.getAttribute(\"$filter\");\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$filter\"] || changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar tiddlers = [];\n\tif(this.actionFilter) {\n\t\ttiddlers = this.wiki.filterTiddlers(this.actionFilter,this);\n\t}\n\tif(this.actionTiddler) {\n\t\ttiddlers.push(this.actionTiddler);\n\t}\n\tfor(var t=0; t<tiddlers.length; t++) {\n\t\tthis.wiki.deleteTiddler(tiddlers[t]);\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletetiddler\"] = DeleteTiddlerWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-listops.js": {
"title": "$:/core/modules/widgets/action-listops.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-listops.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to apply list operations to any tiddler field (defaults to the 'list' field of the current tiddler)\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\nvar ActionListopsWidget = function(parseTreeNode, options) {\n\tthis.initialise(parseTreeNode, options);\n};\n/**\n * Inherit from the base widget class\n */\nActionListopsWidget.prototype = new Widget();\n/**\n * Render this widget into the DOM\n */\nActionListopsWidget.prototype.render = function(parent, nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n/**\n * Compute the internal state of the widget\n */\nActionListopsWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.target = this.getAttribute(\"$tiddler\", this.getVariable(\n\t\t\"currentTiddler\"));\n\tthis.filter = this.getAttribute(\"$filter\");\n\tthis.subfilter = this.getAttribute(\"$subfilter\");\n\tthis.listField = this.getAttribute(\"$field\", \"list\");\n\tthis.listIndex = this.getAttribute(\"$index\");\n\tthis.filtertags = this.getAttribute(\"$tags\");\n};\n/**\n * \tRefresh the widget by ensuring our attributes are up to date\n */\nActionListopsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.$tiddler || changedAttributes.$filter ||\n\t\tchangedAttributes.$subfilter || changedAttributes.$field ||\n\t\tchangedAttributes.$index || changedAttributes.$tags) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n/**\n * \tInvoke the action associated with this widget\n */\nActionListopsWidget.prototype.invokeAction = function(triggeringWidget,\n\tevent) {\n\t//Apply the specified filters to the lists\n\tvar field = this.listField,\n\t\tindex,\n\t\ttype = \"!!\",\n\t\tlist = this.listField;\n\tif(this.listIndex) {\n\t\tfield = undefined;\n\t\tindex = this.listIndex;\n\t\ttype = \"##\";\n\t\tlist = this.listIndex;\n\t}\n\tif(this.filter) {\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(this.filter, this)));\n\t}\n\tif(this.subfilter) {\n\t\tvar subfilter = \"[list[\" + this.target + type + list + \"]] \" + this.subfilter;\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(subfilter, this)));\n\t}\n\tif(this.filtertags) {\n\t\tvar tiddler = this.wiki.getTiddler(this.target),\n\t\t\toldtags = tiddler ? (tiddler.fields.tags || []).slice(0) : [],\n\t\t\ttagfilter = \"[list[\" + this.target + \"!!tags]] \" + this.filtertags,\n\t\t\tnewtags = this.wiki.filterTiddlers(tagfilter,this);\n\t\tif($tw.utils.stringifyList(oldtags.sort()) !== $tw.utils.stringifyList(newtags.sort())) {\n\t\t\tthis.wiki.setText(this.target,\"tags\",undefined,$tw.utils.stringifyList(newtags));\t\t\t\n\t\t}\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-listops\"] = ActionListopsWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-log.js": {
"title": "$:/core/modules/widgets/action-log.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-log.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to log debug messages\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LogWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nLogWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLogWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\nLogWidget.prototype.execute = function(){\n\tthis.message = this.getAttribute(\"$$message\",\"debug\");\n\tthis.logAll = this.getAttribute(\"$$all\",\"no\") === \"yes\" ? true : false;\n\tthis.filter = this.getAttribute(\"$$filter\");\n}\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nLogWidget.prototype.refresh = function(changedTiddlers) {\n\tthis.refreshSelf();\n\treturn true;\n};\n\n/*\nInvoke the action associated with this widget\n*/\nLogWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tthis.log();\n\treturn true; // Action was invoked\n};\n\nLogWidget.prototype.log = function() {\n\tvar data = {},\n\t\tdataCount,\n\t\tallVars = {},\n\t\tfilteredVars;\n\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.substring(0,2) !== \"$$\") {\n\t\t\tdata[name] = attribute;\n\t\t}\t\t\n\t});\n\n\tfor(var v in this.variables) {\n\t\tallVars[v] = this.getVariable(v,{defaultValue:\"\"});\n\t}\t\n\tif(this.filter) {\n\t\tfilteredVars = this.wiki.compileFilter(this.filter).call(this.wiki,this.wiki.makeTiddlerIterator(allVars));\n\t\t$tw.utils.each(filteredVars,function(name) {\n\t\t\tdata[name] = allVars[name];\n\t\t});\t\t\n\t}\n\tdataCount = $tw.utils.count(data);\n\n\tconsole.group(this.message);\n\tif(dataCount > 0) {\n\t\t$tw.utils.logTable(data);\n\t}\n\tif(this.logAll || !dataCount) {\n\t\tconsole.groupCollapsed(\"All variables\");\n\t\t$tw.utils.logTable(allVars);\n\t\tconsole.groupEnd();\n\t}\n\tconsole.groupEnd();\n}\n\nexports[\"action-log\"] = LogWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-navigate.js": {
"title": "$:/core/modules/widgets/action-navigate.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-navigate.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to navigate to a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigateWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigateWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigateWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigateWidget.prototype.execute = function() {\n\tthis.actionTo = this.getAttribute(\"$to\");\n\tthis.actionScroll = this.getAttribute(\"$scroll\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nNavigateWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$to\"] || changedAttributes[\"$scroll\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nNavigateWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tevent = event || {};\n\tvar bounds = triggeringWidget && triggeringWidget.getBoundingClientRect && triggeringWidget.getBoundingClientRect(),\n\t\tsuppressNavigation = event.metaKey || event.ctrlKey || (event.button === 1);\n\tif(this.actionScroll === \"yes\") {\n\t\tsuppressNavigation = false;\n\t} else if(this.actionScroll === \"no\") {\n\t\tsuppressNavigation = true;\n\t}\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.actionTo === undefined ? this.getVariable(\"currentTiddler\") : this.actionTo,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: triggeringWidget,\n\t\tnavigateFromClientRect: bounds && { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: suppressNavigation\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-navigate\"] = NavigateWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-popup.js": {
"title": "$:/core/modules/widgets/action-popup.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-popup.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to trigger a popup.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ActionPopupWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nActionPopupWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nActionPopupWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nActionPopupWidget.prototype.execute = function() {\n\tthis.actionState = this.getAttribute(\"$state\");\n\tthis.actionCoords = this.getAttribute(\"$coords\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nActionPopupWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$state\"] || changedAttributes[\"$coords\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nActionPopupWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\t// Trigger the popup\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/,\n\t\tmatch = popupLocationRegExp.exec(this.actionCoords || \"\");\n\tif(match) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: null,\n\t\t\tdomNodeRect: {\n\t\t\t\tleft: parseFloat(match[1]),\n\t\t\t\ttop: parseFloat(match[2]),\n\t\t\t\twidth: parseFloat(match[3]),\n\t\t\t\theight: parseFloat(match[4])\n\t\t\t},\n\t\t\ttitle: this.actionState,\n\t\t\twiki: this.wiki\n\t\t});\n\t} else {\n\t\t$tw.popup.cancel(0);\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-popup\"] = ActionPopupWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-sendmessage.js": {
"title": "$:/core/modules/widgets/action-sendmessage.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-sendmessage.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to send a message\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SendMessageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSendMessageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSendMessageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSendMessageWidget.prototype.execute = function() {\n\tthis.actionMessage = this.getAttribute(\"$message\");\n\tthis.actionParam = this.getAttribute(\"$param\");\n\tthis.actionName = this.getAttribute(\"$name\");\n\tthis.actionValue = this.getAttribute(\"$value\",\"\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSendMessageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSendMessageWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\t// Get the string parameter\n\tvar param = this.actionParam;\n\t// Assemble the attributes as a hashmap\n\tvar paramObject = Object.create(null);\n\tvar count = 0;\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparamObject[name] = attribute;\n\t\t\tcount++;\n\t\t}\n\t});\n\t// Add name/value pair if present\n\tif(this.actionName) {\n\t\tparamObject[this.actionName] = this.actionValue;\n\t}\n\t// Dispatch the message\n\tthis.dispatchEvent({\n\t\ttype: this.actionMessage,\n\t\tparam: param,\n\t\tparamObject: paramObject,\n\t\ttiddlerTitle: this.getVariable(\"currentTiddler\"),\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tevent: event\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-sendmessage\"] = SendMessageWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-setfield.js": {
"title": "$:/core/modules/widgets/action-setfield.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-setfield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to set a single field or index on a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n\tthis.actionIndex = this.getAttribute(\"$index\");\n\tthis.actionValue = this.getAttribute(\"$value\");\n\tthis.actionTimestamp = this.getAttribute(\"$timestamp\",\"yes\") === \"yes\";\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSetFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"] || changedAttributes[\"$field\"] || changedAttributes[\"$index\"] || changedAttributes[\"$value\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSetFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\toptions = {};\n\toptions.suppressTimestamp = !this.actionTimestamp;\n\tif((typeof this.actionField == \"string\") || (typeof this.actionIndex == \"string\") || (typeof this.actionValue == \"string\")) {\n\t\tthis.wiki.setText(this.actionTiddler,this.actionField,this.actionIndex,this.actionValue,options);\n\t}\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tself.wiki.setText(self.actionTiddler,name,undefined,attribute,options);\n\t\t}\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-setfield\"] = SetFieldWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/browse.js": {
"title": "$:/core/modules/widgets/browse.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/browse.js\ntype: application/javascript\nmodule-type: widget\n\nBrowse widget for browsing for files to import\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar BrowseWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nBrowseWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nBrowseWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"file\");\n\tif(this.browseMultiple) {\n\t\tdomNode.setAttribute(\"multiple\",\"multiple\");\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\t// Nw.js supports \"nwsaveas\" to force a \"save as\" dialogue that allows a new or existing file to be selected\n\tif(this.nwsaveas) {\n\t\tdomNode.setAttribute(\"nwsaveas\",this.nwsaveas);\n\t}\n\tif(this.accept) {\n\t\tdomNode.setAttribute(\"accept\",this.accept);\n\t}\n\t// Nw.js supports \"webkitdirectory\" and \"nwdirectory\" to allow a directory to be selected\n\tif(this.webkitdirectory) {\n\t\tdomNode.setAttribute(\"webkitdirectory\",this.webkitdirectory);\n\t}\n\tif(this.nwdirectory) {\n\t\tdomNode.setAttribute(\"nwdirectory\",this.nwdirectory);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"change\",function (event) {\n\t\tif(self.message) {\n\t\t\tself.dispatchEvent({type: self.message, param: self.param, files: event.target.files});\n\t\t} else {\n\t\t\tself.wiki.readFiles(event.target.files,{\n\t\t\t\tcallback: function(tiddlerFieldsArray) {\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t\t\t},\n\t\t\t\tdeserializer: self.deserializer\n\t\t\t});\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nBrowseWidget.prototype.execute = function() {\n\tthis.browseMultiple = this.getAttribute(\"multiple\");\n\tthis.deserializer = this.getAttribute(\"deserializer\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.nwsaveas = this.getAttribute(\"nwsaveas\");\n\tthis.accept = this.getAttribute(\"accept\");\n\tthis.webkitdirectory = this.getAttribute(\"webkitdirectory\");\n\tthis.nwdirectory = this.getAttribute(\"nwdirectory\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nBrowseWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.browse = BrowseWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/button.js": {
"title": "$:/core/modules/widgets/button.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/button.js\ntype: application/javascript\nmodule-type: widget\n\nButton widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ButtonWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nButtonWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nButtonWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this,\n\t\ttag = \"button\",\n\t\tdomNode;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tif(this.buttonTag && $tw.config.htmlUnsafeElements.indexOf(this.buttonTag) === -1) {\n\t\ttag = this.buttonTag;\n\t}\n\tdomNode = this.document.createElement(tag);\n\tthis.domNode = domNode;\n\t// Assign classes\n\tvar classes = this[\"class\"].split(\" \") || [],\n\t\tisPoppedUp = (this.popup || this.popupTitle) && this.isPoppedUp();\n\tif(this.selectedClass) {\n\t\tif((this.set || this.setTitle) && this.setTo && this.isSelected()) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t\tif(isPoppedUp) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t}\n\tif(isPoppedUp) {\n\t\t$tw.utils.pushTop(classes,\"tc-popup-handle\");\n\t}\n\tdomNode.className = classes.join(\" \");\n\t// Assign other attributes\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Set the tabindex\n\tif(this.tabIndex) {\n\t\tdomNode.setAttribute(\"tabindex\",this.tabIndex);\n\t}\n\tif(this.isDisabled === \"yes\") {\n\t\tdomNode.setAttribute(\"disabled\",true);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"click\",function (event) {\n\t\tvar handled = false;\n\t\tif(self.invokeActions(self,event)) {\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.to) {\n\t\t\tself.navigateTo(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.message) {\n\t\t\tself.dispatchMessage(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.popup || self.popupTitle) {\n\t\t\tself.triggerPopup(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.set || self.setTitle) {\n\t\t\tself.setTiddler();\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.actions) {\n\t\t\tvar modifierKey = $tw.keyboardManager.getEventModifierKeyDescriptor(event);\n\t\t\tself.invokeActionString(self.actions,self,event,{modifier: modifierKey});\n\t\t}\n\t\tif(handled) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\treturn handled;\n\t},false);\n\t// Make it draggable if required\n\tif(this.dragTiddler || this.dragFilter) {\n\t\t$tw.utils.makeDraggable({\n\t\t\tdomNode: domNode,\n\t\t\tdragTiddlerFn: function() {return self.dragTiddler;},\n\t\t\tdragFilterFn: function() {return self.dragFilter;},\n\t\t\twidget: this\n\t\t});\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nWe don't allow actions to propagate because we trigger actions ourselves\n*/\nButtonWidget.prototype.allowActionPropagation = function() {\n\treturn false;\n};\n\nButtonWidget.prototype.getBoundingClientRect = function() {\n\treturn this.domNodes[0].getBoundingClientRect();\n};\n\nButtonWidget.prototype.isSelected = function() {\n return this.setTitle ? (this.setField ? this.wiki.getTiddler(this.setTitle).getFieldString(this.setField) === this.setTo :\n\t\t(this.setIndex ? this.wiki.extractTiddlerDataItem(this.setTitle,this.setIndex) === this.setTo :\n\t\t\tthis.wiki.getTiddlerText(this.setTitle))) || this.defaultSetValue || this.getVariable(\"currentTiddler\") :\n\t\tthis.wiki.getTextReference(this.set,this.defaultSetValue,this.getVariable(\"currentTiddler\")) === this.setTo;\n};\n\nButtonWidget.prototype.isPoppedUp = function() {\n\tvar tiddler = this.popupTitle ? this.wiki.getTiddler(this.popupTitle) : this.wiki.getTiddler(this.popup);\n\tvar result = tiddler && tiddler.fields.text ? $tw.popup.readPopupState(tiddler.fields.text) : false;\n\treturn result;\n};\n\nButtonWidget.prototype.navigateTo = function(event) {\n\tvar bounds = this.getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1),\n\t\tevent: event\n\t});\n};\n\nButtonWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\"), event: event});\n};\n\nButtonWidget.prototype.triggerPopup = function(event) {\n\tif(this.popupTitle) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNodes[0],\n\t\t\ttitle: this.popupTitle,\n\t\t\twiki: this.wiki,\n\t\t\tnoStateReference: true\n\t\t});\n\t} else {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNodes[0],\n\t\t\ttitle: this.popup,\n\t\t\twiki: this.wiki\n\t\t});\n\t}\n};\n\nButtonWidget.prototype.setTiddler = function() {\n\tif(this.setTitle) {\n\t\tthis.setField ? this.wiki.setText(this.setTitle,this.setField,undefined,this.setTo) :\n\t\t\t\t(this.setIndex ? this.wiki.setText(this.setTitle,undefined,this.setIndex,this.setTo) :\n\t\t\t\tthis.wiki.setText(this.setTitle,\"text\",undefined,this.setTo));\n\t} else {\n\t\tthis.wiki.setTextReference(this.set,this.setTo,this.getVariable(\"currentTiddler\"));\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nButtonWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.actions = this.getAttribute(\"actions\");\n\tthis.to = this.getAttribute(\"to\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.set = this.getAttribute(\"set\");\n\tthis.setTo = this.getAttribute(\"setTo\");\n\tthis.popup = this.getAttribute(\"popup\");\n\tthis.hover = this.getAttribute(\"hover\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.style = this.getAttribute(\"style\");\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis.selectedClass = this.getAttribute(\"selectedClass\");\n\tthis.defaultSetValue = this.getAttribute(\"default\",\"\");\n\tthis.buttonTag = this.getAttribute(\"tag\");\n\tthis.dragTiddler = this.getAttribute(\"dragTiddler\");\n\tthis.dragFilter = this.getAttribute(\"dragFilter\");\n\tthis.setTitle = this.getAttribute(\"setTitle\");\n\tthis.setField = this.getAttribute(\"setField\");\n\tthis.setIndex = this.getAttribute(\"setIndex\");\n\tthis.popupTitle = this.getAttribute(\"popupTitle\");\n\tthis.tabIndex = this.getAttribute(\"tabindex\");\n\tthis.isDisabled = this.getAttribute(\"disabled\",\"no\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\nButtonWidget.prototype.updateDomNodeClasses = function() {\n\tvar domNodeClasses = this.domNode.className.split(\" \"),\n\t\toldClasses = this.class.split(\" \"),\n\t\tnewClasses;\t\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tnewClasses = this.class.split(\" \");\n\t//Remove classes assigned from the old value of class attribute\n\t$tw.utils.each(oldClasses,function(oldClass){\n\t\tvar i = domNodeClasses.indexOf(oldClass);\n\t\tif(i !== -1) {\n\t\t\tdomNodeClasses.splice(i,1);\n\t\t}\n\t});\n\t//Add new classes from updated class attribute.\n\t$tw.utils.pushTop(domNodeClasses,newClasses);\n\tthis.domNode.className = domNodeClasses.join(\" \");\n}\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nButtonWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.actions || changedAttributes.to || changedAttributes.message || changedAttributes.param || changedAttributes.set || changedAttributes.setTo || changedAttributes.popup || changedAttributes.hover || changedAttributes.selectedClass || changedAttributes.style || changedAttributes.dragFilter || changedAttributes.dragTiddler || (this.set && changedTiddlers[this.set]) || (this.popup && changedTiddlers[this.popup]) || (this.popupTitle && changedTiddlers[this.popupTitle]) || changedAttributes.setTitle || changedAttributes.setField || changedAttributes.setIndex || changedAttributes.popupTitle || changedAttributes.disabled) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedAttributes[\"class\"]) {\n\t\tthis.updateDomNodeClasses();\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.button = ButtonWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/checkbox.js": {
"title": "$:/core/modules/widgets/checkbox.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/checkbox.js\ntype: application/javascript\nmodule-type: widget\n\nCheckbox widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CheckboxWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCheckboxWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCheckboxWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",this.checkboxClass);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"checkbox\");\n\tif(this.getValue()) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tif(this.isDisabled === \"yes\") {\n\t\tthis.inputDomNode.setAttribute(\"disabled\",true);\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nCheckboxWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.checkboxTitle);\n\tif(tiddler) {\n\t\tif(this.checkboxTag) {\n\t\t\tif(this.checkboxInvertTag) {\n\t\t\t\treturn !tiddler.hasTag(this.checkboxTag);\n\t\t\t} else {\n\t\t\t\treturn tiddler.hasTag(this.checkboxTag);\n\t\t\t}\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tvar value;\n\t\t\tif($tw.utils.hop(tiddler.fields,this.checkboxField)) {\n\t\t\t\tvalue = tiddler.fields[this.checkboxField] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = this.checkboxDefault || \"\";\n\t\t\t}\n\t\t\tif(value === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(value === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tif(this.checkboxIndex) {\n\t\t\tvar value = this.wiki.extractTiddlerDataItem(tiddler,this.checkboxIndex,this.checkboxDefault || \"\");\n\t\t\tif(value === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(value === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif(this.checkboxTag) {\n\t\t\treturn false;\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tif(this.checkboxDefault === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(this.checkboxDefault === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\nCheckboxWidget.prototype.handleChangeEvent = function(event) {\n\tvar checked = this.inputDomNode.checked,\n\t\ttiddler = this.wiki.getTiddler(this.checkboxTitle),\n\t\tfallbackFields = {text: \"\"},\n\t\tnewFields = {title: this.checkboxTitle},\n\t\thasChanged = false,\n\t\ttagCheck = false,\n\t\thasTag = tiddler && tiddler.hasTag(this.checkboxTag),\n\t\tvalue = checked ? this.checkboxChecked : this.checkboxUnchecked;\n\tif(this.checkboxTag && this.checkboxInvertTag === \"yes\") {\n\t\ttagCheck = hasTag === checked;\n\t} else {\n\t\ttagCheck = hasTag !== checked;\n\t}\n\t// Set the tag if specified\n\tif(this.checkboxTag && (!tiddler || tagCheck)) {\n\t\tnewFields.tags = tiddler ? (tiddler.fields.tags || []).slice(0) : [];\n\t\tvar pos = newFields.tags.indexOf(this.checkboxTag);\n\t\tif(pos !== -1) {\n\t\t\tnewFields.tags.splice(pos,1);\n\t\t}\n\t\tif(this.checkboxInvertTag === \"yes\" && !checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t} else if(this.checkboxInvertTag !== \"yes\" && checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t}\n\t\thasChanged = true;\n\t}\n\t// Set the field if specified\n\tif(this.checkboxField) {\n\t\tif(!tiddler || tiddler.fields[this.checkboxField] !== value) {\n\t\t\tnewFields[this.checkboxField] = value;\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\t// Set the index if specified\n\tif(this.checkboxIndex) {\n\t\tvar indexValue = this.wiki.extractTiddlerDataItem(this.checkboxTitle,this.checkboxIndex);\n\t\tif(!tiddler || indexValue !== value) {\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\tif(hasChanged) {\n\t\tif(this.checkboxIndex) {\n\t\t\tthis.wiki.setText(this.checkboxTitle,\"\",this.checkboxIndex,value);\n\t\t} else {\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),fallbackFields,tiddler,newFields,this.wiki.getModificationFields()));\n\t\t}\n\t}\n\t// Trigger actions\n\tif(this.checkboxActions) {\n\t\tthis.invokeActionString(this.checkboxActions,this,event);\n\t}\n\tif(this.checkboxCheckActions && checked) {\n\t\tthis.invokeActionString(this.checkboxCheckActions,this,event);\n\t}\n\tif(this.checkboxUncheckActions && !checked) {\n\t\tthis.invokeActionString(this.checkboxUncheckActions,this,event);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCheckboxWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.checkboxActions = this.getAttribute(\"actions\");\n\tthis.checkboxCheckActions = this.getAttribute(\"checkactions\");\n\tthis.checkboxUncheckActions = this.getAttribute(\"uncheckactions\");\n\tthis.checkboxTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.checkboxTag = this.getAttribute(\"tag\");\n\tthis.checkboxField = this.getAttribute(\"field\");\n\tthis.checkboxIndex = this.getAttribute(\"index\");\n\tthis.checkboxChecked = this.getAttribute(\"checked\");\n\tthis.checkboxUnchecked = this.getAttribute(\"unchecked\");\n\tthis.checkboxDefault = this.getAttribute(\"default\");\n\tthis.checkboxClass = this.getAttribute(\"class\",\"\");\n\tthis.checkboxInvertTag = this.getAttribute(\"invertTag\",\"\");\n\tthis.isDisabled = this.getAttribute(\"disabled\",\"no\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCheckboxWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.tag || changedAttributes.invertTag || changedAttributes.field || changedAttributes.index || changedAttributes.checked || changedAttributes.unchecked || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.disabled) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.checkboxTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue();\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.checkbox = CheckboxWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/codeblock.js": {
"title": "$:/core/modules/widgets/codeblock.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/codeblock.js\ntype: application/javascript\nmodule-type: widget\n\nCode block node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CodeBlockWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCodeBlockWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCodeBlockWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar codeNode = this.document.createElement(\"code\"),\n\t\tdomNode = this.document.createElement(\"pre\");\n\tcodeNode.appendChild(this.document.createTextNode(this.getAttribute(\"code\")));\n\tdomNode.appendChild(codeNode);\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n\tif(this.postRender) {\n\t\tthis.postRender();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCodeBlockWidget.prototype.execute = function() {\n\tthis.language = this.getAttribute(\"language\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCodeBlockWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.codeblock = CodeBlockWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/count.js": {
"title": "$:/core/modules/widgets/count.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/count.js\ntype: application/javascript\nmodule-type: widget\n\nCount widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CountWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCountWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCountWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.currentCount);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nCountWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Execute the filter\n\tif(this.filter) {\n\t\tthis.currentCount = this.wiki.filterTiddlers(this.filter,this).length;\n\t} else {\n\t\tthis.currentCount = \"0\";\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCountWidget.prototype.refresh = function(changedTiddlers) {\n\t// Re-execute the filter to get the count\n\tthis.computeAttributes();\n\tvar oldCount = this.currentCount;\n\tthis.execute();\n\tif(this.currentCount !== oldCount) {\n\t\t// Regenerate and rerender the widget and replace the existing DOM node\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n\n};\n\nexports.count = CountWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/diff-text.js": {
"title": "$:/core/modules/widgets/diff-text.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/diff-text.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to display a diff between two texts\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget,\n\tdmp = require(\"$:/core/modules/utils/diff-match-patch/diff_match_patch.js\");\n\nvar DiffTextWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDiffTextWidget.prototype = new Widget();\n\nDiffTextWidget.prototype.invisibleCharacters = {\n\t\"\\n\": \"↩︎\\n\",\n\t\"\\r\": \"⇠\",\n\t\"\\t\": \"⇥\\t\"\n};\n\n/*\nRender this widget into the DOM\n*/\nDiffTextWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create the diff\n\tvar dmpObject = new dmp.diff_match_patch(),\n\t\tdiffs = dmpObject.diff_main(this.getAttribute(\"source\"),this.getAttribute(\"dest\"));\n\t// Apply required cleanup\n\tswitch(this.getAttribute(\"cleanup\",\"semantic\")) {\n\t\tcase \"none\":\n\t\t\t// No cleanup\n\t\t\tbreak;\n\t\tcase \"efficiency\":\n\t\t\tdmpObject.diff_cleanupEfficiency(diffs);\n\t\t\tbreak;\n\t\tdefault: // case \"semantic\"\n\t\t\tdmpObject.diff_cleanupSemantic(diffs);\n\t\t\tbreak;\n\t}\n\t// Create the elements\n\tvar domContainer = this.document.createElement(\"div\"), \n\t\tdomDiff = this.createDiffDom(diffs);\n\tparent.insertBefore(domContainer,nextSibling);\n\t// Set variables\n\tthis.setVariable(\"diff-count\",diffs.reduce(function(acc,diff) {\n\t\tif(diff[0] !== dmp.DIFF_EQUAL) {\n\t\t\tacc++;\n\t\t}\n\t\treturn acc;\n\t},0).toString());\n\t// Render child widgets\n\tthis.renderChildren(domContainer,null);\n\t// Render the diff\n\tdomContainer.appendChild(domDiff);\n\t// Save our container\n\tthis.domNodes.push(domContainer);\n};\n\n/*\nCreate DOM elements representing a list of diffs\n*/\nDiffTextWidget.prototype.createDiffDom = function(diffs) {\n\tvar self = this;\n\t// Create the element and assign the attributes\n\tvar domPre = this.document.createElement(\"pre\"),\n\t\tdomCode = this.document.createElement(\"code\");\n\t$tw.utils.each(diffs,function(diff) {\n\t\tvar tag = diff[0] === dmp.DIFF_INSERT ? \"ins\" : (diff[0] === dmp.DIFF_DELETE ? \"del\" : \"span\"),\n\t\t\tclassName = diff[0] === dmp.DIFF_INSERT ? \"tc-diff-insert\" : (diff[0] === dmp.DIFF_DELETE ? \"tc-diff-delete\" : \"tc-diff-equal\"),\n\t\t\tdom = self.document.createElement(tag),\n\t\t\ttext = diff[1],\n\t\t\tcurrPos = 0,\n\t\t\tre = /([\\x00-\\x1F])/mg,\n\t\t\tmatch = re.exec(text),\n\t\t\tspan,\n\t\t\tprintable;\n\t\tdom.className = className;\n\t\twhile(match) {\n\t\t\tif(currPos < match.index) {\n\t\t\t\tdom.appendChild(self.document.createTextNode(text.slice(currPos,match.index)));\n\t\t\t}\n\t\t\tspan = self.document.createElement(\"span\");\n\t\t\tspan.className = \"tc-diff-invisible\";\n\t\t\tprintable = self.invisibleCharacters[match[0]] || (\"[0x\" + match[0].charCodeAt(0).toString(16) + \"]\");\n\t\t\tspan.appendChild(self.document.createTextNode(printable));\n\t\t\tdom.appendChild(span);\n\t\t\tcurrPos = match.index + match[0].length;\n\t\t\tmatch = re.exec(text);\n\t\t}\n\t\tif(currPos < text.length) {\n\t\t\tdom.appendChild(self.document.createTextNode(text.slice(currPos)));\n\t\t}\n\t\tdomCode.appendChild(dom);\n\t});\n\tdomPre.appendChild(domCode);\n\treturn domPre;\n};\n\n/*\nCompute the internal state of the widget\n*/\nDiffTextWidget.prototype.execute = function() {\n\t// Make child widgets\n\tvar parseTreeNodes;\n\tif(this.parseTreeNode && this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\tparseTreeNodes = this.parseTreeNode.children;\n\t} else {\n\t\tparseTreeNodes = [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: \"$:/language/Diffs/CountMessage\"}\n\t\t\t}\n\t\t}];\n\t}\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDiffTextWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.source || changedAttributes.dest || changedAttributes.cleanup) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports[\"diff-text\"] = DiffTextWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/draggable.js": {
"title": "$:/core/modules/widgets/draggable.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/draggable.js\ntype: application/javascript\nmodule-type: widget\n\nDraggable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DraggableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDraggableWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDraggableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Sanitise the specified tag\n\tvar tag = this.draggableTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"div\";\n\t}\n\t// Create our element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = [\"tc-draggable\"];\n\tif(this.draggableClasses) {\n\t\tclasses.push(this.draggableClasses);\n\t}\n\tdomNode.setAttribute(\"class\",classes.join(\" \"));\n\t// Add event handlers\n\t$tw.utils.makeDraggable({\n\t\tdomNode: domNode,\n\t\tdragTiddlerFn: function() {return self.getAttribute(\"tiddler\");},\n\t\tdragFilterFn: function() {return self.getAttribute(\"filter\");},\n\t\tstartActions: self.startActions,\n\t\tendActions: self.endActions,\n\t\twidget: this\n\t});\n\t// Insert the link into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nDraggableWidget.prototype.execute = function() {\n\t// Pick up our attributes\n\tthis.draggableTag = this.getAttribute(\"tag\",\"div\");\n\tthis.draggableClasses = this.getAttribute(\"class\");\n\tthis.startActions = this.getAttribute(\"startactions\");\n\tthis.endActions = this.getAttribute(\"endactions\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDraggableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tag || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.draggable = DraggableWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/droppable.js": {
"title": "$:/core/modules/widgets/droppable.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/droppable.js\ntype: application/javascript\nmodule-type: widget\n\nDroppable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DroppableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDroppableWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDroppableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this,\n\t\ttag = this.parseTreeNode.isBlock ? \"div\" : \"span\",\n\t\tdomNode;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\tif(this.droppableTag && $tw.config.htmlUnsafeElements.indexOf(this.droppableTag) === -1) {\n\t\ttag = this.droppableTag;\n\t}\n\t// Create element and assign classes\n\tdomNode = this.document.createElement(tag);\n\tthis.domNode = domNode;\n\tthis.assignDomNodeClasses();\n\t// Add event handlers\n\tif(this.droppableEnable) {\n\t\t$tw.utils.addEventListeners(domNode,[\n\t\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"}\n\t\t]);\t\t\n\t} else {\n\t\t$tw.utils.addClass(this.domNode,this.disabledClass);\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n\t// Stack of outstanding enter/leave events\n\tthis.currentlyEntered = [];\n};\n\nDroppableWidget.prototype.enterDrag = function(event) {\n\tif(this.currentlyEntered.indexOf(event.target) === -1) {\n\t\tthis.currentlyEntered.push(event.target);\n\t}\n\t// If we're entering for the first time we need to apply highlighting\n\t$tw.utils.addClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDroppableWidget.prototype.leaveDrag = function(event) {\n\tvar pos = this.currentlyEntered.indexOf(event.target);\n\tif(pos !== -1) {\n\t\tthis.currentlyEntered.splice(pos,1);\n\t}\n\t// Remove highlighting if we're leaving externally. The hacky second condition is to resolve a problem with Firefox whereby there is an erroneous dragenter event if the node being dragged is within the dropzone\n\tif(this.currentlyEntered.length === 0 || (this.currentlyEntered.length === 1 && this.currentlyEntered[0] === $tw.dragInProgress)) {\n\t\tthis.currentlyEntered = [];\n\t\tif(this.domNodes[0]) {\n\t\t\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t\t}\n\t}\n};\n\nDroppableWidget.prototype.handleDragEnterEvent = function(event) {\n\tthis.enterDrag(event);\n\t// Tell the browser that we're ready to handle the drop\n\tevent.preventDefault();\n\t// Tell the browser not to ripple the drag up to any parent drop handlers\n\tevent.stopPropagation();\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDragOverEvent = function(event) {\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Tell the browser that we're still interested in the drop\n\tevent.preventDefault();\n\t// Set the drop effect\n\tevent.dataTransfer.dropEffect = this.droppableEffect;\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDragLeaveEvent = function(event) {\n\tthis.leaveDrag(event);\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDropEvent = function(event) {\n\tvar self = this;\n\tthis.leaveDrag(event);\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\tvar dataTransfer = event.dataTransfer;\n\t// Remove highlighting\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t// Try to import the various data types we understand\n\t$tw.utils.importDataTransfer(dataTransfer,null,function(fieldsArray) {\n\t\tfieldsArray.forEach(function(fields) {\n\t\t\tself.performActions(fields.title || fields.text,event);\n\t\t});\n\t});\n\t// Tell the browser that we handled the drop\n\tevent.preventDefault();\n\t// Stop the drop ripple up to any parent handlers\n\tevent.stopPropagation();\n\treturn false;\n};\n\nDroppableWidget.prototype.performActions = function(title,event) {\n\tif(this.droppableActions) {\n\t\tvar modifierKey = $tw.keyboardManager.getEventModifierKeyDescriptor(event);\n\t\tthis.invokeActionString(this.droppableActions,this,event,{actionTiddler: title, modifier: modifierKey});\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDroppableWidget.prototype.execute = function() {\n\tthis.droppableActions = this.getAttribute(\"actions\");\n\tthis.droppableEffect = this.getAttribute(\"effect\",\"copy\");\n\tthis.droppableTag = this.getAttribute(\"tag\");\n\tthis.droppableEnable = (this.getAttribute(\"enable\") || \"yes\") === \"yes\";\n\tthis.disabledClass = this.getAttribute(\"disabledClass\",\"\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\nDroppableWidget.prototype.assignDomNodeClasses = function() {\n\tvar classes = this.getAttribute(\"class\",\"\").split(\" \");\n\tclasses.push(\"tc-droppable\");\n\tthis.domNode.className = classes.join(\" \");\t\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDroppableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tag || changedAttributes.enable || changedAttributes.disabledClass || changedAttributes.actions || changedAttributes.effect) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedAttributes[\"class\"]) {\n\t\tthis.assignDomNodeClasses();\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.droppable = DroppableWidget;\n\n})();",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/dropzone.js": {
"title": "$:/core/modules/widgets/dropzone.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/dropzone.js\ntype: application/javascript\nmodule-type: widget\n\nDropzone widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DropZoneWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDropZoneWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDropZoneWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"div\");\n\tdomNode.className = this.dropzoneClass || \"tc-dropzone\";\n\t// Add event handlers\n\tif(this.dropzoneEnable) {\n\t\t$tw.utils.addEventListeners(domNode,[\n\t\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"},\n\t\t\t{name: \"paste\", handlerObject: this, handlerMethod: \"handlePasteEvent\"},\n\t\t\t{name: \"dragend\", handlerObject: this, handlerMethod: \"handleDragEndEvent\"}\n\t\t]);\t\t\n\t}\n\tdomNode.addEventListener(\"click\",function (event) {\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n\t// Stack of outstanding enter/leave events\n\tthis.currentlyEntered = [];\n};\n\nDropZoneWidget.prototype.enterDrag = function(event) {\n\tif(this.currentlyEntered.indexOf(event.target) === -1) {\n\t\tthis.currentlyEntered.push(event.target);\n\t}\n\t// If we're entering for the first time we need to apply highlighting\n\t$tw.utils.addClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDropZoneWidget.prototype.leaveDrag = function(event) {\n\tvar pos = this.currentlyEntered.indexOf(event.target);\n\tif(pos !== -1) {\n\t\tthis.currentlyEntered.splice(pos,1);\n\t}\n\t// Remove highlighting if we're leaving externally\n\tif(this.currentlyEntered.length === 0) {\n\t\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t}\n};\n\nDropZoneWidget.prototype.handleDragEnterEvent = function(event) {\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\tthis.enterDrag(event);\n\t// Tell the browser that we're ready to handle the drop\n\tevent.preventDefault();\n\t// Tell the browser not to ripple the drag up to any parent drop handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.handleDragOverEvent = function(event) {\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\t// Tell the browser that we're still interested in the drop\n\tevent.preventDefault();\n\tevent.dataTransfer.dropEffect = \"copy\"; // Explicitly show this is a copy\n};\n\nDropZoneWidget.prototype.handleDragLeaveEvent = function(event) {\n\tthis.leaveDrag(event);\n};\n\nDropZoneWidget.prototype.handleDragEndEvent = function(event) {\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDropZoneWidget.prototype.handleDropEvent = function(event) {\n\tvar self = this,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray), autoOpenOnImport: self.autoOpenOnImport, importTitle: self.importTitle});\n\t\t};\n\tthis.leaveDrag(event);\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\tvar self = this,\n\t\tdataTransfer = event.dataTransfer;\n\t// Remove highlighting\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t// Import any files in the drop\n\tvar numFiles = 0;\n\tif(dataTransfer.files) {\n\t\tnumFiles = this.wiki.readFiles(dataTransfer.files,{\n\t\t\tcallback: readFileCallback,\n\t\t\tdeserializer: this.dropzoneDeserializer\n\t\t});\n\t}\n\t// Try to import the various data types we understand\n\tif(numFiles === 0) {\n\t\t$tw.utils.importDataTransfer(dataTransfer,this.wiki.generateNewTitle(\"Untitled\"),readFileCallback);\n\t}\n\t// Tell the browser that we handled the drop\n\tevent.preventDefault();\n\t// Stop the drop ripple up to any parent handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.handlePasteEvent = function(event) {\n\tvar self = this,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray), autoOpenOnImport: self.autoOpenOnImport, importTitle: self.importTitle});\n\t\t};\n\t// Let the browser handle it if we're in a textarea or input box\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) == -1 && !event.target.isContentEditable) {\n\t\tvar self = this,\n\t\t\titems = event.clipboardData.items;\n\t\t// Enumerate the clipboard items\n\t\tfor(var t = 0; t<items.length; t++) {\n\t\t\tvar item = items[t];\n\t\t\tif(item.kind === \"file\") {\n\t\t\t\t// Import any files\n\t\t\t\tthis.wiki.readFile(item.getAsFile(),{\n\t\t\t\t\tcallback: readFileCallback,\n\t\t\t\t\tdeserializer: this.dropzoneDeserializer\n\t\t\t\t});\n\t\t\t} else if(item.kind === \"string\") {\n\t\t\t\t// Create tiddlers from string items\n\t\t\t\tvar type = item.type;\n\t\t\t\titem.getAsString(function(str) {\n\t\t\t\t\tvar tiddlerFields = {\n\t\t\t\t\t\ttitle: self.wiki.generateNewTitle(\"Untitled\"),\n\t\t\t\t\t\ttext: str,\n\t\t\t\t\t\ttype: type\n\t\t\t\t\t};\n\t\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\t\tconsole.log(\"Importing string '\" + str + \"', type: '\" + type + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify([tiddlerFields]), autoOpenOnImport: self.autoOpenOnImport, importTitle: self.importTitle});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t// Tell the browser that we've handled the paste\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDropZoneWidget.prototype.execute = function() {\n\tthis.dropzoneClass = this.getAttribute(\"class\");\n\tthis.dropzoneDeserializer = this.getAttribute(\"deserializer\");\n\tthis.dropzoneEnable = (this.getAttribute(\"enable\") || \"yes\") === \"yes\";\n\tthis.autoOpenOnImport = this.getAttribute(\"autoOpenOnImport\");\n\tthis.importTitle = this.getAttribute(\"importTitle\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDropZoneWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.enable || changedAttributes.autoOpenOnImport || changedAttributes.importTitle || changedAttributes.deserializer || changedAttributes.class) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.dropzone = DropZoneWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-binary.js": {
"title": "$:/core/modules/widgets/edit-binary.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-binary.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-binary widget; placeholder for editing binary tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar BINARY_WARNING_MESSAGE = \"$:/core/ui/BinaryWarning\";\nvar EXPORT_BUTTON_IMAGE = \"$:/core/images/export-button\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBinaryWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBinaryWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBinaryWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBinaryWidget.prototype.execute = function() {\n\t// Get our parameters\n\tvar editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tvar tiddler = this.wiki.getTiddler(editTitle);\n\tvar type = tiddler.fields.type;\n\tvar text = tiddler.fields.text;\n\t// Transclude the binary data tiddler warning message\n\tvar warn = {\n\t\ttype: \"element\",\n\t\ttag: \"p\",\n\t\tchildren: [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: BINARY_WARNING_MESSAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Create download link based on draft tiddler title\n\tvar link = {\n\t\ttype: \"element\",\n\t\ttag: \"a\",\n\t\tattributes: {\n\t\t\ttitle: {type: \"indirect\", textReference: \"!!draft.title\"},\n\t\t\tdownload: {type: \"indirect\", textReference: \"!!draft.title\"}\n\t\t},\n\t\tchildren: [{\n\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: EXPORT_BUTTON_IMAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Set the link href to internal data URI (no external)\n\tif(text) {\n\t\tlink.attributes.href = {\n\t\t\ttype: \"string\", \n\t\t\tvalue: \"data:\" + type + \";base64,\" + text\n\t\t};\n\t}\n\t// Combine warning message and download link in a div\n\tvar element = {\n\t\ttype: \"element\",\n\t\ttag: \"div\",\n\t\tattributes: {\n\t\t\tclass: {type: \"string\", value: \"tc-binary-warning\"}\n\t\t},\n\t\tchildren: [warn, link]\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets([element]);\n};\n\n/*\nRefresh by refreshing our child widget\n*/\nEditBinaryWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"edit-binary\"] = EditBinaryWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-bitmap.js": {
"title": "$:/core/modules/widgets/edit-bitmap.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-bitmap.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-bitmap widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Default image sizes\nvar DEFAULT_IMAGE_WIDTH = 600,\n\tDEFAULT_IMAGE_HEIGHT = 370,\n\tDEFAULT_IMAGE_TYPE = \"image/png\";\n\n// Configuration tiddlers\nvar LINE_WIDTH_TITLE = \"$:/config/BitmapEditor/LineWidth\",\n\tLINE_COLOUR_TITLE = \"$:/config/BitmapEditor/Colour\",\n\tLINE_OPACITY_TITLE = \"$:/config/BitmapEditor/Opacity\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBitmapWidget = function(parseTreeNode,options) {\n\t// Initialise the editor operations if they've not been done already\n\tif(!this.editorOperations) {\n\t\tEditBitmapWidget.prototype.editorOperations = {};\n\t\t$tw.modules.applyMethods(\"bitmapeditoroperation\",this.editorOperations);\n\t}\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBitmapWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBitmapWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create the wrapper for the toolbar and render its content\n\tthis.toolbarNode = this.document.createElement(\"div\");\n\tthis.toolbarNode.className = \"tc-editor-toolbar\";\n\tparent.insertBefore(this.toolbarNode,nextSibling);\n\tthis.domNodes.push(this.toolbarNode);\n\t// Create the on-screen canvas\n\tthis.canvasDomNode = $tw.utils.domMaker(\"canvas\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tc-edit-bitmapeditor\",\n\t\teventListeners: [{\n\t\t\tname: \"touchstart\", handlerObject: this, handlerMethod: \"handleTouchStartEvent\"\n\t\t},{\n\t\t\tname: \"touchmove\", handlerObject: this, handlerMethod: \"handleTouchMoveEvent\"\n\t\t},{\n\t\t\tname: \"touchend\", handlerObject: this, handlerMethod: \"handleTouchEndEvent\"\n\t\t},{\n\t\t\tname: \"mousedown\", handlerObject: this, handlerMethod: \"handleMouseDownEvent\"\n\t\t},{\n\t\t\tname: \"mousemove\", handlerObject: this, handlerMethod: \"handleMouseMoveEvent\"\n\t\t},{\n\t\t\tname: \"mouseup\", handlerObject: this, handlerMethod: \"handleMouseUpEvent\"\n\t\t}]\n\t});\n\t// Set the width and height variables\n\tthis.setVariable(\"tv-bitmap-editor-width\",this.canvasDomNode.width + \"px\");\n\tthis.setVariable(\"tv-bitmap-editor-height\",this.canvasDomNode.height + \"px\");\n\t// Render toolbar child widgets\n\tthis.renderChildren(this.toolbarNode,null);\n\t// // Insert the elements into the DOM\n\tparent.insertBefore(this.canvasDomNode,nextSibling);\n\tthis.domNodes.push(this.canvasDomNode);\n\t// Load the image into the canvas\n\tif($tw.browser) {\n\t\tthis.loadCanvas();\n\t}\n\t// Add widget message listeners\n\tthis.addEventListeners([\n\t\t{type: \"tm-edit-bitmap-operation\", handler: \"handleEditBitmapOperationMessage\"}\n\t]);\n};\n\n/*\nHandle an edit bitmap operation message from the toolbar\n*/\nEditBitmapWidget.prototype.handleEditBitmapOperationMessage = function(event) {\n\t// Invoke the handler\n\tvar handler = this.editorOperations[event.param];\n\tif(handler) {\n\t\thandler.call(this,event);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBitmapWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nJust refresh the toolbar\n*/\nEditBitmapWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nSet the bitmap size variables and refresh the toolbar\n*/\nEditBitmapWidget.prototype.refreshToolbar = function() {\n\t// Set the width and height variables\n\tthis.setVariable(\"tv-bitmap-editor-width\",this.canvasDomNode.width + \"px\");\n\tthis.setVariable(\"tv-bitmap-editor-height\",this.canvasDomNode.height + \"px\");\n\t// Refresh each of our child widgets\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\tchildWidget.refreshSelf();\n\t});\n};\n\nEditBitmapWidget.prototype.loadCanvas = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle),\n\t\tcurrImage = new Image();\n\t// Set up event handlers for loading the image\n\tvar self = this;\n\tcurrImage.onload = function() {\n\t\t// Copy the image to the on-screen canvas\n\t\tself.initCanvas(self.canvasDomNode,currImage.width,currImage.height,currImage);\n\t\t// And also copy the current bitmap to the off-screen canvas\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,currImage.width,currImage.height,currImage);\n\t\t// Set the width and height input boxes\n\t\tself.refreshToolbar();\n\t};\n\tcurrImage.onerror = function() {\n\t\t// Set the on-screen canvas size and clear it\n\t\tself.initCanvas(self.canvasDomNode,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the off-screen canvas size and clear it\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the width and height input boxes\n\t\tself.refreshToolbar();\n\t};\n\t// Get the current bitmap into an image object\n\tif(tiddler && tiddler.fields.type && tiddler.fields.text) {\n\t\tcurrImage.src = \"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text;\t\t\n\t} else {\n\t\tcurrImage.width = DEFAULT_IMAGE_WIDTH;\n\t\tcurrImage.height = DEFAULT_IMAGE_HEIGHT;\n\t\tcurrImage.onerror();\n\t}\n};\n\nEditBitmapWidget.prototype.initCanvas = function(canvas,width,height,image) {\n\tcanvas.width = width;\n\tcanvas.height = height;\n\tvar ctx = canvas.getContext(\"2d\");\n\tif(image) {\n\t\tctx.drawImage(image,0,0);\n\t} else {\n\t\tctx.fillStyle = \"#fff\";\n\t\tctx.fillRect(0,0,canvas.width,canvas.height);\n\t}\n};\n\n/*\n** Change the size of the canvas, preserving the current image\n*/\nEditBitmapWidget.prototype.changeCanvasSize = function(newWidth,newHeight) {\n\t// Create and size a new canvas\n\tvar newCanvas = this.document.createElement(\"canvas\");\n\tthis.initCanvas(newCanvas,newWidth,newHeight);\n\t// Copy the old image\n\tvar ctx = newCanvas.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Set the new canvas as the current one\n\tthis.currCanvas = newCanvas;\n\t// Set the size of the onscreen canvas\n\tthis.canvasDomNode.width = newWidth;\n\tthis.canvasDomNode.height = newHeight;\n\t// Paint the onscreen canvas with the offscreen canvas\n\tctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n};\n\n/*\n** Rotate the canvas left by 90 degrees\n*/\nEditBitmapWidget.prototype.rotateCanvasLeft = function() {\n\t// Get the current size of the image\n\tvar origWidth = this.currCanvas.width,\n\t\torigHeight = this.currCanvas.height;\n\t// Create and size a new canvas\n\tvar newCanvas = this.document.createElement(\"canvas\"),\n\t\tnewWidth = origHeight,\n\t\tnewHeight = origWidth;\n\tthis.initCanvas(newCanvas,newWidth,newHeight);\n\t// Copy the old image\n\tvar ctx = newCanvas.getContext(\"2d\");\n\tctx.save();\n\tctx.translate(newWidth / 2,newHeight / 2);\n\tctx.rotate(-Math.PI / 2);\n\tctx.drawImage(this.currCanvas,-origWidth / 2,-origHeight / 2);\n\tctx.restore();\n\t// Set the new canvas as the current one\n\tthis.currCanvas = newCanvas;\n\t// Set the size of the onscreen canvas\n\tthis.canvasDomNode.width = newWidth;\n\tthis.canvasDomNode.height = newHeight;\n\t// Paint the onscreen canvas with the offscreen canvas\n\tctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n};\n\nEditBitmapWidget.prototype.handleTouchStartEvent = function(event) {\n\tthis.brushDown = true;\n\tthis.strokeStart(event.touches[0].clientX,event.touches[0].clientY);\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.touches[0].clientX,event.touches[0].clientY);\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchEndEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseDownEvent = function(event) {\n\tthis.strokeStart(event.clientX,event.clientY);\n\tthis.brushDown = true;\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.clientX,event.clientY);\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.handleMouseUpEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.adjustCoordinates = function(x,y) {\n\tvar canvasRect = this.canvasDomNode.getBoundingClientRect(),\n\t\tscale = this.canvasDomNode.width/canvasRect.width;\n\treturn {x: (x - canvasRect.left) * scale, y: (y - canvasRect.top) * scale};\n};\n\nEditBitmapWidget.prototype.strokeStart = function(x,y) {\n\t// Start off a new stroke\n\tthis.stroke = [this.adjustCoordinates(x,y)];\n};\n\nEditBitmapWidget.prototype.strokeMove = function(x,y) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\"),\n\t\tt;\n\t// Add the new position to the end of the stroke\n\tthis.stroke.push(this.adjustCoordinates(x,y));\n\t// Redraw the previous image\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Render the stroke\n\tctx.globalAlpha = parseFloat(this.wiki.getTiddlerText(LINE_OPACITY_TITLE,\"1.0\"));\n\tctx.strokeStyle = this.wiki.getTiddlerText(LINE_COLOUR_TITLE,\"#ff0\");\n\tctx.lineWidth = parseFloat(this.wiki.getTiddlerText(LINE_WIDTH_TITLE,\"3\"));\n\tctx.lineCap = \"round\";\n\tctx.lineJoin = \"round\";\n\tctx.beginPath();\n\tctx.moveTo(this.stroke[0].x,this.stroke[0].y);\n\tfor(t=1; t<this.stroke.length-1; t++) {\n\t\tvar s1 = this.stroke[t],\n\t\t\ts2 = this.stroke[t-1],\n\t\t\ttx = (s1.x + s2.x)/2,\n\t\t\tty = (s1.y + s2.y)/2;\n\t\tctx.quadraticCurveTo(s2.x,s2.y,tx,ty);\n\t}\n\tctx.stroke();\n};\n\nEditBitmapWidget.prototype.strokeEnd = function() {\n\t// Copy the bitmap to the off-screen canvas\n\tvar ctx = this.currCanvas.getContext(\"2d\");\n\tctx.drawImage(this.canvasDomNode,0,0);\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\nEditBitmapWidget.prototype.saveChanges = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle) || new $tw.Tiddler({title: this.editTitle,type: DEFAULT_IMAGE_TYPE});\n\t// data URIs look like \"data:<type>;base64,<text>\"\n\tvar dataURL = this.canvasDomNode.toDataURL(tiddler.fields.type),\n\t\tposColon = dataURL.indexOf(\":\"),\n\t\tposSemiColon = dataURL.indexOf(\";\"),\n\t\tposComma = dataURL.indexOf(\",\"),\n\t\ttype = dataURL.substring(posColon+1,posSemiColon),\n\t\ttext = dataURL.substring(posComma+1);\n\tvar update = {type: type, text: text};\n\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getModificationFields(),tiddler,update,this.wiki.getCreationFields()));\n};\n\nexports[\"edit-bitmap\"] = EditBitmapWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-shortcut.js": {
"title": "$:/core/modules/widgets/edit-shortcut.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-shortcut.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to display an editable keyboard shortcut\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditShortcutWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditShortcutWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditShortcutWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.inputNode = this.document.createElement(\"input\");\n\t// Assign classes\n\tif(this.shortcutClass) {\n\t\tthis.inputNode.className = this.shortcutClass;\t\t\n\t}\n\t// Assign other attributes\n\tif(this.shortcutStyle) {\n\t\tthis.inputNode.setAttribute(\"style\",this.shortcutStyle);\n\t}\n\tif(this.shortcutTooltip) {\n\t\tthis.inputNode.setAttribute(\"title\",this.shortcutTooltip);\n\t}\n\tif(this.shortcutPlaceholder) {\n\t\tthis.inputNode.setAttribute(\"placeholder\",this.shortcutPlaceholder);\n\t}\n\tif(this.shortcutAriaLabel) {\n\t\tthis.inputNode.setAttribute(\"aria-label\",this.shortcutAriaLabel);\n\t}\n\t// Assign the current shortcut\n\tthis.updateInputNode();\n\t// Add event handlers\n\t$tw.utils.addEventListeners(this.inputNode,[\n\t\t{name: \"keydown\", handlerObject: this, handlerMethod: \"handleKeydownEvent\"}\n\t]);\n\t// Link into the DOM\n\tparent.insertBefore(this.inputNode,nextSibling);\n\tthis.domNodes.push(this.inputNode);\n\t// Focus the input Node if focus === \"yes\" or focus === \"true\"\n\tif(this.shortcutFocus === \"yes\" || this.shortcutFocus === \"true\") {\n\t\tthis.focus();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditShortcutWidget.prototype.execute = function() {\n\tthis.shortcutTiddler = this.getAttribute(\"tiddler\");\n\tthis.shortcutField = this.getAttribute(\"field\");\n\tthis.shortcutIndex = this.getAttribute(\"index\");\n\tthis.shortcutPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.shortcutDefault = this.getAttribute(\"default\",\"\");\n\tthis.shortcutClass = this.getAttribute(\"class\");\n\tthis.shortcutStyle = this.getAttribute(\"style\");\n\tthis.shortcutTooltip = this.getAttribute(\"tooltip\");\n\tthis.shortcutAriaLabel = this.getAttribute(\"aria-label\");\n\tthis.shortcutFocus = this.getAttribute(\"focus\");\n};\n\n/*\nUpdate the value of the input node\n*/\nEditShortcutWidget.prototype.updateInputNode = function() {\n\tif(this.shortcutField) {\n\t\tvar tiddler = this.wiki.getTiddler(this.shortcutTiddler);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,this.shortcutField)) {\n\t\t\tthis.inputNode.value = tiddler.getFieldString(this.shortcutField);\n\t\t} else {\n\t\t\tthis.inputNode.value = this.shortcutDefault;\n\t\t}\n\t} else if(this.shortcutIndex) {\n\t\tthis.inputNode.value = this.wiki.extractTiddlerDataItem(this.shortcutTiddler,this.shortcutIndex,this.shortcutDefault);\n\t} else {\n\t\tthis.inputNode.value = this.wiki.getTiddlerText(this.shortcutTiddler,this.shortcutDefault);\n\t}\n};\n\n/*\nHandle a dom \"keydown\" event\n*/\nEditShortcutWidget.prototype.handleKeydownEvent = function(event) {\n\t// Ignore shift, ctrl, meta, alt\n\tif(event.keyCode && $tw.keyboardManager.getModifierKeys().indexOf(event.keyCode) === -1) {\n\t\t// Get the shortcut text representation\n\t\tvar value = $tw.keyboardManager.getPrintableShortcuts([{\n\t\t\tctrlKey: event.ctrlKey,\n\t\t\tshiftKey: event.shiftKey,\n\t\t\taltKey: event.altKey,\n\t\t\tmetaKey: event.metaKey,\n\t\t\tkeyCode: event.keyCode\n\t\t}]);\n\t\tif(value.length > 0) {\n\t\t\tthis.wiki.setText(this.shortcutTiddler,this.shortcutField,this.shortcutIndex,value[0]);\n\t\t}\n\t\t// Ignore the keydown if it was already handled\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn true;\t\t\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nfocus the input node\n*/\nEditShortcutWidget.prototype.focus = function() {\n\tif(this.inputNode.focus && this.inputNode.select) {\n\t\tthis.inputNode.focus();\n\t\tthis.inputNode.select();\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget needed re-rendering\n*/\nEditShortcutWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.placeholder || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.style || changedAttributes.tooltip || changedAttributes[\"aria-label\"] || changedAttributes.focus) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedTiddlers[this.shortcutTiddler]) {\n\t\tthis.updateInputNode();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports[\"edit-shortcut\"] = EditShortcutWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-text.js": {
"title": "$:/core/modules/widgets/edit-text.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-text.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-text widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar editTextWidgetFactory = require(\"$:/core/modules/editor/factory.js\").editTextWidgetFactory,\n\tFramedEngine = require(\"$:/core/modules/editor/engines/framed.js\").FramedEngine,\n\tSimpleEngine = require(\"$:/core/modules/editor/engines/simple.js\").SimpleEngine;\n\nexports[\"edit-text\"] = editTextWidgetFactory(FramedEngine,SimpleEngine);\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit.js": {
"title": "$:/core/modules/widgets/edit.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit.js\ntype: application/javascript\nmodule-type: widget\n\nEdit widget is a meta-widget chooses the appropriate actual editting widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n// Mappings from content type to editor type are stored in tiddlers with this prefix\nvar EDITOR_MAPPING_PREFIX = \"$:/config/EditorTypeMappings/\";\n\n/*\nCompute the internal state of the widget\n*/\nEditWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.editField = this.getAttribute(\"field\",\"text\");\n\tthis.editIndex = this.getAttribute(\"index\");\n\tthis.editClass = this.getAttribute(\"class\");\n\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.editTabIndex = this.getAttribute(\"tabindex\");\n\tthis.editFocus = this.getAttribute(\"focus\",\"\");\n\tthis.editCancelPopups = this.getAttribute(\"cancelPopups\",\"\");\n\tthis.editInputActions = this.getAttribute(\"inputActions\");\n\tthis.editRefreshTitle = this.getAttribute(\"refreshTitle\");\n\tthis.editAutoComplete = this.getAttribute(\"autocomplete\");\n\t// Choose the appropriate edit widget\n\tthis.editorType = this.getEditorType();\n\t// Make the child widgets\n\tthis.makeChildWidgets([{\n\t\ttype: \"edit-\" + this.editorType,\n\t\tattributes: this.parseTreeNode.attributes,\n\t\tchildren: this.parseTreeNode.children\n\t}]);\n};\n\nEditWidget.prototype.getEditorType = function() {\n\t// Get the content type of the thing we're editing\n\tvar type;\n\tif(this.editField === \"text\") {\n\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\tif(tiddler) {\n\t\t\ttype = tiddler.fields.type;\n\t\t}\n\t}\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar editorType = this.wiki.getTiddlerText(EDITOR_MAPPING_PREFIX + type);\n\tif(!editorType) {\n\t\tvar typeInfo = $tw.config.contentTypeInfo[type];\n\t\tif(typeInfo && typeInfo.encoding === \"base64\") {\n\t\t\teditorType = \"binary\";\n\t\t} else {\n\t\t\teditorType = \"text\";\n\t\t}\n\t}\n\treturn editorType;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEditWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh if an attribute has changed, or the type associated with the target tiddler has changed\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.tabindex || changedAttributes.cancelPopups || changedAttributes.inputActions || changedAttributes.refreshTitle || changedAttributes.autocomplete || (changedTiddlers[this.editTitle] && this.getEditorType() !== this.editorType)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.edit = EditWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/element.js": {
"title": "$:/core/modules/widgets/element.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/element.js\ntype: application/javascript\nmodule-type: widget\n\nElement widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ElementWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nElementWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nElementWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\t// Neuter blacklisted elements\n\tthis.tag = this.parseTreeNode.tag;\n\tif($tw.config.htmlUnsafeElements.indexOf(this.tag) !== -1) {\n\t\tthis.tag = \"safe-\" + this.tag;\n\t}\n\t// Adjust headings by the current base level\n\tvar headingLevel = [\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"].indexOf(this.tag);\n\tif(headingLevel !== -1) {\n\t\tvar baseLevel = parseInt(this.getVariable(\"tv-adjust-heading-level\",\"0\"),10) || 0;\n\t\theadingLevel = Math.min(Math.max(headingLevel + 1 + baseLevel,1),6);\n\t\tthis.tag = \"h\" + headingLevel;\n\t}\n\t// Select the namespace for the tag\n\tvar tagNamespaces = {\n\t\t\tsvg: \"http://www.w3.org/2000/svg\",\n\t\t\tmath: \"http://www.w3.org/1998/Math/MathML\",\n\t\t\tbody: \"http://www.w3.org/1999/xhtml\"\n\t\t};\n\tthis.namespace = tagNamespaces[this.tag];\n\tif(this.namespace) {\n\t\tthis.setVariable(\"namespace\",this.namespace);\n\t} else {\n\t\tthis.namespace = this.getVariable(\"namespace\",{defaultValue: \"http://www.w3.org/1999/xhtml\"});\n\t}\n\t// Invoke the th-rendering-element hook\n\tvar parseTreeNodes = $tw.hooks.invokeHook(\"th-rendering-element\",null,this);\n\tthis.isReplaced = !!parseTreeNodes;\n\tif(parseTreeNodes) {\n\t\t// Use the parse tree nodes provided by the hook\n\t\tthis.makeChildWidgets(parseTreeNodes);\n\t\tthis.renderChildren(this.parentDomNode,null);\n\t\treturn;\n\t}\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n\t// Create the DOM node and render children\n\tvar domNode = this.document.createElementNS(this.namespace,this.tag);\n\tthis.assignAttributes(domNode,{excludeEventAttributes: true});\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nElementWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\thasChangedAttributes = $tw.utils.count(changedAttributes) > 0;\n\tif(hasChangedAttributes) {\n\t\tif(!this.isReplaced) {\n\t\t\t// Update our attributes\n\t\t\tthis.assignAttributes(this.domNodes[0],{excludeEventAttributes: true});\t\t\t\n\t\t} else {\n\t\t\t// If we were replaced then completely refresh ourselves\n\t\t\treturn this.refreshSelf();\n\t\t}\n\t}\n\treturn this.refreshChildren(changedTiddlers) || hasChangedAttributes;\n};\n\nexports.element = ElementWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/encrypt.js": {
"title": "$:/core/modules/widgets/encrypt.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/encrypt.js\ntype: application/javascript\nmodule-type: widget\n\nEncrypt widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EncryptWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEncryptWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEncryptWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.encryptedText);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEncryptWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\",\"[!is[system]]\");\n\t// Encrypt the filtered tiddlers\n\tvar tiddlers = this.wiki.filterTiddlers(this.filter),\n\t\tjson = {},\n\t\tself = this;\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title),\n\t\t\tjsonTiddler = {};\n\t\tfor(var f in tiddler.fields) {\n\t\t\tjsonTiddler[f] = tiddler.getFieldString(f);\n\t\t}\n\t\tjson[title] = jsonTiddler;\n\t});\n\tthis.encryptedText = $tw.utils.htmlEncode($tw.crypto.encrypt(JSON.stringify(json)));\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEncryptWidget.prototype.refresh = function(changedTiddlers) {\n\t// We don't need to worry about refreshing because the encrypt widget isn't for interactive use\n\treturn false;\n};\n\nexports.encrypt = EncryptWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/entity.js": {
"title": "$:/core/modules/widgets/entity.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/entity.js\ntype: application/javascript\nmodule-type: widget\n\nHTML entity widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EntityWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEntityWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEntityWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar entityString = this.getAttribute(\"entity\",this.parseTreeNode.entity || \"\"),\n\t\ttextNode = this.document.createTextNode($tw.utils.entityDecode(entityString));\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEntityWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEntityWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.entity) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.entity = EntityWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/eventcatcher.js": {
"title": "$:/core/modules/widgets/eventcatcher.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/eventcatcher.js\ntype: application/javascript\nmodule-type: widget\n\nEvent handler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EventWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEventWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEventWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.elementTag && $tw.config.htmlUnsafeElements.indexOf(this.elementTag) === -1) {\n\t\ttag = this.elementTag;\n\t}\t\n\tvar domNode = this.document.createElement(tag);\n\tthis.domNode = domNode;\n\t// Assign classes\n\tthis.assignDomNodeClasses();\t\n\t// Add our event handler\n\t$tw.utils.each(this.types,function(type) {\n\t\tdomNode.addEventListener(type,function(event) {\n\t\t\tvar selector = self.getAttribute(\"selector\"),\n\t\t\t\tactions = self.getAttribute(\"actions-\"+type),\n\t\t\t\tselectedNode = event.target,\n\t\t\t\tselectedNodeRect,\n\t\t\t\tcatcherNodeRect,\n\t\t\t\tvariables = {};\n\t\t\tif(selector) {\n\t\t\t\t// Search ancestors for a node that matches the selector\n\t\t\t\twhile(!selectedNode.matches(selector) && selectedNode !== domNode) {\n\t\t\t\t\tselectedNode = selectedNode.parentNode;\n\t\t\t\t}\n\t\t\t\t// If we found one, copy the attributes as variables, otherwise exit\n\t\t\t\tif(selectedNode.matches(selector)) {\n\t\t\t\t\t$tw.utils.each(selectedNode.attributes,function(attribute) {\n\t\t\t\t\t\tvariables[\"dom-\" + attribute.name] = attribute.value.toString();\n\t\t\t\t\t});\n\t\t\t\t\t//Add a variable with a popup coordinate string for the selected node\n\t\t\t\t\tvariables[\"tv-popup-coords\"] = \"(\" + selectedNode.offsetLeft + \",\" + selectedNode.offsetTop +\",\" + selectedNode.offsetWidth + \",\" + selectedNode.offsetHeight + \")\";\n\t\t\t\t\t\n\t\t\t\t\t//Add variables for offset of selected node\n\t\t\t\t\tvariables[\"tv-selectednode-posx\"] = selectedNode.offsetLeft.toString();\n\t\t\t\t\tvariables[\"tv-selectednode-posy\"] = selectedNode.offsetTop.toString();\n\t\t\t\t\tvariables[\"tv-selectednode-width\"] = selectedNode.offsetWidth.toString();\n\t\t\t\t\tvariables[\"tv-selectednode-height\"] = selectedNode.offsetHeight.toString();\n\n\t\t\t\t\t//Add variables for event X and Y position relative to selected node\n\t\t\t\t\tselectedNodeRect = selectedNode.getBoundingClientRect();\t\t\t\t\n\t\t\t\t\tvariables[\"event-fromselected-posx\"] = (event.clientX - selectedNodeRect.left).toString();\n\t\t\t\t\tvariables[\"event-fromselected-posy\"] = (event.clientY - selectedNodeRect.top).toString();\n\n\t\t\t\t\t//Add variables for event X and Y position relative to event catcher node\n\t\t\t\t\tcatcherNodeRect = self.domNode.getBoundingClientRect();\n\t\t\t\t\tvariables[\"event-fromcatcher-posx\"] = (event.clientX - catcherNodeRect.left).toString();\n\t\t\t\t\tvariables[\"event-fromcatcher-posy\"] = (event.clientY - catcherNodeRect.top).toString();\n\t\t\t\t} else {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Execute our actions with the variables\n\t\t\tif(actions) {\n\t\t\t\t// Add a variable for the modifier key\n\t\t\t\tvariables.modifier = $tw.keyboardManager.getEventModifierKeyDescriptor(event);\n\t\t\t\t// Add a variable for the mouse button\n\t\t\t\tif(\"button\" in event) {\n\t\t\t\t\tif(event.button === 0) {\n\t\t\t\t\t\tvariables[\"event-mousebutton\"] = \"left\";\n\t\t\t\t\t} else if(event.button === 1) {\n\t\t\t\t\t\tvariables[\"event-mousebutton\"] = \"middle\";\n\t\t\t\t\t} else if(event.button === 2) {\n\t\t\t\t\t\tvariables[\"event-mousebutton\"] = \"right\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvariables[\"event-type\"] = event.type.toString();\n\t\t\t\tif(typeof event.detail === \"object\" && !!event.detail) {\n\t\t\t\t\t$tw.utils.each(event.detail,function(detailValue,detail) {\n\t\t\t\t\t\tvariables[\"event-detail-\" + detail] = detailValue.toString();\n\t\t\t\t\t});\n\t\t\t\t} else if(!!event.detail) {\n\t\t\t\t\tvariables[\"event-detail\"] = event.detail.toString();\n\t\t\t\t}\n\t\t\t\tself.invokeActionString(actions,self,event,variables);\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},false);\n\t});\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEventWidget.prototype.execute = function() {\n\tvar self = this;\n\t// Get attributes that require a refresh on change\n\tthis.types = this.getAttribute(\"events\",\"\").split(\" \");\n\tthis.elementTag = this.getAttribute(\"tag\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\nEventWidget.prototype.assignDomNodeClasses = function() {\n\tvar classes = this.getAttribute(\"class\",\"\").split(\" \");\n\tclasses.push(\"tc-eventcatcher\");\n\tthis.domNode.className = classes.join(\" \");\t\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEventWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"events\"] || changedAttributes[\"tag\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedAttributes[\"class\"]) {\n\t\tthis.assignDomNodeClasses();\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.eventcatcher = EventWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/fieldmangler.js": {
"title": "$:/core/modules/widgets/fieldmangler.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/fieldmangler.js\ntype: application/javascript\nmodule-type: widget\n\nField mangler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldManglerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-remove-field\", handler: \"handleRemoveFieldEvent\"},\n\t\t{type: \"tm-add-field\", handler: \"handleAddFieldEvent\"},\n\t\t{type: \"tm-remove-tag\", handler: \"handleRemoveTagEvent\"},\n\t\t{type: \"tm-add-tag\", handler: \"handleAddTagEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldManglerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldManglerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldManglerWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.mangleTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldManglerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nFieldManglerWidget.prototype.handleRemoveFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tdeletion = {};\n\tdeletion[event.param] = undefined;\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,deletion));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\taddition = this.wiki.getModificationFields(),\n\t\thadInvalidFieldName = false,\n\t\taddField = function(name,value) {\n\t\t\tvar trimmedName = name.toLowerCase().trim();\n\t\t\tif(!$tw.utils.isValidFieldName(trimmedName)) {\n\t\t\t\tif(!hadInvalidFieldName) {\n\t\t\t\t\talert($tw.language.getString(\n\t\t\t\t\t\t\"InvalidFieldName\",\n\t\t\t\t\t\t{variables:\n\t\t\t\t\t\t\t{fieldName: trimmedName}\n\t\t\t\t\t\t}\n\t\t\t\t\t));\n\t\t\t\t\thadInvalidFieldName = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif(!value && tiddler) {\n\t\t\t\t\tvalue = tiddler.fields[trimmedName];\n\t\t\t\t}\n\t\t\t\taddition[trimmedName] = value || \"\";\n\t\t\t}\n\t\t\treturn;\n\t\t};\n\taddition.title = this.mangleTitle;\n\tif(typeof event.param === \"string\") {\n\t\taddField(event.param,\"\");\n\t}\n\tif(typeof event.paramObject === \"object\") {\n\t\tfor(var name in event.paramObject) {\n\t\t\taddField(name,event.paramObject[name]);\n\t\t}\n\t}\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,addition));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleRemoveTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tmodification = this.wiki.getModificationFields();\n\tif(tiddler && tiddler.fields.tags) {\n\t\tvar p = tiddler.fields.tags.indexOf(event.param);\n\t\tif(p !== -1) {\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\tmodification.tags.splice(p,1);\n\t\t\tif(modification.tags.length === 0) {\n\t\t\t\tmodification.tags = undefined;\n\t\t\t}\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\n\t\t}\n\t}\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tmodification = this.wiki.getModificationFields();\n\tif(tiddler && typeof event.param === \"string\") {\n\t\tvar tag = event.param.trim();\n\t\tif(tag !== \"\") {\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\t$tw.utils.pushTop(modification.tags,tag);\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\t\t\t\n\t\t}\n\t} else if(typeof event.param === \"string\" && event.param.trim() !== \"\" && this.mangleTitle.trim() !== \"\") {\n\t\tvar tag = [];\n\t\ttag.push(event.param.trim());\n\t\tthis.wiki.addTiddler(new $tw.Tiddler({title: this.mangleTitle, tags: tag},modification));\n\t}\n\treturn true;\n};\n\nexports.fieldmangler = FieldManglerWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/fields.js": {
"title": "$:/core/modules/widgets/fields.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/fields.js\ntype: application/javascript\nmodule-type: widget\n\nFields widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldsWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldsWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldsWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.template = this.getAttribute(\"template\");\n\tthis.sort = this.getAttribute(\"sort\",\"yes\") === \"yes\";\n\tthis.sortReverse = this.getAttribute(\"sortReverse\",\"no\") === \"yes\";\n\tthis.exclude = this.getAttribute(\"exclude\");\n\tthis.include = this.getAttribute(\"include\",null);\n\tthis.stripTitlePrefix = this.getAttribute(\"stripTitlePrefix\",\"no\") === \"yes\";\n\t// Get the value to display\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\n\t// Get the inclusion and exclusion list\n\tvar excludeArr = (this.exclude) ? this.exclude.split(\" \") : [\"text\"];\n\t// Include takes precedence\n\tvar includeArr = (this.include) ? this.include.split(\" \") : null;\n\n\t// Compose the template\n\tvar text = [];\n\tif(this.template && tiddler) {\n\t\tvar fields = [];\n\t\tif (includeArr) { // Include takes precedence\n\t\t\tfor(var i=0; i<includeArr.length; i++) {\n\t\t\t\tif(tiddler.fields[includeArr[i]]) {\n\t\t\t\t\tfields.push(includeArr[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor(var fieldName in tiddler.fields) {\n\t\t\t\tif(excludeArr.indexOf(fieldName) === -1) {\n\t\t\t\t\tfields.push(fieldName);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (this.sort) fields.sort();\n\t\tif (this.sortReverse) fields.reverse();\n\t\tfor(var f=0, fmax=fields.length; f<fmax; f++) {\n\t\t\tfieldName = fields[f];\n\t\t\tvar row = this.template,\n\t\t\t\tvalue = tiddler.getFieldString(fieldName);\n\t\t\tif(this.stripTitlePrefix && fieldName === \"title\") {\n\t\t\t\tvar reStrip = /^\\{[^\\}]+\\}(.+)/mg,\n\t\t\t\t\treMatch = reStrip.exec(value);\n\t\t\t\tif(reMatch) {\n\t\t\t\t\tvalue = reMatch[1];\n\t\t\t\t}\n\t\t\t}\n\t\t\trow = $tw.utils.replaceString(row,\"$name$\",fieldName);\n\t\t\trow = $tw.utils.replaceString(row,\"$value$\",value);\n\t\t\trow = $tw.utils.replaceString(row,\"$encoded_value$\",$tw.utils.htmlEncode(value));\n\t\t\ttext.push(row);\n\t\t}\n\t}\n\tthis.text = text.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif( changedAttributes.tiddler || changedAttributes.template || changedAttributes.exclude ||\n\t\tchangedAttributes.include || changedAttributes.sort || changedAttributes.sortReverse ||\n\t\tchangedTiddlers[this.tiddlerTitle] || changedAttributes.stripTitlePrefix) {\n\t\t\tthis.refreshSelf();\n\t\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\nexports.fields = FieldsWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/image.js": {
"title": "$:/core/modules/widgets/image.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/image.js\ntype: application/javascript\nmodule-type: widget\n\nThe image widget displays an image referenced with an external URI or with a local tiddler title.\n\n```\n<$image src=\"TiddlerTitle\" width=\"320\" height=\"400\" class=\"classnames\">\n```\n\nThe image source can be the title of an existing tiddler or the URL of an external image.\n\nExternal images always generate an HTML `<img>` tag.\n\nTiddlers that have a _canonical_uri field generate an HTML `<img>` tag with the src attribute containing the URI.\n\nTiddlers that contain image data generate an HTML `<img>` tag with the src attribute containing a base64 representation of the image.\n\nTiddlers that contain wikitext could be rendered to a DIV of the usual size of a tiddler, and then transformed to the size requested.\n\nThe width and height attributes are interpreted as a number of pixels, and do not need to include the \"px\" suffix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\t// Determine what type of image it is\n\tvar tag = \"img\", src = \"\",\n\t\ttiddler = this.wiki.getTiddler(this.imageSource);\n\tif(!tiddler) {\n\t\t// The source isn't the title of a tiddler, so we'll assume it's a URL\n\t\tsrc = this.getVariable(\"tv-get-export-image-link\",{params: [{name: \"src\",value: this.imageSource}],defaultValue: this.imageSource});\n\t} else {\n\t\t// Check if it is an image tiddler\n\t\tif(this.wiki.isImageTiddler(this.imageSource)) {\n\t\t\tvar type = tiddler.fields.type,\n\t\t\t\ttext = tiddler.fields.text,\n\t\t\t\t_canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t// If the tiddler has body text then it doesn't need to be lazily loaded\n\t\t\tif(text) {\n\t\t\t\t// Render the appropriate element for the image type\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = \"data:application/pdf;base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = \"data:image/svg+xml,\" + encodeURIComponent(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = \"data:\" + type + \";base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if(_canonical_uri) {\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\t\n\t\t\t} else {\n\t\t\t\t// Just trigger loading of the tiddler\n\t\t\t\tthis.wiki.getTiddlerText(this.imageSource);\n\t\t\t}\n\t\t}\n\t}\n\t// Create the element and assign the attributes\n\tvar domNode = this.document.createElement(tag);\n\tdomNode.setAttribute(\"src\",src);\n\tif(this.imageClass) {\n\t\tdomNode.setAttribute(\"class\",this.imageClass);\t\t\n\t}\n\tif(this.imageWidth) {\n\t\tdomNode.setAttribute(\"width\",this.imageWidth);\n\t}\n\tif(this.imageHeight) {\n\t\tdomNode.setAttribute(\"height\",this.imageHeight);\n\t}\n\tif(this.imageTooltip) {\n\t\tdomNode.setAttribute(\"title\",this.imageTooltip);\t\t\n\t}\n\tif(this.imageAlt) {\n\t\tdomNode.setAttribute(\"alt\",this.imageAlt);\t\t\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImageWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.imageSource = this.getAttribute(\"source\");\n\tthis.imageWidth = this.getAttribute(\"width\");\n\tthis.imageHeight = this.getAttribute(\"height\");\n\tthis.imageClass = this.getAttribute(\"class\");\n\tthis.imageTooltip = this.getAttribute(\"tooltip\");\n\tthis.imageAlt = this.getAttribute(\"alt\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.source || changedAttributes.width || changedAttributes.height || changedAttributes[\"class\"] || changedAttributes.tooltip || changedTiddlers[this.imageSource]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\t\n\t}\n};\n\nexports.image = ImageWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/importvariables.js": {
"title": "$:/core/modules/widgets/importvariables.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/importvariables.js\ntype: application/javascript\nmodule-type: widget\n\nImport variable definitions from other tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImportVariablesWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImportVariablesWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImportVariablesWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImportVariablesWidget.prototype.execute = function(tiddlerList) {\n\tvar widgetPointer = this;\n\t// Got to flush all the accumulated variables\n\tthis.variables = new this.variablesConstructor();\n\t// Get our parameters\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Compute the filter\n\tthis.tiddlerList = tiddlerList || this.wiki.filterTiddlers(this.filter,this);\n\t// Accumulate the <$set> widgets from each tiddler\n\t$tw.utils.each(this.tiddlerList,function(title) {\n\t\tvar parser = widgetPointer.wiki.parseTiddler(title);\n\t\tif(parser) {\n\t\t\tvar parseTreeNode = parser.tree[0];\n\t\t\twhile(parseTreeNode && parseTreeNode.type === \"set\") {\n\t\t\t\tvar node = {\n\t\t\t\t\ttype: \"set\",\n\t\t\t\t\tattributes: parseTreeNode.attributes,\n\t\t\t\t\tparams: parseTreeNode.params,\n\t\t\t\t\tisMacroDefinition: parseTreeNode.isMacroDefinition\n\t\t\t\t};\n\t\t\t\tif (parseTreeNode.isMacroDefinition) {\n\t\t\t\t\t// Macro definitions can be folded into\n\t\t\t\t\t// current widget instead of adding\n\t\t\t\t\t// another link to the chain.\n\t\t\t\t\tvar widget = widgetPointer.makeChildWidget(node);\n\t\t\t\t\twidget.computeAttributes();\n\t\t\t\t\twidget.execute();\n\t\t\t\t\t// We SHALLOW copy over all variables\n\t\t\t\t\t// in widget. We can't use\n\t\t\t\t\t// $tw.utils.assign, because that copies\n\t\t\t\t\t// up the prototype chain, which we\n\t\t\t\t\t// don't want.\n\t\t\t\t\t$tw.utils.each(Object.keys(widget.variables), function(key) {\n\t\t\t\t\t\twidgetPointer.variables[key] = widget.variables[key];\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\twidgetPointer.children = [widgetPointer.makeChildWidget(node)];\n\t\t\t\t\t// No more regenerating children for\n\t\t\t\t\t// this widget. If it needs to refresh,\n\t\t\t\t\t// it'll do so along with the the whole\n\t\t\t\t\t// importvariable tree.\n\t\t\t\t\tif (widgetPointer != this) {\n\t\t\t\t\t\twidgetPointer.makeChildWidgets = function(){};\n\t\t\t\t\t}\n\t\t\t\t\twidgetPointer = widgetPointer.children[0];\n\t\t\t\t}\n\t\t\t\tparseTreeNode = parseTreeNode.children && parseTreeNode.children[0];\n\t\t\t}\n\t\t} \n\t});\n\n\tif (widgetPointer != this) {\n\t\twidgetPointer.parseTreeNode.children = this.parseTreeNode.children;\n\t} else {\n\t\twidgetPointer.makeChildWidgets();\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImportVariablesWidget.prototype.refresh = function(changedTiddlers) {\n\t// Recompute our attributes and the filter list\n\tvar changedAttributes = this.computeAttributes(),\n\t\ttiddlerList = this.wiki.filterTiddlers(this.getAttribute(\"filter\"),this);\n\t// Refresh if the filter has changed, or the list of tiddlers has changed, or any of the tiddlers in the list has changed\n\tfunction haveListedTiddlersChanged() {\n\t\tvar changed = false;\n\t\ttiddlerList.forEach(function(title) {\n\t\t\tif(changedTiddlers[title]) {\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t});\n\t\treturn changed;\n\t}\n\tif(changedAttributes.filter || !$tw.utils.isArrayEqual(this.tiddlerList,tiddlerList) || haveListedTiddlersChanged()) {\n\t\t// Compute the filter\n\t\tthis.removeChildDomNodes();\n\t\tthis.execute(tiddlerList);\n\t\tthis.renderChildren(this.parentDomNode,this.findNextSiblingDomNode());\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.importvariables = ImportVariablesWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/keyboard.js": {
"title": "$:/core/modules/widgets/keyboard.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/keyboard.js\ntype: application/javascript\nmodule-type: widget\n\nKeyboard shortcut widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar KeyboardWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nKeyboardWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nKeyboardWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.tag && $tw.config.htmlUnsafeElements.indexOf(this.tag) === -1) {\n\t\ttag = this.tag;\n\t}\n\t// Create element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = (this[\"class\"] || \"\").split(\" \");\n\tclasses.push(\"tc-keyboard\");\n\tdomNode.className = classes.join(\" \");\n\t// Add a keyboard event handler\n\tdomNode.addEventListener(\"keydown\",function (event) {\n\t\tif($tw.keyboardManager.checkKeyDescriptors(event,self.keyInfoArray)) {\n\t\t\tvar handled = self.invokeActions(self,event);\n\t\t\tif(self.actions) {\n\t\t\t\tself.invokeActionString(self.actions,self,event);\n\t\t\t}\n\t\t\tself.dispatchMessage(event);\n\t\t\tif(handled || self.actions || self.message) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nKeyboardWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\")});\n};\n\n/*\nCompute the internal state of the widget\n*/\nKeyboardWidget.prototype.execute = function() {\n\tvar self = this;\n\t// Get attributes\n\tthis.actions = this.getAttribute(\"actions\",\"\");\n\tthis.message = this.getAttribute(\"message\",\"\");\n\tthis.param = this.getAttribute(\"param\",\"\");\n\tthis.key = this.getAttribute(\"key\",\"\");\n\tthis.tag = this.getAttribute(\"tag\",\"\");\n\tthis.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key);\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tif(this.key.substr(0,2) === \"((\" && this.key.substr(-2,2) === \"))\") {\n\t\tthis.shortcutTiddlers = [];\n\t\tvar name = this.key.substring(2,this.key.length -2);\n\t\t$tw.utils.each($tw.keyboardManager.lookupNames,function(platformDescriptor) {\n\t\t\tself.shortcutTiddlers.push(\"$:/config/\" + platformDescriptor + \"/\" + name);\n\t\t});\n\t}\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nKeyboardWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.message || changedAttributes.param || changedAttributes.key || changedAttributes[\"class\"] || changedAttributes.tag) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\t// Update the keyInfoArray if one of its shortcut-config-tiddlers has changed\n\tif(this.shortcutTiddlers && $tw.utils.hopArray(changedTiddlers,this.shortcutTiddlers)) {\n\t\tthis.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key);\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.keyboard = KeyboardWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/link.js": {
"title": "$:/core/modules/widgets/link.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/link.js\ntype: application/javascript\nmodule-type: widget\n\nLink widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the value of the tv-wikilinks configuration macro\n\tvar wikiLinksMacro = this.getVariable(\"tv-wikilinks\"),\n\t\tuseWikiLinks = wikiLinksMacro ? (wikiLinksMacro.trim() !== \"no\") : true,\n\t\tmissingLinksEnabled = !(this.hideMissingLinks && this.isMissing && !this.isShadow);\n\t// Render the link if required\n\tif(useWikiLinks && missingLinksEnabled) {\n\t\tthis.renderLink(parent,nextSibling);\n\t} else {\n\t\t// Just insert the link text\n\t\tvar domNode = this.document.createElement(\"span\");\n\t\tparent.insertBefore(domNode,nextSibling);\n\t\tthis.renderChildren(domNode,null);\n\t\tthis.domNodes.push(domNode);\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.renderLink = function(parent,nextSibling) {\n\tvar self = this;\n\t// Sanitise the specified tag\n\tvar tag = this.linkTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"a\";\n\t}\n\t// Create our element\n\tvar namespace = this.getVariable(\"namespace\",{defaultValue: \"http://www.w3.org/1999/xhtml\"}),\n\t\tdomNode = this.document.createElementNS(namespace,tag);\n\t// Assign classes\n\tvar classes = [];\n\tif(this.overrideClasses === undefined) {\n\t\tclasses.push(\"tc-tiddlylink\");\n\t\tif(this.isShadow) {\n\t\t\tclasses.push(\"tc-tiddlylink-shadow\");\n\t\t}\n\t\tif(this.isMissing && !this.isShadow) {\n\t\t\tclasses.push(\"tc-tiddlylink-missing\");\n\t\t} else {\n\t\t\tif(!this.isMissing) {\n\t\t\t\tclasses.push(\"tc-tiddlylink-resolves\");\n\t\t\t}\n\t\t}\n\t\tif(this.linkClasses) {\n\t\t\tclasses.push(this.linkClasses);\t\t\t\n\t\t}\n\t} else if(this.overrideClasses !== \"\") {\n\t\tclasses.push(this.overrideClasses)\n\t}\n\tif(classes.length > 0) {\n\t\tdomNode.setAttribute(\"class\",classes.join(\" \"));\n\t}\n\t// Set an href\n\tvar wikilinkTransformFilter = this.getVariable(\"tv-filter-export-link\"),\n\t\twikiLinkText;\n\tif(wikilinkTransformFilter) {\n\t\t// Use the filter to construct the href\n\t\twikiLinkText = this.wiki.filterTiddlers(wikilinkTransformFilter,this,function(iterator) {\n\t\t\titerator(self.wiki.getTiddler(self.to),self.to)\n\t\t})[0];\n\t} else {\n\t\t// Expand the tv-wikilink-template variable to construct the href\n\t\tvar wikiLinkTemplateMacro = this.getVariable(\"tv-wikilink-template\"),\n\t\t\twikiLinkTemplate = wikiLinkTemplateMacro ? wikiLinkTemplateMacro.trim() : \"#$uri_encoded$\";\n\t\twikiLinkText = $tw.utils.replaceString(wikiLinkTemplate,\"$uri_encoded$\",encodeURIComponent(this.to));\n\t\twikiLinkText = $tw.utils.replaceString(wikiLinkText,\"$uri_doubleencoded$\",encodeURIComponent(encodeURIComponent(this.to)));\n\t}\n\t// Override with the value of tv-get-export-link if defined\n\twikiLinkText = this.getVariable(\"tv-get-export-link\",{params: [{name: \"to\",value: this.to}],defaultValue: wikiLinkText});\n\tif(tag === \"a\") {\n\t\tvar namespaceHref = (namespace === \"http://www.w3.org/2000/svg\") ? \"http://www.w3.org/1999/xlink\" : undefined;\n\t\tdomNode.setAttributeNS(namespaceHref,\"href\",wikiLinkText);\n\t}\n\t// Set the tabindex\n\tif(this.tabIndex) {\n\t\tdomNode.setAttribute(\"tabindex\",this.tabIndex);\n\t}\n\t// Set the tooltip\n\t// HACK: Performance issues with re-parsing the tooltip prevent us defaulting the tooltip to \"<$transclude field='tooltip'><$transclude field='title'/></$transclude>\"\n\tvar tooltipWikiText = this.tooltip || this.getVariable(\"tv-wikilink-tooltip\");\n\tif(tooltipWikiText) {\n\t\tvar tooltipText = this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",tooltipWikiText,{\n\t\t\t\tparseAsInline: true,\n\t\t\t\tvariables: {\n\t\t\t\t\tcurrentTiddler: this.to\n\t\t\t\t},\n\t\t\t\tparentWidget: this\n\t\t\t});\n\t\tdomNode.setAttribute(\"title\",tooltipText);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"click\", handlerObject: this, handlerMethod: \"handleClickEvent\"},\n\t]);\n\t// Make the link draggable if required\n\tif(this.draggable === \"yes\") {\n\t\t$tw.utils.makeDraggable({\n\t\t\tdomNode: domNode,\n\t\t\tdragTiddlerFn: function() {return self.to;},\n\t\t\twidget: this\n\t\t});\n\t}\n\t// Insert the link into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nLinkWidget.prototype.handleClickEvent = function(event) {\n\t// Send the click on its way as a navigate event\n\tvar bounds = this.domNodes[0].getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1),\n\t\tmetaKey: event.metaKey,\n\t\tctrlKey: event.ctrlKey,\n\t\taltKey: event.altKey,\n\t\tshiftKey: event.shiftKey,\n\t\tevent: event\n\t});\n\tif(this.domNodes[0].hasAttribute(\"href\")) {\n\t\tevent.preventDefault();\n\t}\n\tevent.stopPropagation();\n\treturn false;\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkWidget.prototype.execute = function() {\n\t// Pick up our attributes\n\tthis.to = this.getAttribute(\"to\",this.getVariable(\"currentTiddler\"));\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.linkClasses = this.getAttribute(\"class\");\n\tthis.overrideClasses = this.getAttribute(\"overrideClass\");\n\tthis.tabIndex = this.getAttribute(\"tabindex\");\n\tthis.draggable = this.getAttribute(\"draggable\",\"yes\");\n\tthis.linkTag = this.getAttribute(\"tag\",\"a\");\n\t// Determine the link characteristics\n\tthis.isMissing = !this.wiki.tiddlerExists(this.to);\n\tthis.isShadow = this.wiki.isShadowTiddler(this.to);\n\tthis.hideMissingLinks = (this.getVariable(\"tv-show-missing-links\") || \"yes\") === \"no\";\n\t// Make the child widgets\n\tvar templateTree;\n\tif(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\ttemplateTree = this.parseTreeNode.children;\n\t} else {\n\t\t// Default template is a link to the title\n\t\ttemplateTree = [{type: \"text\", text: this.to}];\n\t}\n\tthis.makeChildWidgets(templateTree);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedTiddlers[this.to] || changedAttributes[\"aria-label\"] || changedAttributes.tooltip) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.link = LinkWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/linkcatcher.js": {
"title": "$:/core/modules/widgets/linkcatcher.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/linkcatcher.js\ntype: application/javascript\nmodule-type: widget\n\nLinkcatcher widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkCatcherWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkCatcherWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkCatcherWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkCatcherWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.catchTo = this.getAttribute(\"to\");\n\tthis.catchMessage = this.getAttribute(\"message\");\n\tthis.catchSet = this.getAttribute(\"set\");\n\tthis.catchSetTo = this.getAttribute(\"setTo\");\n\tthis.catchActions = this.getAttribute(\"actions\");\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n\t// When executing actions we avoid trapping navigate events, so that we don't trigger ourselves recursively\n\tthis.executingActions = false;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkCatcherWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedAttributes.message || changedAttributes.set || changedAttributes.setTo) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\n/*\nHandle a tm-navigate event\n*/\nLinkCatcherWidget.prototype.handleNavigateEvent = function(event) {\n\tif(!this.executingActions) {\n\t\t// Execute the actions\n\t\tif(this.catchTo) {\n\t\t\tthis.wiki.setTextReference(this.catchTo,event.navigateTo,this.getVariable(\"currentTiddler\"));\n\t\t}\n\t\tif(this.catchMessage && this.parentWidget) {\n\t\t\tthis.parentWidget.dispatchEvent({\n\t\t\t\ttype: this.catchMessage,\n\t\t\t\tparam: event.navigateTo,\n\t\t\t\tnavigateTo: event.navigateTo\n\t\t\t});\n\t\t}\n\t\tif(this.catchSet) {\n\t\t\tvar tiddler = this.wiki.getTiddler(this.catchSet);\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,{title: this.catchSet, text: this.catchSetTo}));\n\t\t}\n\t\tif(this.catchActions) {\n\t\t\tthis.executingActions = true;\n\t\t\tvar modifierKey = $tw.keyboardManager.getEventModifierKeyDescriptor(event);\n\t\t\tthis.invokeActionString(this.catchActions,this,event,{navigateTo: event.navigateTo, modifier: modifierKey});\n\t\t\tthis.executingActions = false;\n\t\t}\n\t} else {\n\t\t// This is a navigate event generated by the actions of this linkcatcher, so we don't trap it again, but just pass it to the parent\n\t\tthis.parentWidget.dispatchEvent({\n\t\t\ttype: \"tm-navigate\",\n\t\t\tparam: event.navigateTo,\n\t\t\tnavigateTo: event.navigateTo\n\t\t});\n\t}\n\treturn false;\n};\n\nexports.linkcatcher = LinkCatcherWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/list.js": {
"title": "$:/core/modules/widgets/list.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/list.js\ntype: application/javascript\nmodule-type: widget\n\nList and list item widgets\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\n/*\nThe list widget creates list element sub-widgets that reach back into the list widget for their configuration\n*/\n\nvar ListWidget = function(parseTreeNode,options) {\n\t// Initialise the storyviews if they've not been done already\n\tif(!this.storyViews) {\n\t\tListWidget.prototype.storyViews = {};\n\t\t$tw.modules.applyMethods(\"storyview\",this.storyViews);\n\t}\n\t// Main initialisation inherited from widget.js\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\t// Construct the storyview\n\tvar StoryView = this.storyViews[this.storyViewName];\n\tif(this.storyViewName && !StoryView) {\n\t\tStoryView = this.storyViews[\"classic\"];\n\t}\n\tif(StoryView && !this.document.isTiddlyWikiFakeDom) {\n\t\tthis.storyview = new StoryView(this);\n\t} else {\n\t\tthis.storyview = null;\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nListWidget.prototype.execute = function() {\n\t// Get our attributes\n\tthis.template = this.getAttribute(\"template\");\n\tthis.editTemplate = this.getAttribute(\"editTemplate\");\n\tthis.variableName = this.getAttribute(\"variable\",\"currentTiddler\");\n\tthis.storyViewName = this.getAttribute(\"storyview\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\t// Compose the list elements\n\tthis.list = this.getTiddlerList();\n\tvar members = [],\n\t\tself = this;\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\tmembers = this.getEmptyMessage();\n\t} else {\n\t\t$tw.utils.each(this.list,function(title,index) {\n\t\t\tmembers.push(self.makeItemTemplate(title));\n\t\t});\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(members);\n\t// Clear the last history\n\tthis.history = [];\n};\n\nListWidget.prototype.getTiddlerList = function() {\n\tvar defaultFilter = \"[!is[system]sort[title]]\";\n\treturn this.wiki.filterTiddlers(this.getAttribute(\"filter\",defaultFilter),this);\n};\n\nListWidget.prototype.getEmptyMessage = function() {\n\tvar parser,\n\t\temptyMessage = this.getAttribute(\"emptyMessage\",\"\");\n\t// this.wiki.parseText() calls \n\t// new Parser(..), which should only be done, if needed, because it's heavy!\n\tif (emptyMessage === \"\") {\n\t\treturn [];\n\t}\n\tparser = this.wiki.parseText(\"text/vnd.tiddlywiki\",emptyMessage,{parseAsInline: true});\n\tif(parser) {\n\t\treturn parser.tree;\n\t} else {\n\t\treturn [];\n\t}\n};\n\n/*\nCompose the template for a list item\n*/\nListWidget.prototype.makeItemTemplate = function(title) {\n\t// Check if the tiddler is a draft\n\tvar tiddler = this.wiki.getTiddler(title),\n\t\tisDraft = tiddler && tiddler.hasField(\"draft.of\"),\n\t\ttemplate = this.template,\n\t\ttemplateTree;\n\tif(isDraft && this.editTemplate) {\n\t\ttemplate = this.editTemplate;\n\t}\n\t// Compose the transclusion of the template\n\tif(template) {\n\t\ttemplateTree = [{type: \"transclude\", attributes: {tiddler: {type: \"string\", value: template}}}];\n\t} else {\n\t\tif(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\t\ttemplateTree = this.parseTreeNode.children;\n\t\t} else {\n\t\t\t// Default template is a link to the title\n\t\t\ttemplateTree = [{type: \"element\", tag: this.parseTreeNode.isBlock ? \"div\" : \"span\", children: [{type: \"link\", attributes: {to: {type: \"string\", value: title}}, children: [\n\t\t\t\t\t{type: \"text\", text: title}\n\t\t\t]}]}];\n\t\t}\n\t}\n\t// Return the list item\n\treturn {type: \"listitem\", itemTitle: title, variableName: this.variableName, children: templateTree};\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tresult;\n\t// Call the storyview\n\tif(this.storyview && this.storyview.refreshStart) {\n\t\tthis.storyview.refreshStart(changedTiddlers,changedAttributes);\n\t}\n\t// Completely refresh if any of our attributes have changed\n\tif(changedAttributes.filter || changedAttributes.template || changedAttributes.editTemplate || changedAttributes.emptyMessage || changedAttributes.storyview || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\tresult = true;\n\t} else {\n\t\t// Handle any changes to the list\n\t\tresult = this.handleListChanges(changedTiddlers);\n\t\t// Handle any changes to the history stack\n\t\tif(this.historyTitle && changedTiddlers[this.historyTitle]) {\n\t\t\tthis.handleHistoryChanges();\n\t\t}\n\t}\n\t// Call the storyview\n\tif(this.storyview && this.storyview.refreshEnd) {\n\t\tthis.storyview.refreshEnd(changedTiddlers,changedAttributes);\n\t}\n\treturn result;\n};\n\n/*\nHandle any changes to the history list\n*/\nListWidget.prototype.handleHistoryChanges = function() {\n\t// Get the history data\n\tvar newHistory = this.wiki.getTiddlerDataCached(this.historyTitle,[]);\n\t// Ignore any entries of the history that match the previous history\n\tvar entry = 0;\n\twhile(entry < newHistory.length && entry < this.history.length && newHistory[entry].title === this.history[entry].title) {\n\t\tentry++;\n\t}\n\t// Navigate forwards to each of the new tiddlers\n\twhile(entry < newHistory.length) {\n\t\tif(this.storyview && this.storyview.navigateTo) {\n\t\t\tthis.storyview.navigateTo(newHistory[entry]);\n\t\t}\n\t\tentry++;\n\t}\n\t// Update the history\n\tthis.history = newHistory;\n};\n\n/*\nProcess any changes to the list\n*/\nListWidget.prototype.handleListChanges = function(changedTiddlers) {\n\t// Get the new list\n\tvar prevList = this.list;\n\tthis.list = this.getTiddlerList();\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\t// Check if it was empty before\n\t\tif(prevList.length === 0) {\n\t\t\t// If so, just refresh the empty message\n\t\t\treturn this.refreshChildren(changedTiddlers);\n\t\t} else {\n\t\t\t// Replace the previous content with the empty message\n\t\t\tfor(t=this.children.length-1; t>=0; t--) {\n\t\t\t\tthis.removeListItem(t);\n\t\t\t}\n\t\t\tvar nextSibling = this.findNextSiblingDomNode();\n\t\t\tthis.makeChildWidgets(this.getEmptyMessage());\n\t\t\tthis.renderChildren(this.parentDomNode,nextSibling);\n\t\t\treturn true;\n\t\t}\n\t} else {\n\t\t// If the list was empty then we need to remove the empty message\n\t\tif(prevList.length === 0) {\n\t\t\tthis.removeChildDomNodes();\n\t\t\tthis.children = [];\n\t\t}\n\t\t// Cycle through the list, inserting and removing list items as needed\n\t\tvar hasRefreshed = false;\n\t\tfor(var t=0; t<this.list.length; t++) {\n\t\t\tvar index = this.findListItem(t,this.list[t]);\n\t\t\tif(index === undefined) {\n\t\t\t\t// The list item must be inserted\n\t\t\t\tthis.insertListItem(t,this.list[t]);\n\t\t\t\thasRefreshed = true;\n\t\t\t} else {\n\t\t\t\t// There are intervening list items that must be removed\n\t\t\t\tfor(var n=index-1; n>=t; n--) {\n\t\t\t\t\tthis.removeListItem(n);\n\t\t\t\t\thasRefreshed = true;\n\t\t\t\t}\n\t\t\t\t// Refresh the item we're reusing\n\t\t\t\tvar refreshed = this.children[t].refresh(changedTiddlers);\n\t\t\t\thasRefreshed = hasRefreshed || refreshed;\n\t\t\t}\n\t\t}\n\t\t// Remove any left over items\n\t\tfor(t=this.children.length-1; t>=this.list.length; t--) {\n\t\t\tthis.removeListItem(t);\n\t\t\thasRefreshed = true;\n\t\t}\n\t\treturn hasRefreshed;\n\t}\n};\n\n/*\nFind the list item with a given title, starting from a specified position\n*/\nListWidget.prototype.findListItem = function(startIndex,title) {\n\twhile(startIndex < this.children.length) {\n\t\tif(this.children[startIndex].parseTreeNode.itemTitle === title) {\n\t\t\treturn startIndex;\n\t\t}\n\t\tstartIndex++;\n\t}\n\treturn undefined;\n};\n\n/*\nInsert a new list item at the specified index\n*/\nListWidget.prototype.insertListItem = function(index,title) {\n\t// Create, insert and render the new child widgets\n\tvar widget = this.makeChildWidget(this.makeItemTemplate(title));\n\twidget.parentDomNode = this.parentDomNode; // Hack to enable findNextSiblingDomNode() to work\n\tthis.children.splice(index,0,widget);\n\tvar nextSibling = widget.findNextSiblingDomNode();\n\twidget.render(this.parentDomNode,nextSibling);\n\t// Animate the insertion if required\n\tif(this.storyview && this.storyview.insert) {\n\t\tthis.storyview.insert(widget);\n\t}\n\treturn true;\n};\n\n/*\nRemove the specified list item\n*/\nListWidget.prototype.removeListItem = function(index) {\n\tvar widget = this.children[index];\n\t// Animate the removal if required\n\tif(this.storyview && this.storyview.remove) {\n\t\tthis.storyview.remove(widget);\n\t} else {\n\t\twidget.removeChildDomNodes();\n\t}\n\t// Remove the child widget\n\tthis.children.splice(index,1);\n};\n\nexports.list = ListWidget;\n\nvar ListItemWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListItemWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListItemWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nListItemWidget.prototype.execute = function() {\n\t// Set the current list item title\n\tthis.setVariable(this.parseTreeNode.variableName,this.parseTreeNode.itemTitle);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListItemWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.listitem = ListItemWidget;\n\n})();",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/log.js": {
"title": "$:/core/modules/widgets/log.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/log.js\ntype: application/javascript\nmodule-type: widget-subclass\n\nWidget to log debug messages\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.baseClass = \"action-log\";\n\nexports.name = \"log\";\n\nexports.constructor = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n}\n\nexports.prototype = {};\n\nexports.prototype.render = function(event) {\n\tObject.getPrototypeOf(Object.getPrototypeOf(this)).render.call(this,event);\t\n\tObject.getPrototypeOf(Object.getPrototypeOf(this)).log.call(this);\n}\n\n})();",
"type": "application/javascript",
"module-type": "widget-subclass"
},
"$:/core/modules/widgets/macrocall.js": {
"title": "$:/core/modules/widgets/macrocall.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/macrocall.js\ntype: application/javascript\nmodule-type: widget\n\nMacrocall widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar MacroCallWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nMacroCallWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nMacroCallWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nMacroCallWidget.prototype.execute = function() {\n\t// Get the parse type if specified\n\tthis.parseType = this.getAttribute(\"$type\",\"text/vnd.tiddlywiki\");\n\tthis.renderOutput = this.getAttribute(\"$output\",\"text/html\");\n\t// Merge together the parameters specified in the parse tree with the specified attributes\n\tvar params = this.parseTreeNode.params ? this.parseTreeNode.params.slice(0) : [];\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparams.push({name: name, value: attribute});\t\t\t\n\t\t}\n\t});\n\t// Get the macro value\n\tvar macroName = this.parseTreeNode.name || this.getAttribute(\"$name\"),\n\t\tvariableInfo = this.getVariableInfo(macroName,{params: params}),\n\t\ttext = variableInfo.text,\n\t\tparseTreeNodes;\n\t// Are we rendering to HTML?\n\tif(this.renderOutput === \"text/html\") {\n\t\t// If so we'll return the parsed macro\n\t\t// Check if we've already cached parsing this macro\n\t\tvar mode = this.parseTreeNode.isBlock ? \"blockParser\" : \"inlineParser\",\n\t\t\tparser;\n\t\tif(variableInfo.srcVariable && variableInfo.srcVariable[mode]) {\n\t\t\tparser = variableInfo.srcVariable[mode];\n\t\t} else {\n\t\t\tparser = this.wiki.parseText(this.parseType,text,\n\t\t\t\t\t\t\t\t{parseAsInline: !this.parseTreeNode.isBlock});\n\t\t\tif(variableInfo.isCacheable && variableInfo.srcVariable) {\n\t\t\t\tvariableInfo.srcVariable[mode] = parser;\n\t\t\t}\n\t\t}\n\t\tvar parseTreeNodes = parser ? parser.tree : [];\n\t\t// Wrap the parse tree in a vars widget assigning the parameters to variables named \"__paramname__\"\n\t\tvar attributes = {};\n\t\t$tw.utils.each(variableInfo.params,function(param) {\n\t\t\tvar name = \"__\" + param.name + \"__\";\n\t\t\tattributes[name] = {\n\t\t\t\tname: name,\n\t\t\t\ttype: \"string\",\n\t\t\t\tvalue: param.value\n\t\t\t};\n\t\t});\n\t\tparseTreeNodes = [{\n\t\t\ttype: \"vars\",\n\t\t\tattributes: attributes,\n\t\t\tchildren: parseTreeNodes\n\t\t}];\n\t} else if(this.renderOutput === \"text/raw\") {\n\t\tparseTreeNodes = [{type: \"text\", text: text}];\n\t} else {\n\t\t// Otherwise, we'll render the text\n\t\tvar plainText = this.wiki.renderText(\"text/plain\",this.parseType,text,{parentWidget: this});\n\t\tparseTreeNodes = [{type: \"text\", text: plainText}];\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nMacroCallWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\t// Rerender ourselves\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.macrocall = MacroCallWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/navigator.js": {
"title": "$:/core/modules/widgets/navigator.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/navigator.js\ntype: application/javascript\nmodule-type: widget\n\nNavigator widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar IMPORT_TITLE = \"$:/Import\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigatorWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"},\n\t\t{type: \"tm-edit-tiddler\", handler: \"handleEditTiddlerEvent\"},\n\t\t{type: \"tm-delete-tiddler\", handler: \"handleDeleteTiddlerEvent\"},\n\t\t{type: \"tm-save-tiddler\", handler: \"handleSaveTiddlerEvent\"},\n\t\t{type: \"tm-cancel-tiddler\", handler: \"handleCancelTiddlerEvent\"},\n\t\t{type: \"tm-close-tiddler\", handler: \"handleCloseTiddlerEvent\"},\n\t\t{type: \"tm-close-all-tiddlers\", handler: \"handleCloseAllTiddlersEvent\"},\n\t\t{type: \"tm-close-other-tiddlers\", handler: \"handleCloseOtherTiddlersEvent\"},\n\t\t{type: \"tm-new-tiddler\", handler: \"handleNewTiddlerEvent\"},\n\t\t{type: \"tm-import-tiddlers\", handler: \"handleImportTiddlersEvent\"},\n\t\t{type: \"tm-perform-import\", handler: \"handlePerformImportEvent\"},\n\t\t{type: \"tm-fold-tiddler\", handler: \"handleFoldTiddlerEvent\"},\n\t\t{type: \"tm-fold-other-tiddlers\", handler: \"handleFoldOtherTiddlersEvent\"},\n\t\t{type: \"tm-fold-all-tiddlers\", handler: \"handleFoldAllTiddlersEvent\"},\n\t\t{type: \"tm-unfold-all-tiddlers\", handler: \"handleUnfoldAllTiddlersEvent\"},\n\t\t{type: \"tm-rename-tiddler\", handler: \"handleRenameTiddlerEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigatorWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigatorWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigatorWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.storyTitle = this.getAttribute(\"story\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\tthis.setVariable(\"tv-story-list\",this.storyTitle);\n\tthis.setVariable(\"tv-history-list\",this.historyTitle);\n\tthis.story = new $tw.Story({\n\t\twiki: this.wiki,\n\t\tstoryTitle: this.storyTitle,\n\t\thistoryTitle: this.historyTitle\n\t});\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nNavigatorWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.story || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nNavigatorWidget.prototype.getStoryList = function() {\n\treturn this.storyTitle ? this.wiki.getTiddlerList(this.storyTitle) : null;\n};\n\nNavigatorWidget.prototype.saveStoryList = function(storyList) {\n\tif(this.storyTitle) {\n\t\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\t\t{title: this.storyTitle},\n\t\t\tstoryTiddler,\n\t\t\t{list: storyList}\n\t\t));\t\t\n\t}\n};\n\nNavigatorWidget.prototype.removeTitleFromStory = function(storyList,title) {\n\tif(storyList) {\n\t\tvar p = storyList.indexOf(title);\n\t\twhile(p !== -1) {\n\t\t\tstoryList.splice(p,1);\n\t\t\tp = storyList.indexOf(title);\n\t\t}\t\t\n\t}\n};\n\nNavigatorWidget.prototype.replaceFirstTitleInStory = function(storyList,oldTitle,newTitle) {\n\tif(storyList) {\n\t\tvar pos = storyList.indexOf(oldTitle);\n\t\tif(pos !== -1) {\n\t\t\tstoryList[pos] = newTitle;\n\t\t\tdo {\n\t\t\t\tpos = storyList.indexOf(oldTitle,pos + 1);\n\t\t\t\tif(pos !== -1) {\n\t\t\t\t\tstoryList.splice(pos,1);\n\t\t\t\t}\n\t\t\t} while(pos !== -1);\n\t\t} else {\n\t\t\tstoryList.splice(0,0,newTitle);\n\t\t}\t\t\n\t}\n};\n\nNavigatorWidget.prototype.addToStory = function(title,fromTitle) {\n\tif(this.storyTitle) {\n\t\tthis.story.addToStory(title,fromTitle,{\n\t\t\topenLinkFromInsideRiver: this.getAttribute(\"openLinkFromInsideRiver\",\"top\"),\n\t\t\topenLinkFromOutsideRiver: this.getAttribute(\"openLinkFromOutsideRiver\",\"top\")\n\t\t});\n\t}\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\n*/\nNavigatorWidget.prototype.addToHistory = function(title,fromPageRect) {\n\tthis.story.addToHistory(title,fromPageRect,this.historyTitle);\n};\n\n/*\nHandle a tm-navigate event\n*/\nNavigatorWidget.prototype.handleNavigateEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-navigating\",event);\n\tif(event.navigateTo) {\n\t\tthis.addToStory(event.navigateTo,event.navigateFromTitle);\n\t\tif(!event.navigateSuppressNavigation) {\n\t\t\tthis.addToHistory(event.navigateTo,event.navigateFromClientRect);\n\t\t}\n\t}\n\treturn false;\n};\n\n// Close a specified tiddler\nNavigatorWidget.prototype.handleCloseTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\tstoryList = this.getStoryList();\n\t// Look for tiddlers with this title to close\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\treturn false;\n};\n\n// Close all tiddlers\nNavigatorWidget.prototype.handleCloseAllTiddlersEvent = function(event) {\n\tthis.saveStoryList([]);\n\treturn false;\n};\n\n// Close other tiddlers\nNavigatorWidget.prototype.handleCloseOtherTiddlersEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle;\n\tthis.saveStoryList([title]);\n\treturn false;\n};\n\n// Place a tiddler in edit mode\nNavigatorWidget.prototype.handleEditTiddlerEvent = function(event) {\n\tvar editTiddler = $tw.hooks.invokeHook(\"th-editing-tiddler\",event);\n\tif(!editTiddler) {\n\t\treturn false;\n\t}\n\tvar self = this;\n\tfunction isUnmodifiedShadow(title) {\n\t\treturn self.wiki.isShadowTiddler(title) && !self.wiki.tiddlerExists(title);\n\t}\n\tfunction confirmEditShadow(title) {\n\t\treturn confirm($tw.language.getString(\n\t\t\t\"ConfirmEditShadowTiddler\",\n\t\t\t{variables:\n\t\t\t\t{title: title}\n\t\t\t}\n\t\t));\n\t}\n\tvar title = event.param || event.tiddlerTitle;\n\tif(isUnmodifiedShadow(title) && !confirmEditShadow(title)) {\n\t\treturn false;\n\t}\n\t// Replace the specified tiddler with a draft in edit mode\n\tvar draftTiddler = this.makeDraftTiddler(title);\n\t// Update the story and history if required\n\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\tvar draftTitle = draftTiddler.fields.title,\n\t\t\tstoryList = this.getStoryList();\n\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\tthis.saveStoryList(storyList);\n\t\treturn false;\n\t}\n};\n\n// Delete a tiddler\nNavigatorWidget.prototype.handleDeleteTiddlerEvent = function(event) {\n\t// Get the tiddler we're deleting\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList(),\n\t\toriginalTitle = tiddler ? tiddler.fields[\"draft.of\"] : \"\",\n\t\toriginalTiddler = originalTitle ? this.wiki.getTiddler(originalTitle) : undefined,\n\t\tconfirmationTitle;\n\tif(!tiddler) {\n\t\treturn false;\n\t}\n\t// Check if the tiddler we're deleting is in draft mode\n\tif(originalTitle) {\n\t\t// If so, we'll prompt for confirmation referencing the original tiddler\n\t\tconfirmationTitle = originalTitle;\n\t} else {\n\t\t// If not a draft, then prompt for confirmation referencing the specified tiddler\n\t\tconfirmationTitle = title;\n\t}\n\t// Seek confirmation\n\tif((this.wiki.getTiddler(originalTitle) || (tiddler.fields.text || \"\") !== \"\") && !confirm($tw.language.getString(\n\t\t\t\t\"ConfirmDeleteTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: confirmationTitle}\n\t\t\t\t}\n\t\t\t))) {\n\t\treturn false;\n\t}\n\t// Delete the original tiddler\n\tif(originalTitle) {\n\t\tif(originalTiddler) {\n\t\t\t$tw.hooks.invokeHook(\"th-deleting-tiddler\",originalTiddler);\n\t\t}\n\t\tthis.wiki.deleteTiddler(originalTitle);\n\t\tthis.removeTitleFromStory(storyList,originalTitle);\n\t}\n\t// Invoke the hook function and delete this tiddler\n\t$tw.hooks.invokeHook(\"th-deleting-tiddler\",tiddler);\n\tthis.wiki.deleteTiddler(title);\n\t// Remove the closed tiddler from the story\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\treturn false;\n};\n\n/*\nCreate/reuse the draft tiddler for a given title\n*/\nNavigatorWidget.prototype.makeDraftTiddler = function(targetTitle) {\n\t// See if there is already a draft tiddler for this tiddler\n\tvar draftTitle = this.wiki.findDraft(targetTitle);\n\tif(draftTitle) {\n\t\treturn this.wiki.getTiddler(draftTitle);\n\t}\n\t// Get the current value of the tiddler we're editing\n\tvar tiddler = this.wiki.getTiddler(targetTitle);\n\t// Save the initial value of the draft tiddler\n\tdraftTitle = this.generateDraftTitle(targetTitle);\n\tvar draftTiddler = new $tw.Tiddler({\n\t\t\t\ttext: \"\",\n\t\t\t},\n\t\t\ttiddler,\n\t\t\t{\n\t\t\t\ttitle: draftTitle,\n\t\t\t\t\"draft.title\": targetTitle,\n\t\t\t\t\"draft.of\": targetTitle\n\t\t\t},\n\t\t\tthis.wiki.getModificationFields()\n\t\t);\n\tthis.wiki.addTiddler(draftTiddler);\n\treturn draftTiddler;\n};\n\n/*\nGenerate a title for the draft of a given tiddler\n*/\nNavigatorWidget.prototype.generateDraftTitle = function(title) {\n\treturn this.wiki.generateDraftTitle(title);\n};\n\n// Take a tiddler out of edit mode, saving the changes\nNavigatorWidget.prototype.handleSaveTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList();\n\t// Replace the original tiddler with the draft\n\tif(tiddler) {\n\t\tvar draftTitle = (tiddler.fields[\"draft.title\"] || \"\").trim(),\n\t\t\tdraftOf = (tiddler.fields[\"draft.of\"] || \"\").trim();\n\t\tif(draftTitle) {\n\t\t\tvar isRename = draftOf !== draftTitle,\n\t\t\t\tisConfirmed = true;\n\t\t\tif(isRename && this.wiki.tiddlerExists(draftTitle)) {\n\t\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\t\"ConfirmOverwriteTiddler\",\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{title: draftTitle}\n\t\t\t\t\t}\n\t\t\t\t));\n\t\t\t}\n\t\t\tif(isConfirmed) {\n\t\t\t\t// Create the new tiddler and pass it through the th-saving-tiddler hook\n\t\t\t\tvar newTiddler = new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\ttitle: draftTitle,\n\t\t\t\t\t\"draft.title\": undefined,\n\t\t\t\t\t\"draft.of\": undefined\n\t\t\t\t},this.wiki.getModificationFields());\n\t\t\t\tnewTiddler = $tw.hooks.invokeHook(\"th-saving-tiddler\",newTiddler,tiddler);\n\t\t\t\tthis.wiki.addTiddler(newTiddler);\n\t\t\t\t// If enabled, relink references to renamed tiddler\n\t\t\t\tvar shouldRelink = this.getAttribute(\"relinkOnRename\",\"no\").toLowerCase().trim() === \"yes\";\n\t\t\t\tif(isRename && shouldRelink && this.wiki.tiddlerExists(draftOf)) {\n\t\t\t\t\tthis.wiki.relinkTiddler(draftOf,draftTitle);\n\t\t\t\t}\n\t\t\t\t// Remove the draft tiddler\n\t\t\t\tthis.wiki.deleteTiddler(title);\n\t\t\t\t// Remove the original tiddler if we're renaming it\n\t\t\t\tif(isRename) {\n\t\t\t\t\tthis.wiki.deleteTiddler(draftOf);\n\t\t\t\t}\n\t\t\t\t// #2381 always remove new title & old\n\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t\tthis.removeTitleFromStory(storyList,draftOf);\n\t\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\t\t// Replace the draft in the story with the original\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\t\t\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\t\t\t\tif(draftTitle !== this.storyTitle) {\n\t\t\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Trigger an autosave\n\t\t\t\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Take a tiddler out of edit mode without saving the changes\nNavigatorWidget.prototype.handleCancelTiddlerEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-cancelling-tiddler\", event);\n\t// Flip the specified tiddler from draft back to the original\n\tvar draftTitle = event.param || event.tiddlerTitle,\n\t\tdraftTiddler = this.wiki.getTiddler(draftTitle),\n\t\toriginalTitle = draftTiddler && draftTiddler.fields[\"draft.of\"];\n\tif(draftTiddler && originalTitle) {\n\t\t// Ask for confirmation if the tiddler text has changed\n\t\tvar isConfirmed = true,\n\t\t\toriginalTiddler = this.wiki.getTiddler(originalTitle),\n\t\t\tstoryList = this.getStoryList();\n\t\tif(this.wiki.isDraftModified(draftTitle)) {\n\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\"ConfirmCancelTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: draftTitle}\n\t\t\t\t}\n\t\t\t));\n\t\t}\n\t\t// Remove the draft tiddler\n\t\tif(isConfirmed) {\n\t\t\tthis.wiki.deleteTiddler(draftTitle);\n\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\tif(originalTiddler) {\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,draftTitle,originalTitle);\n\t\t\t\t\tthis.addToHistory(originalTitle,event.navigateFromClientRect);\n\t\t\t\t} else {\n\t\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t\t}\n\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Create a new draft tiddler\n// event.param can either be the title of a template tiddler, or a hashmap of fields.\n//\n// The title of the newly created tiddler follows these rules:\n// * If a hashmap was used and a title field was specified, use that title\n// * If a hashmap was used without a title field, use a default title, if necessary making it unique with a numeric suffix\n// * If a template tiddler was used, use the title of the template, if necessary making it unique with a numeric suffix\n//\n// If a draft of the target tiddler already exists then it is reused\nNavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-new-tiddler\", event);\n\t// Get the story details\n\tvar storyList = this.getStoryList(),\n\t\ttemplateTiddler, additionalFields, title, draftTitle, existingTiddler;\n\t// Get the template tiddler (if any)\n\tif(typeof event.param === \"string\") {\n\t\t// Get the template tiddler\n\t\ttemplateTiddler = this.wiki.getTiddler(event.param);\n\t\t// Generate a new title\n\t\ttitle = this.wiki.generateNewTitle(event.param || $tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t}\n\t// Get the specified additional fields\n\tif(typeof event.paramObject === \"object\") {\n\t\tadditionalFields = event.paramObject;\n\t}\n\tif(typeof event.param === \"object\") { // Backwards compatibility with 5.1.3\n\t\tadditionalFields = event.param;\n\t}\n\tif(additionalFields && additionalFields.title) {\n\t\ttitle = additionalFields.title;\n\t}\n\t// Make a copy of the additional fields excluding any blank ones\n\tvar filteredAdditionalFields = $tw.utils.extend({},additionalFields);\n\tObject.keys(filteredAdditionalFields).forEach(function(fieldName) {\n\t\tif(filteredAdditionalFields[fieldName] === \"\") {\n\t\t\tdelete filteredAdditionalFields[fieldName];\n\t\t}\n\t});\n\t// Generate a title if we don't have one\n\ttitle = title || this.wiki.generateNewTitle($tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t// Find any existing draft for this tiddler\n\tdraftTitle = this.wiki.findDraft(title);\n\t// Pull in any existing tiddler\n\tif(draftTitle) {\n\t\texistingTiddler = this.wiki.getTiddler(draftTitle);\n\t} else {\n\t\tdraftTitle = this.generateDraftTitle(title);\n\t\texistingTiddler = this.wiki.getTiddler(title);\n\t}\n\t// Merge the tags\n\tvar mergedTags = [];\n\tif(existingTiddler && existingTiddler.fields.tags) {\n\t\t$tw.utils.pushTop(mergedTags,existingTiddler.fields.tags);\n\t}\n\tif(additionalFields && additionalFields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,$tw.utils.parseStringArray(additionalFields.tags));\n\t}\n\tif(templateTiddler && templateTiddler.fields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,templateTiddler.fields.tags);\n\t}\n\t// Save the draft tiddler\n\tvar draftTiddler = new $tw.Tiddler({\n\t\t\ttext: \"\",\n\t\t\t\"draft.title\": title\n\t\t},\n\t\ttemplateTiddler,\n\t\tadditionalFields,\n\t\tthis.wiki.getCreationFields(),\n\t\texistingTiddler,\n\t\tfilteredAdditionalFields,\n\t\t{\n\t\t\ttitle: draftTitle,\n\t\t\t\"draft.of\": title,\n\t\t\ttags: mergedTags\n\t\t},this.wiki.getModificationFields());\n\tthis.wiki.addTiddler(draftTiddler);\n\t// Update the story to insert the new draft at the top and remove any existing tiddler\n\tif(storyList && storyList.indexOf(draftTitle) === -1) {\n\t\tvar slot = storyList.indexOf(event.navigateFromTitle);\n\t\tif(slot === -1) {\n\t\t\tslot = this.getAttribute(\"openLinkFromOutsideRiver\",\"top\") === \"bottom\" ? storyList.length - 1 : slot;\n\t\t}\n\t\tstoryList.splice(slot + 1,0,draftTitle);\n\t}\n\tif(storyList && storyList.indexOf(title) !== -1) {\n\t\tstoryList.splice(storyList.indexOf(title),1);\n\t}\n\tthis.saveStoryList(storyList);\n\t// Add a new record to the top of the history stack\n\tthis.addToHistory(draftTitle);\n\treturn false;\n};\n\n// Import JSON tiddlers into a pending import tiddler\nNavigatorWidget.prototype.handleImportTiddlersEvent = function(event) {\n\t// Get the tiddlers\n\tvar tiddlers = [];\n\ttry {\n\t\ttiddlers = JSON.parse(event.param);\n\t} catch(e) {\n\t}\n\t// Get the current $:/Import tiddler\n\tvar importTitle = event.importTitle ? event.importTitle : IMPORT_TITLE,\n\t\timportTiddler = this.wiki.getTiddler(importTitle),\n\t\timportData = this.wiki.getTiddlerData(importTitle,{}),\n\t\tnewFields = new Object({\n\t\t\ttitle: importTitle,\n\t\t\ttype: \"application/json\",\n\t\t\t\"plugin-type\": \"import\",\n\t\t\t\"status\": \"pending\"\n\t\t}),\n\t\tincomingTiddlers = [];\n\t// Process each tiddler\n\timportData.tiddlers = importData.tiddlers || {};\n\t$tw.utils.each(tiddlers,function(tiddlerFields) {\n\t\ttiddlerFields.title = $tw.utils.trim(tiddlerFields.title);\n\t\tvar title = tiddlerFields.title;\n\t\tif(title) {\n\t\t\tincomingTiddlers.push(title);\n\t\t\timportData.tiddlers[title] = tiddlerFields;\n\t\t}\n\t});\n\t// Give the active upgrader modules a chance to process the incoming tiddlers\n\tvar messages = this.wiki.invokeUpgraders(incomingTiddlers,importData.tiddlers);\n\t$tw.utils.each(messages,function(message,title) {\n\t\tnewFields[\"message-\" + title] = message;\n\t});\n\t// Deselect any suppressed tiddlers\n\t$tw.utils.each(importData.tiddlers,function(tiddler,title) {\n\t\tif($tw.utils.count(tiddler) === 0) {\n\t\t\tnewFields[\"selection-\" + title] = \"unchecked\";\n\t\t\tnewFields[\"suppressed-\" + title] = \"yes\";\n\t\t}\n\t});\n\t// Save the $:/Import tiddler\n\tnewFields.text = JSON.stringify(importData,null,$tw.config.preferences.jsonSpaces);\n\tthis.wiki.addTiddler(new $tw.Tiddler(importTiddler,newFields));\n\t// Update the story and history details\n\tvar autoOpenOnImport = event.autoOpenOnImport ? event.autoOpenOnImport : this.getVariable(\"tv-auto-open-on-import\"); \n\tif(autoOpenOnImport !== \"no\") {\n\t\tvar storyList = this.getStoryList(),\n\t\t\thistory = [];\n\t\t// Add it to the story\n\t\tif(storyList && storyList.indexOf(importTitle) === -1) {\n\t\t\tstoryList.unshift(importTitle);\n\t\t}\n\t\t// And to history\n\t\thistory.push(importTitle);\n\t\t// Save the updated story and history\n\t\tthis.saveStoryList(storyList);\n\t\tthis.addToHistory(history);\n\t}\n\treturn false;\n};\n\n//\nNavigatorWidget.prototype.handlePerformImportEvent = function(event) {\n\tvar self = this,\n\t\timportTiddler = this.wiki.getTiddler(event.param),\n\t\timportData = this.wiki.getTiddlerDataCached(event.param,{tiddlers: {}}),\n\t\timportReport = [];\n\t// Add the tiddlers to the store\n\timportReport.push($tw.language.getString(\"Import/Imported/Hint\") + \"\\n\");\n\t$tw.utils.each(importData.tiddlers,function(tiddlerFields) {\n\t\tvar title = tiddlerFields.title;\n\t\tif(title && importTiddler && importTiddler.fields[\"selection-\" + title] !== \"unchecked\") {\n\t\t\tif($tw.utils.hop(importTiddler.fields,[\"rename-\" + title])) {\n\t\t\t\tvar tiddler = new $tw.Tiddler(tiddlerFields,{title : importTiddler.fields[\"rename-\" + title]});\n\t\t\t} else {\n\t\t\t\tvar tiddler = new $tw.Tiddler(tiddlerFields);\n\t\t\t}\n\t\t\ttiddler = $tw.hooks.invokeHook(\"th-importing-tiddler\",tiddler);\n\t\t\tself.wiki.addTiddler(tiddler);\n\t\t\timportReport.push(\"# [[\" + tiddler.fields.title + \"]]\");\n\t\t}\n\t});\n\t// Replace the $:/Import tiddler with an import report\n\tthis.wiki.addTiddler(new $tw.Tiddler({\n\t\ttitle: event.param,\n\t\ttext: importReport.join(\"\\n\"),\n\t\t\"status\": \"complete\"\n\t}));\n\t// Navigate to the $:/Import tiddler\n\tthis.addToHistory([event.param]);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n};\n\nNavigatorWidget.prototype.handleFoldTiddlerEvent = function(event) {\n\tvar paramObject = event.paramObject || {};\n\tif(paramObject.foldedState) {\n\t\tvar foldedState = this.wiki.getTiddlerText(paramObject.foldedState,\"show\") === \"show\" ? \"hide\" : \"show\";\n\t\tthis.wiki.setText(paramObject.foldedState,\"text\",null,foldedState);\n\t}\n};\n\nNavigatorWidget.prototype.handleFoldOtherTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,event.param === title ? \"show\" : \"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleFoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix || \"$:/state/folded/\";\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleUnfoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"show\");\n\t});\n};\n\nNavigatorWidget.prototype.handleRenameTiddlerEvent = function(event) {\n\tvar options = {},\n\t\tparamObject = event.paramObject || {},\n\t\tfrom = paramObject.from || event.tiddlerTitle,\n\t\tto = paramObject.to;\n\toptions.dontRenameInTags = (paramObject.renameInTags === \"false\" || paramObject.renameInTags === \"no\") ? true : false;\n\toptions.dontRenameInLists = (paramObject.renameInLists === \"false\" || paramObject.renameInLists === \"no\") ? true : false;\n\tthis.wiki.renameTiddler(from,to,options);\n};\n\nexports.navigator = NavigatorWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/password.js": {
"title": "$:/core/modules/widgets/password.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/password.js\ntype: application/javascript\nmodule-type: widget\n\nPassword widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar PasswordWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nPasswordWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nPasswordWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the current password\n\tvar password = $tw.browser ? $tw.utils.getPassword(this.passwordName) || \"\" : \"\";\n\t// Create our element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"password\");\n\tdomNode.setAttribute(\"value\",password);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nPasswordWidget.prototype.handleChangeEvent = function(event) {\n\tvar password = this.domNodes[0].value;\n\treturn $tw.utils.savePassword(this.passwordName,password);\n};\n\n/*\nCompute the internal state of the widget\n*/\nPasswordWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.passwordName = this.getAttribute(\"name\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nPasswordWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.password = PasswordWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/qualify.js": {
"title": "$:/core/modules/widgets/qualify.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/qualify.js\ntype: application/javascript\nmodule-type: widget\n\nQualify text to a variable \n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar QualifyWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nQualifyWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nQualifyWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nQualifyWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.qualifyName = this.getAttribute(\"name\");\n\tthis.qualifyTitle = this.getAttribute(\"title\");\n\t// Set context variable\n\tif(this.qualifyName) {\n\t\tthis.setVariable(this.qualifyName,this.qualifyTitle + \"-\" + this.getStateQualifier());\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nQualifyWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.title) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.qualify = QualifyWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/radio.js": {
"title": "$:/core/modules/widgets/radio.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/radio.js\ntype: application/javascript\nmodule-type: widget\n\nSet a field or index at a given tiddler via radio buttons\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\nvar RadioWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRadioWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRadioWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\tvar isChecked = this.getValue() === this.radioValue;\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",\n\t\t\"tc-radio \" + this.radioClass + (isChecked ? \" tc-radio-selected\" : \"\")\n\t);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"radio\");\n\tif(isChecked) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tif(this.isDisabled === \"yes\") {\n\t\tthis.inputDomNode.setAttribute(\"disabled\",true);\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nRadioWidget.prototype.getValue = function() {\n\tvar value,\n\t\ttiddler = this.wiki.getTiddler(this.radioTitle);\n\tif (this.radioIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.radioTitle,this.radioIndex);\n\t} else {\n\t\tvalue = tiddler && tiddler.getFieldString(this.radioField);\n\t}\n\treturn value;\n};\n\nRadioWidget.prototype.setValue = function() {\n\tif(this.radioIndex) {\n\t\tthis.wiki.setText(this.radioTitle,\"\",this.radioIndex,this.radioValue);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.radioTitle),\n\t\t\taddition = {};\n\t\taddition[this.radioField] = this.radioValue;\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),{title: this.radioTitle},tiddler,addition,this.wiki.getModificationFields()));\n\t}\n};\n\nRadioWidget.prototype.handleChangeEvent = function(event) {\n\tif(this.inputDomNode.checked) {\n\t\tthis.setValue();\n\t}\n\t// Trigger actions\n\tif(this.radioActions) {\n\t\tthis.invokeActionString(this.radioActions,this,event,{\"actionValue\": this.radioValue});\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRadioWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.radioTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.radioField = this.getAttribute(\"field\",\"text\");\n\tthis.radioIndex = this.getAttribute(\"index\");\n\tthis.radioValue = this.getAttribute(\"value\");\n\tthis.radioClass = this.getAttribute(\"class\",\"\");\n\tthis.isDisabled = this.getAttribute(\"disabled\",\"no\");\n\tthis.radioActions = this.getAttribute(\"actions\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRadioWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(($tw.utils.count(changedAttributes) > 0) || changedTiddlers[this.radioTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.radio = RadioWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/range.js": {
"title": "$:/core/modules/widgets/range.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/range.js\ntype: application/javascript\nmodule-type: widget\n\nRange widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RangeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRangeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRangeWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"range\");\n\tthis.inputDomNode.setAttribute(\"class\",this.elementClass);\n\tif(this.minValue){\n\t\tthis.inputDomNode.setAttribute(\"min\", this.minValue);\n\t}\n\tif(this.maxValue){\n\t\tthis.inputDomNode.setAttribute(\"max\", this.maxValue);\n\t}\n\tif(this.increment){\n\t\tthis.inputDomNode.setAttribute(\"step\", this.increment);\n\t}\n\tif(this.isDisabled === \"yes\") {\n\t\tthis.inputDomNode.setAttribute(\"disabled\",true);\n\t}\n\tthis.inputDomNode.value = this.getValue();\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name:\"mousedown\", handlerObject:this, handlerMethod:\"handleMouseDownEvent\"},\n\t\t{name:\"mouseup\", handlerObject:this, handlerMethod:\"handleMouseUpEvent\"},\n\t\t{name:\"change\", handlerObject:this, handlerMethod:\"handleChangeEvent\"},\n\t\t{name:\"input\", handlerObject:this, handlerMethod:\"handleInputEvent\"},\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.inputDomNode,nextSibling);\n\tthis.domNodes.push(this.inputDomNode);\n};\n\nRangeWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle),\n\t\tfieldName = this.tiddlerField,\n\t\tvalue = this.defaultValue;\n\tif(tiddler) {\n\t\tif(this.tiddlerIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(tiddler,this.tiddlerIndex,this.defaultValue);\n\t\t} else {\n\t\t\tif($tw.utils.hop(tiddler.fields,fieldName)) {\n\t\t\t\tvalue = tiddler.fields[fieldName] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = this.defaultValue;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\nRangeWidget.prototype.getActionVariables = function(options) {\n\toptions = options || {};\n\tvar hasChanged = (this.startValue !== this.inputDomNode.value) ? \"yes\" : \"no\";\n\t// Trigger actions. Use variables = {key:value, key:value ...}\n\t// the \"value\" is needed.\n\treturn $tw.utils.extend({\"actionValue\": this.inputDomNode.value, \"actionValueHasChanged\": hasChanged}, options);\n}\n\n// actionsStart\nRangeWidget.prototype.handleMouseDownEvent = function(event) {\n\tthis.mouseDown = true; // TODO remove once IE is gone.\n\tthis.startValue = this.inputDomNode.value; // TODO remove this line once IE is gone!\n\tthis.handleEvent(event);\n\t// Trigger actions\n\tif(this.actionsMouseDown) {\n\t\tvar variables = this.getActionVariables() // TODO this line will go into the function call below.\n\t\tthis.invokeActionString(this.actionsMouseDown,this,event,variables);\n\t}\n}\n\n// actionsStop\nRangeWidget.prototype.handleMouseUpEvent = function(event) {\n\tthis.mouseDown = false; // TODO remove once IE is gone.\n\tthis.handleEvent(event);\n\t// Trigger actions\n\tif(this.actionsMouseUp) {\n\t\tvar variables = this.getActionVariables()\n\t\tthis.invokeActionString(this.actionsMouseUp,this,event,variables);\n\t}\n\t// TODO remove the following if() once IE is gone!\n\tif ($tw.browser.isIE) {\n\t\tif (this.startValue !== this.inputDomNode.value) {\n\t\t\tthis.handleChangeEvent(event);\n\t\t\tthis.startValue = this.inputDomNode.value;\n\t\t}\n\t}\n}\n\nRangeWidget.prototype.handleChangeEvent = function(event) {\n\tif (this.mouseDown) { // TODO refactor this function once IE is gone.\n\t\tthis.handleInputEvent(event);\n\t}\n};\n\nRangeWidget.prototype.handleInputEvent = function(event) {\n\tthis.handleEvent(event);\n\t// Trigger actions\n\tif(this.actionsInput) {\n\t\t// \"tiddler\" parameter may be missing. See .execute() below\n\t\tvar variables = this.getActionVariables({\"actionValueHasChanged\": \"yes\"}) // TODO this line will go into the function call below.\n\t\tthis.invokeActionString(this.actionsInput,this,event,variables);\n\t}\n};\n\nRangeWidget.prototype.handleEvent = function(event) {\n\tif(this.getValue() !== this.inputDomNode.value) {\n\t\tif(this.tiddlerIndex) {\n\t\t\tthis.wiki.setText(this.tiddlerTitle,\"\",this.tiddlerIndex,this.inputDomNode.value);\n\t\t} else {\n\t\t\tthis.wiki.setText(this.tiddlerTitle,this.tiddlerField,null,this.inputDomNode.value);\n\t\t}\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRangeWidget.prototype.execute = function() {\n\t// TODO remove the next 1 lines once IE is gone!\n\tthis.mouseUp = true; // Needed for IE10\n\t// Get the parameters from the attributes\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.tiddlerField = this.getAttribute(\"field\",\"text\");\n\tthis.tiddlerIndex = this.getAttribute(\"index\");\n\tthis.minValue = this.getAttribute(\"min\");\n\tthis.maxValue = this.getAttribute(\"max\");\n\tthis.increment = this.getAttribute(\"increment\");\n\tthis.defaultValue = this.getAttribute(\"default\",\"\");\n\tthis.elementClass = this.getAttribute(\"class\",\"\");\n\tthis.isDisabled = this.getAttribute(\"disabled\",\"no\");\n\t// Actions since 5.1.23\n\t// Next 2 only fire once!\n\tthis.actionsMouseDown = this.getAttribute(\"actionsStart\",\"\");\n\tthis.actionsMouseUp = this.getAttribute(\"actionsStop\",\"\");\n\t// Input fires very often!\n\tthis.actionsInput = this.getAttribute(\"actions\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRangeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.tiddlerTitle]) {\n\t\t\tvar value = this.getValue();\n\t\t\tif(this.inputDomNode.value !== value) {\n\t\t\t\tthis.inputDomNode.value = value;\n\t\t\t}\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.range = RangeWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/raw.js": {
"title": "$:/core/modules/widgets/raw.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/raw.js\ntype: application/javascript\nmodule-type: widget\n\nRaw widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RawWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRawWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRawWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar div = this.document.createElement(\"div\");\n\tdiv.innerHTML=this.parseTreeNode.html;\n\tparent.insertBefore(div,nextSibling);\n\tthis.domNodes.push(div);\t\n};\n\n/*\nCompute the internal state of the widget\n*/\nRawWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRawWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.raw = RawWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/reveal.js": {
"title": "$:/core/modules/widgets/reveal.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/reveal.js\ntype: application/javascript\nmodule-type: widget\n\nReveal widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RevealWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRevealWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRevealWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.revealTag && $tw.config.htmlUnsafeElements.indexOf(this.revealTag) === -1) {\n\t\ttag = this.revealTag;\n\t}\n\tvar domNode = this.document.createElement(tag);\n\tthis.domNode = domNode;\n\tthis.assignDomNodeClasses();\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\t}\n\tif(!this.isOpen) {\n\t\tdomNode.setAttribute(\"hidden\",\"true\");\n\t}\n\tthis.domNodes.push(domNode);\n};\n\nRevealWidget.prototype.positionPopup = function(domNode) {\n\tdomNode.style.position = \"absolute\";\n\tdomNode.style.zIndex = \"1000\";\n\tvar left,top;\n\tswitch(this.position) {\n\t\tcase \"left\":\n\t\t\tleft = this.popup.left - domNode.offsetWidth;\n\t\t\ttop = this.popup.top;\n\t\t\tbreak;\n\t\tcase \"above\":\n\t\t\tleft = this.popup.left;\n\t\t\ttop = this.popup.top - domNode.offsetHeight;\n\t\t\tbreak;\n\t\tcase \"aboveright\":\n\t\t\tleft = this.popup.left + this.popup.width;\n\t\t\ttop = this.popup.top + this.popup.height - domNode.offsetHeight;\n\t\t\tbreak;\n\t\tcase \"belowright\":\n\t\t\tleft = this.popup.left + this.popup.width;\n\t\t\ttop = this.popup.top + this.popup.height;\n\t\t\tbreak;\t\t\t\n\t\tcase \"right\":\n\t\t\tleft = this.popup.left + this.popup.width;\n\t\t\ttop = this.popup.top;\n\t\t\tbreak;\n\t\tcase \"belowleft\":\n\t\t\tleft = this.popup.left + this.popup.width - domNode.offsetWidth;\n\t\t\ttop = this.popup.top + this.popup.height;\n\t\t\tbreak;\n\t\tcase \"aboveleft\":\n\t\t\tleft = this.popup.left - domNode.offsetWidth;\n\t\t\ttop = this.popup.top - domNode.offsetHeight;\n\t\t\tbreak;\t\t\t\n\t\tdefault: // Below\n\t\t\tleft = this.popup.left;\n\t\t\ttop = this.popup.top + this.popup.height;\n\t\t\tbreak;\n\t}\n\tif(!this.positionAllowNegative) {\n\t\tleft = Math.max(0,left);\n\t\ttop = Math.max(0,top);\n\t}\n\tdomNode.style.left = left + \"px\";\n\tdomNode.style.top = top + \"px\";\n};\n\n/*\nCompute the internal state of the widget\n*/\nRevealWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.state = this.getAttribute(\"state\");\n\tthis.revealTag = this.getAttribute(\"tag\");\n\tthis.type = this.getAttribute(\"type\");\n\tthis.text = this.getAttribute(\"text\");\n\tthis.position = this.getAttribute(\"position\");\n\tthis.positionAllowNegative = this.getAttribute(\"positionAllowNegative\") === \"yes\";\n\t// class attribute handled in assignDomNodeClasses()\n\tthis.style = this.getAttribute(\"style\",\"\");\n\tthis[\"default\"] = this.getAttribute(\"default\",\"\");\n\tthis.animate = this.getAttribute(\"animate\",\"no\");\n\tthis.retain = this.getAttribute(\"retain\",\"no\");\n\tthis.openAnimation = this.animate === \"no\" ? undefined : \"open\";\n\tthis.closeAnimation = this.animate === \"no\" ? undefined : \"close\";\n\tthis.updatePopupPosition = this.getAttribute(\"updatePopupPosition\",\"no\") === \"yes\";\n\t// Compute the title of the state tiddler and read it\n\tthis.stateTiddlerTitle = this.state;\n\tthis.stateTitle = this.getAttribute(\"stateTitle\");\n\tthis.stateField = this.getAttribute(\"stateField\");\n\tthis.stateIndex = this.getAttribute(\"stateIndex\");\n\tthis.readState();\n\t// Construct the child widgets\n\tvar childNodes = this.isOpen ? this.parseTreeNode.children : [];\n\tthis.hasChildNodes = this.isOpen;\n\tthis.makeChildWidgets(childNodes);\n};\n\n/*\nRead the state tiddler\n*/\nRevealWidget.prototype.readState = function() {\n\t// Read the information from the state tiddler\n\tvar state,\n\t defaultState = this[\"default\"];\n\tif(this.stateTitle) {\n\t\tvar stateTitleTiddler = this.wiki.getTiddler(this.stateTitle);\n\t\tif(this.stateField) {\n\t\t\tstate = stateTitleTiddler ? stateTitleTiddler.getFieldString(this.stateField) || defaultState : defaultState;\n\t\t} else if(this.stateIndex) {\n\t\t\tstate = stateTitleTiddler ? this.wiki.extractTiddlerDataItem(this.stateTitle,this.stateIndex) || defaultState : defaultState;\n\t\t} else if(stateTitleTiddler) {\n\t\t\tstate = this.wiki.getTiddlerText(this.stateTitle) || defaultState;\n\t\t} else {\n\t\t\tstate = defaultState;\n\t\t}\n\t} else {\n\t\tstate = this.stateTiddlerTitle ? this.wiki.getTextReference(this.state,this[\"default\"],this.getVariable(\"currentTiddler\")) : this[\"default\"];\n\t}\n\tif(state === null) {\n\t\tstate = this[\"default\"];\n\t}\n\tswitch(this.type) {\n\t\tcase \"popup\":\n\t\t\tthis.readPopupState(state);\n\t\t\tbreak;\n\t\tcase \"match\":\n\t\t\tthis.isOpen = this.text === state;\n\t\t\tbreak;\n\t\tcase \"nomatch\":\n\t\t\tthis.isOpen = this.text !== state;\n\t\t\tbreak;\n\t\tcase \"lt\":\n\t\t\tthis.isOpen = !!(this.compareStateText(state) < 0);\n\t\t\tbreak;\n\t\tcase \"gt\":\n\t\t\tthis.isOpen = !!(this.compareStateText(state) > 0);\n\t\t\tbreak;\n\t\tcase \"lteq\":\n\t\t\tthis.isOpen = !(this.compareStateText(state) > 0);\n\t\t\tbreak;\n\t\tcase \"gteq\":\n\t\t\tthis.isOpen = !(this.compareStateText(state) < 0);\n\t\t\tbreak;\n\t}\n};\n\nRevealWidget.prototype.compareStateText = function(state) {\n\treturn state.localeCompare(this.text,undefined,{numeric: true,sensitivity: \"case\"});\n};\n\nRevealWidget.prototype.readPopupState = function(state) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/,\n\t\tmatch = popupLocationRegExp.exec(state);\n\t// Check if the state matches the location regexp\n\tif(match) {\n\t\t// If so, we're open\n\t\tthis.isOpen = true;\n\t\t// Get the location\n\t\tthis.popup = {\n\t\t\tleft: parseFloat(match[1]),\n\t\t\ttop: parseFloat(match[2]),\n\t\t\twidth: parseFloat(match[3]),\n\t\t\theight: parseFloat(match[4])\n\t\t};\n\t} else {\n\t\t// If not, we're closed\n\t\tthis.isOpen = false;\n\t}\n};\n\nRevealWidget.prototype.assignDomNodeClasses = function() {\n\tvar classes = this.getAttribute(\"class\",\"\").split(\" \");\n\tclasses.push(\"tc-reveal\");\n\tthis.domNode.className = classes.join(\" \");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRevealWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.state || changedAttributes.type || changedAttributes.text || changedAttributes.position || changedAttributes.positionAllowNegative || changedAttributes[\"default\"] || changedAttributes.animate || changedAttributes.stateTitle || changedAttributes.stateField || changedAttributes.stateIndex) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar currentlyOpen = this.isOpen;\n\t\tthis.readState();\n\t\tif(this.isOpen !== currentlyOpen) {\n\t\t\tif(this.retain === \"yes\") {\n\t\t\t\tthis.updateState();\n\t\t\t} else {\n\t\t\t\tthis.refreshSelf();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else if(this.type === \"popup\" && this.updatePopupPosition && (changedTiddlers[this.state] || changedTiddlers[this.stateTitle])) {\n\t\t\tthis.positionPopup(this.domNode);\n\t\t}\n\t\tif(changedAttributes.style) {\n\t\t\tthis.domNode.style = this.getAttribute(\"style\",\"\");\n\t\t}\n\t\tif(changedAttributes[\"class\"]) {\n\t\t\tthis.assignDomNodeClasses();\n\t\t}\t\t\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\n/*\nCalled by refresh() to dynamically show or hide the content\n*/\nRevealWidget.prototype.updateState = function() {\n\tvar self = this;\n\t// Read the current state\n\tthis.readState();\n\t// Construct the child nodes if needed\n\tvar domNode = this.domNodes[0];\n\tif(this.isOpen && !this.hasChildNodes) {\n\t\tthis.hasChildNodes = true;\n\t\tthis.makeChildWidgets(this.parseTreeNode.children);\n\t\tthis.renderChildren(domNode,null);\n\t}\n\t// Animate our DOM node\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\n\t}\n\tif(this.isOpen) {\n\t\tdomNode.removeAttribute(\"hidden\");\n $tw.anim.perform(this.openAnimation,domNode);\n\t} else {\n\t\t$tw.anim.perform(this.closeAnimation,domNode,{callback: function() {\n\t\t\t//make sure that the state hasn't changed during the close animation\n\t\t\tself.readState()\n\t\t\tif(!self.isOpen) {\n\t\t\t\tdomNode.setAttribute(\"hidden\",\"true\");\n\t\t\t}\n\t\t}});\n\t}\n};\n\nexports.reveal = RevealWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/scrollable.js": {
"title": "$:/core/modules/widgets/scrollable.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/scrollable.js\ntype: application/javascript\nmodule-type: widget\n\nScrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ScrollableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.scaleFactor = 1;\n\tthis.addEventListeners([\n\t\t{type: \"tm-scroll\", handler: \"handleScrollEvent\"}\n\t]);\n\tif($tw.browser) {\n\t\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\tfunction(callback) {\n\t\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t\t};\n\t\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\t\twindow.webkitCancelAnimationFrame ||\n\t\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\t\twindow.mozCancelAnimationFrame ||\n\t\t\twindow.mozCancelRequestAnimationFrame ||\n\t\t\tfunction(id) {\n\t\t\t\twindow.clearTimeout(id);\n\t\t\t};\n\t}\n};\n\n/*\nInherit from the base widget class\n*/\nScrollableWidget.prototype = new Widget();\n\nScrollableWidget.prototype.cancelScroll = function() {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(window,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle a scroll event\n*/\nScrollableWidget.prototype.handleScrollEvent = function(event) {\n\t// Pass the scroll event through if our offsetsize is larger than our scrollsize\n\tif(this.outerDomNode.scrollWidth <= this.outerDomNode.offsetWidth && this.outerDomNode.scrollHeight <= this.outerDomNode.offsetHeight && this.fallthrough === \"yes\") {\n\t\treturn true;\n\t}\n\tif(event.paramObject && event.paramObject.selector) {\n\t\tthis.scrollSelectorIntoView(null,event.paramObject.selector);\n\t} else {\n\t\tthis.scrollIntoView(event.target);\t\t\t\n\t}\n\treturn false; // Handled event\n};\n\n/*\nScroll an element into view\n*/\nScrollableWidget.prototype.scrollIntoView = function(element) {\n\tvar duration = $tw.utils.getAnimationDuration(),\n\tsrcWindow = element ? element.ownerDocument.defaultView : window;\n\tthis.cancelScroll();\n\tthis.startTime = Date.now();\n\tvar scrollPosition = {\n\t\tx: this.outerDomNode.scrollLeft,\n\t\ty: this.outerDomNode.scrollTop\n\t};\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar scrollableBounds = this.outerDomNode.getBoundingClientRect(),\n\t\tclientTargetBounds = element.getBoundingClientRect(),\n\t\tbounds = {\n\t\t\tleft: clientTargetBounds.left + scrollPosition.x - scrollableBounds.left,\n\t\t\ttop: clientTargetBounds.top + scrollPosition.y - scrollableBounds.top,\n\t\t\twidth: clientTargetBounds.width,\n\t\t\theight: clientTargetBounds.height\n\t\t};\n\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\tvar getEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\t// If the target is already visible then stay where we are\n\t\t\tif(targetPos >= currentPos && (targetPos + targetSize) <= (currentPos + currentSize)) {\n\t\t\t\treturn currentPos;\n\t\t\t// If the target is above/left of the current view, then scroll to its top/left\n\t\t\t} else if(targetPos <= currentPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// If the target is smaller than the window and the scroll position is too far up, then scroll till the target is at the bottom of the window\n\t\t\t} else if(targetSize < currentSize && currentPos < (targetPos + targetSize - currentSize)) {\n\t\t\t\treturn targetPos + targetSize - currentSize;\n\t\t\t// If the target is big, then just scroll to the top\n\t\t\t} else if(currentPos < targetPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// Otherwise, stay where we are\n\t\t\t} else {\n\t\t\t\treturn currentPos;\n\t\t\t}\n\t\t},\n\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,this.outerDomNode.offsetWidth),\n\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,this.outerDomNode.offsetHeight);\n\t// Only scroll if necessary\n\tif(endX !== scrollPosition.x || endY !== scrollPosition.y) {\n\t\tvar self = this,\n\t\t\tdrawFrame;\n\t\tdrawFrame = function () {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll();\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\tself.outerDomNode.scrollLeft = scrollPosition.x + (endX - scrollPosition.x) * t;\n\t\t\tself.outerDomNode.scrollTop = scrollPosition.y + (endY - scrollPosition.y) * t;\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(srcWindow,drawFrame);\n\t\t\t}\n\t\t};\n\t\tdrawFrame();\n\t}\n};\n\nScrollableWidget.prototype.scrollSelectorIntoView = function(baseElement,selector,callback) {\n\tbaseElement = baseElement || document.body;\n\tvar element = baseElement.querySelector(selector);\n\tif(element) {\n\t\tthis.scrollIntoView(element,callback);\t\t\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nScrollableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create elements\n\tthis.outerDomNode = this.document.createElement(\"div\");\n\t$tw.utils.setStyle(this.outerDomNode,[\n\t\t{overflowY: \"auto\"},\n\t\t{overflowX: \"auto\"},\n\t\t{webkitOverflowScrolling: \"touch\"}\n\t]);\n\tthis.innerDomNode = this.document.createElement(\"div\");\n\tthis.outerDomNode.appendChild(this.innerDomNode);\n\t// Assign classes\n\tthis.outerDomNode.className = this[\"class\"] || \"\";\n\t// Insert element\n\tparent.insertBefore(this.outerDomNode,nextSibling);\n\tthis.renderChildren(this.innerDomNode,null);\n\tthis.domNodes.push(this.outerDomNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nScrollableWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.fallthrough = this.getAttribute(\"fallthrough\",\"yes\");\n\tthis[\"class\"] = this.getAttribute(\"class\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nScrollableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.scrollable = ScrollableWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/select.js": {
"title": "$:/core/modules/widgets/select.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/select.js\ntype: application/javascript\nmodule-type: widget\n\nSelect widget:\n\n```\n<$select tiddler=\"MyTiddler\" field=\"text\">\n<$list filter=\"[tag[chapter]]\">\n<option value=<<currentTiddler>>>\n<$view field=\"description\"/>\n</option>\n</$list>\n</$select>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SelectWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSelectWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSelectWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\tthis.setSelectValue();\n\t$tw.utils.addEventListeners(this.getSelectDomNode(),[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n};\n\n/*\nHandle a change event\n*/\nSelectWidget.prototype.handleChangeEvent = function(event) {\n\t// Get the new value and assign it to the tiddler\n\tif(this.selectMultiple == false) {\n\t\tvar value = this.getSelectDomNode().value;\n\t} else {\n\t\tvar value = this.getSelectValues()\n\t\t\t\tvalue = $tw.utils.stringifyList(value);\n\t}\n\tthis.wiki.setText(this.selectTitle,this.selectField,this.selectIndex,value);\n\t// Trigger actions\n\tif(this.selectActions) {\n\t\tthis.invokeActionString(this.selectActions,this,event);\n\t}\n};\n\n/*\nIf necessary, set the value of the select element to the current value\n*/\nSelectWidget.prototype.setSelectValue = function() {\n\tvar value = this.selectDefault;\n\t// Get the value\n\tif(this.selectIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.selectTitle,this.selectIndex,value);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.selectTitle);\n\t\tif(tiddler) {\n\t\t\tif(this.selectField === \"text\") {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.selectTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.selectField)) {\n\t\t\t\t\tvalue = tiddler.getFieldString(this.selectField);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.selectField === \"title\") {\n\t\t\t\tvalue = this.selectTitle;\n\t\t\t}\n\t\t}\n\t}\n\t// Assign it to the select element if it's different than the current value\n\tif (this.selectMultiple) {\n\t\tvalue = value === undefined ? \"\" : value;\n\t\tvar select = this.getSelectDomNode();\n\t\tvar values = Array.isArray(value) ? value : $tw.utils.parseStringArray(value);\n\t\tfor(var i=0; i < select.children.length; i++){\n\t\t\tselect.children[i].selected = values.indexOf(select.children[i].value) !== -1\n\t\t}\n\t} else {\n\t\tvar domNode = this.getSelectDomNode();\n\t\tif(domNode.value !== value) {\n\t\t\tdomNode.value = value;\n\t\t}\n\t}\n};\n\n/*\nGet the DOM node of the select element\n*/\nSelectWidget.prototype.getSelectDomNode = function() {\n\treturn this.children[0].domNodes[0];\n};\n\n// Return an array of the selected opion values\n// select is an HTML select element\nSelectWidget.prototype.getSelectValues = function() {\n\tvar select, result, options, opt;\n\tselect = this.getSelectDomNode();\n\tresult = [];\n\toptions = select && select.options;\n\tfor (var i=0; i<options.length; i++) {\n\t\topt = options[i];\n\t\tif (opt.selected) {\n\t\t\tresult.push(opt.value || opt.text);\n\t\t}\n\t}\n\treturn result;\n}\n\n/*\nCompute the internal state of the widget\n*/\nSelectWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.selectActions = this.getAttribute(\"actions\");\n\tthis.selectTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.selectField = this.getAttribute(\"field\",\"text\");\n\tthis.selectIndex = this.getAttribute(\"index\");\n\tthis.selectClass = this.getAttribute(\"class\");\n\tthis.selectDefault = this.getAttribute(\"default\");\n\tthis.selectMultiple = this.getAttribute(\"multiple\", false);\n\tthis.selectSize = this.getAttribute(\"size\");\n\tthis.selectTooltip = this.getAttribute(\"tooltip\");\n\t// Make the child widgets\n\tvar selectNode = {\n\t\ttype: \"element\",\n\t\ttag: \"select\",\n\t\tchildren: this.parseTreeNode.children\n\t};\n\tif(this.selectClass) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"class\",this.selectClass);\n\t}\n\tif(this.selectMultiple) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"multiple\",\"multiple\");\n\t}\n\tif(this.selectSize) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"size\",this.selectSize);\n\t}\n\tif(this.selectTooltip) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"title\",this.selectTooltip);\n\t}\n\tthis.makeChildWidgets([selectNode]);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSelectWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// If we're using a different tiddler/field/index then completely refresh ourselves\n\tif(changedAttributes.selectTitle || changedAttributes.selectField || changedAttributes.selectIndex || changedAttributes.selectTooltip) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t// If the target tiddler value has changed, just update setting and refresh the children\n\t} else {\n\t\tvar childrenRefreshed = this.refreshChildren(changedTiddlers);\n\t\tif(changedTiddlers[this.selectTitle] || childrenRefreshed) {\n\t\t\tthis.setSelectValue();\n\t\t} \n\t\treturn childrenRefreshed;\n\t}\n};\n\nexports.select = SelectWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/set.js": {
"title": "$:/core/modules/widgets/set.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/set.js\ntype: application/javascript\nmodule-type: widget\n\nSet variable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.setName = this.getAttribute(\"name\",\"currentTiddler\");\n\tthis.setFilter = this.getAttribute(\"filter\");\n\tthis.setSelect = this.getAttribute(\"select\");\n\tthis.setTiddler = this.getAttribute(\"tiddler\");\n\tthis.setSubTiddler = this.getAttribute(\"subtiddler\");\n\tthis.setField = this.getAttribute(\"field\");\n\tthis.setIndex = this.getAttribute(\"index\");\n\tthis.setValue = this.getAttribute(\"value\");\n\tthis.setEmptyValue = this.getAttribute(\"emptyValue\");\n\t// Set context variable\n\tthis.setVariable(this.setName,this.getValue(),this.parseTreeNode.params,!!this.parseTreeNode.isMacroDefinition);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nGet the value to be assigned\n*/\nSetWidget.prototype.getValue = function() {\n\tvar value = this.setValue;\n\tif(this.setTiddler) {\n\t\tvar tiddler;\n\t\tif(this.setSubTiddler) {\n\t\t\ttiddler = this.wiki.getSubTiddler(this.setTiddler,this.setSubTiddler);\n\t\t} else {\n\t\t\ttiddler = this.wiki.getTiddler(this.setTiddler);\t\t\t\n\t\t}\n\t\tif(!tiddler) {\n\t\t\tvalue = this.setEmptyValue;\n\t\t} else if(this.setField) {\n\t\t\tvalue = tiddler.getFieldString(this.setField) || this.setEmptyValue;\n\t\t} else if(this.setIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(this.setTiddler,this.setIndex,this.setEmptyValue);\n\t\t} else {\n\t\t\tvalue = tiddler.fields.text || this.setEmptyValue ;\n\t\t}\n\t} else if(this.setFilter) {\n\t\tvar results = this.wiki.filterTiddlers(this.setFilter,this);\n\t\tif(this.setValue == null) {\n\t\t\tvar select;\n\t\t\tif(this.setSelect) {\n\t\t\t\tselect = parseInt(this.setSelect,10);\n\t\t\t}\n\t\t\tif(select !== undefined) {\n\t\t\t\tvalue = results[select] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = $tw.utils.stringifyList(results);\t\t\t\n\t\t\t}\n\t\t}\n\t\tif(results.length === 0 && this.setEmptyValue !== undefined) {\n\t\t\tvalue = this.setEmptyValue;\n\t\t}\n\t} else if(!value && this.setEmptyValue) {\n\t\tvalue = this.setEmptyValue;\n\t}\n\treturn value || \"\";\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSetWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.filter || changedAttributes.select || changedAttributes.tiddler || (this.setTiddler && changedTiddlers[this.setTiddler]) || changedAttributes.field || changedAttributes.index || changedAttributes.value || changedAttributes.emptyValue ||\n\t (this.setFilter && this.getValue() != this.variables[this.setName].value)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.setvariable = SetWidget;\nexports.set = SetWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/text.js": {
"title": "$:/core/modules/widgets/text.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/text.js\ntype: application/javascript\nmodule-type: widget\n\nText node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TextNodeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTextNodeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTextNodeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar text = this.getAttribute(\"text\",this.parseTreeNode.text || \"\");\n\ttext = text.replace(/\\r/mg,\"\");\n\tvar textNode = this.document.createTextNode(text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTextNodeWidget.prototype.execute = function() {\n\t// Nothing to do for a text node\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTextNodeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.text) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.text = TextNodeWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/tiddler.js": {
"title": "$:/core/modules/widgets/tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/tiddler.js\ntype: application/javascript\nmodule-type: widget\n\nTiddler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTiddlerWidget.prototype.execute = function() {\n\tthis.tiddlerState = this.computeTiddlerState();\n\tthis.setVariable(\"currentTiddler\",this.tiddlerState.currentTiddler);\n\tthis.setVariable(\"missingTiddlerClass\",this.tiddlerState.missingTiddlerClass);\n\tthis.setVariable(\"shadowTiddlerClass\",this.tiddlerState.shadowTiddlerClass);\n\tthis.setVariable(\"systemTiddlerClass\",this.tiddlerState.systemTiddlerClass);\n\tthis.setVariable(\"tiddlerTagClasses\",this.tiddlerState.tiddlerTagClasses);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nCompute the tiddler state flags\n*/\nTiddlerWidget.prototype.computeTiddlerState = function() {\n\t// Get our parameters\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Compute the state\n\tvar state = {\n\t\tcurrentTiddler: this.tiddlerTitle || \"\",\n\t\tmissingTiddlerClass: (this.wiki.tiddlerExists(this.tiddlerTitle) || this.wiki.isShadowTiddler(this.tiddlerTitle)) ? \"tc-tiddler-exists\" : \"tc-tiddler-missing\",\n\t\tshadowTiddlerClass: this.wiki.isShadowTiddler(this.tiddlerTitle) ? \"tc-tiddler-shadow\" : \"\",\n\t\tsystemTiddlerClass: this.wiki.isSystemTiddler(this.tiddlerTitle) ? \"tc-tiddler-system\" : \"\",\n\t\ttiddlerTagClasses: this.getTagClasses()\n\t};\n\t// Compute a simple hash to make it easier to detect changes\n\tstate.hash = state.currentTiddler + state.missingTiddlerClass + state.shadowTiddlerClass + state.systemTiddlerClass + state.tiddlerTagClasses;\n\treturn state;\n};\n\n/*\nCreate a string of CSS classes derived from the tags of the current tiddler\n*/\nTiddlerWidget.prototype.getTagClasses = function() {\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\tif(tiddler) {\n\t\tvar tags = [];\n\t\t$tw.utils.each(tiddler.fields.tags,function(tag) {\n\t\t\ttags.push(\"tc-tagged-\" + encodeURIComponent(tag));\n\t\t});\n\t\treturn tags.join(\" \");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tnewTiddlerState = this.computeTiddlerState();\n\tif(changedAttributes.tiddler || newTiddlerState.hash !== this.tiddlerState.hash) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.tiddler = TiddlerWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/transclude.js": {
"title": "$:/core/modules/widgets/transclude.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/transclude.js\ntype: application/javascript\nmodule-type: widget\n\nTransclude widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TranscludeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTranscludeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTranscludeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTranscludeWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.transcludeTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.transcludeSubTiddler = this.getAttribute(\"subtiddler\");\n\tthis.transcludeField = this.getAttribute(\"field\");\n\tthis.transcludeIndex = this.getAttribute(\"index\");\n\tthis.transcludeMode = this.getAttribute(\"mode\");\n\tthis.recursionMarker = this.getAttribute(\"recursionMarker\",\"yes\");\n\t// Parse the text reference\n\tvar parseAsInline = !this.parseTreeNode.isBlock;\n\tif(this.transcludeMode === \"inline\") {\n\t\tparseAsInline = true;\n\t} else if(this.transcludeMode === \"block\") {\n\t\tparseAsInline = false;\n\t}\n\tvar parser = this.wiki.parseTextReference(\n\t\t\t\t\t\tthis.transcludeTitle,\n\t\t\t\t\t\tthis.transcludeField,\n\t\t\t\t\t\tthis.transcludeIndex,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tparseAsInline: parseAsInline,\n\t\t\t\t\t\t\tsubTiddler: this.transcludeSubTiddler\n\t\t\t\t\t\t}),\n\t\tparseTreeNodes = parser ? parser.tree : this.parseTreeNode.children;\n\t// Set context variables for recursion detection\n\tvar recursionMarker = this.makeRecursionMarker();\n\tif(this.recursionMarker === \"yes\") {\n\t\tthis.setVariable(\"transclusion\",recursionMarker);\n\t}\n\t// Check for recursion\n\tif(parser) {\n\t\tif(this.parentWidget && this.parentWidget.hasVariable(\"transclusion\",recursionMarker)) {\n\t\t\tparseTreeNodes = [{type: \"element\", tag: \"span\", attributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-error\"}\n\t\t\t}, children: [\n\t\t\t\t{type: \"text\", text: $tw.language.getString(\"Error/RecursiveTransclusion\")}\n\t\t\t]}];\n\t\t}\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nCompose a string comprising the title, field and/or index to identify this transclusion for recursion detection\n*/\nTranscludeWidget.prototype.makeRecursionMarker = function() {\n\tvar output = [];\n\toutput.push(\"{\");\n\toutput.push(this.getVariable(\"currentTiddler\",{defaultValue: \"\"}));\n\toutput.push(\"|\");\n\toutput.push(this.transcludeTitle || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeField || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeIndex || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeSubTiddler || \"\");\n\toutput.push(\"}\");\n\treturn output.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTranscludeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedTiddlers[this.transcludeTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.transclude = TranscludeWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/vars.js": {
"title": "$:/core/modules/widgets/vars.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/vars.js\ntype: application/javascript\nmodule-type: widget\n\nThis widget allows multiple variables to be set in one go:\n\n```\n\\define helloworld() Hello world!\n<$vars greeting=\"Hi\" me={{!!title}} sentence=<<helloworld>>>\n <<greeting>>! I am <<me>> and I say: <<sentence>>\n</$vars>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar VarsWidget = function(parseTreeNode,options) {\n\t// Call the constructor\n\tWidget.call(this);\n\t// Initialise\t\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nVarsWidget.prototype = Object.create(Widget.prototype);\n\n/*\nRender this widget into the DOM\n*/\nVarsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nVarsWidget.prototype.execute = function() {\n\t// Parse variables\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(val,key) {\n\t\tif(key.charAt(0) !== \"$\") {\n\t\t\tself.setVariable(key,val);\n\t\t}\n\t});\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nVarsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"vars\"] = VarsWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/view.js": {
"title": "$:/core/modules/widgets/view.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/view.js\ntype: application/javascript\nmodule-type: widget\n\nView widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ViewWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nViewWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nViewWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tif(this.text) {\n\t\tvar textNode = this.document.createTextNode(this.text);\n\t\tparent.insertBefore(textNode,nextSibling);\n\t\tthis.domNodes.push(textNode);\n\t} else {\n\t\tthis.makeChildWidgets();\n\t\tthis.renderChildren(parent,nextSibling);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nViewWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.viewTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.viewSubtiddler = this.getAttribute(\"subtiddler\");\n\tthis.viewField = this.getAttribute(\"field\",\"text\");\n\tthis.viewIndex = this.getAttribute(\"index\");\n\tthis.viewFormat = this.getAttribute(\"format\",\"text\");\n\tthis.viewTemplate = this.getAttribute(\"template\",\"\");\n\tthis.viewMode = this.getAttribute(\"mode\",\"block\");\n\tswitch(this.viewFormat) {\n\t\tcase \"htmlwikified\":\n\t\t\tthis.text = this.getValueAsHtmlWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"plainwikified\":\n\t\t\tthis.text = this.getValueAsPlainWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"htmlencodedplainwikified\":\n\t\t\tthis.text = this.getValueAsHtmlEncodedPlainWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"htmlencoded\":\n\t\t\tthis.text = this.getValueAsHtmlEncoded();\n\t\t\tbreak;\n\t\tcase \"urlencoded\":\n\t\t\tthis.text = this.getValueAsUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"doubleurlencoded\":\n\t\t\tthis.text = this.getValueAsDoubleUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"date\":\n\t\t\tthis.text = this.getValueAsDate(this.viewTemplate);\n\t\t\tbreak;\n\t\tcase \"relativedate\":\n\t\t\tthis.text = this.getValueAsRelativeDate();\n\t\t\tbreak;\n\t\tcase \"stripcomments\":\n\t\t\tthis.text = this.getValueAsStrippedComments();\n\t\t\tbreak;\n\t\tcase \"jsencoded\":\n\t\t\tthis.text = this.getValueAsJsEncoded();\n\t\t\tbreak;\n\t\tdefault: // \"text\"\n\t\t\tthis.text = this.getValueAsText();\n\t\t\tbreak;\n\t}\n};\n\n/*\nThe various formatter functions are baked into this widget for the moment. Eventually they will be replaced by macro functions\n*/\n\n/*\nRetrieve the value of the widget. Options are:\nasString: Optionally return the value as a string\n*/\nViewWidget.prototype.getValue = function(options) {\n\toptions = options || {};\n\tvar value = options.asString ? \"\" : undefined;\n\tif(this.viewIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.viewTitle,this.viewIndex);\n\t} else {\n\t\tvar tiddler;\n\t\tif(this.viewSubtiddler) {\n\t\t\ttiddler = this.wiki.getSubTiddler(this.viewTitle,this.viewSubtiddler);\t\n\t\t} else {\n\t\t\ttiddler = this.wiki.getTiddler(this.viewTitle);\n\t\t}\n\t\tif(tiddler) {\n\t\t\tif(this.viewField === \"text\" && !this.viewSubtiddler) {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.viewTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.viewField)) {\n\t\t\t\t\tif(options.asString) {\n\t\t\t\t\t\tvalue = tiddler.getFieldString(this.viewField);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue = tiddler.fields[this.viewField];\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.viewField === \"title\") {\n\t\t\t\tvalue = this.viewTitle;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\nViewWidget.prototype.getValueAsText = function() {\n\treturn this.getValue({asString: true});\n};\n\nViewWidget.prototype.getValueAsHtmlWikified = function(mode) {\n\treturn this.wiki.renderText(\"text/html\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t});\n};\n\nViewWidget.prototype.getValueAsPlainWikified = function(mode) {\n\treturn this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t});\n};\n\nViewWidget.prototype.getValueAsHtmlEncodedPlainWikified = function(mode) {\n\treturn $tw.utils.htmlEncode(this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t}));\n};\n\nViewWidget.prototype.getValueAsHtmlEncoded = function() {\n\treturn $tw.utils.htmlEncode(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsUrlEncoded = function() {\n\treturn encodeURIComponent(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsDoubleUrlEncoded = function() {\n\treturn encodeURIComponent(encodeURIComponent(this.getValueAsText()));\n};\n\nViewWidget.prototype.getValueAsDate = function(format) {\n\tformat = format || \"YYYY MM DD 0hh:0mm\";\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.formatDateString(value,format);\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsRelativeDate = function(format) {\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.getRelativeDate((new Date()) - (new Date(value))).description;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsStrippedComments = function() {\n\tvar lines = this.getValueAsText().split(\"\\n\"),\n\t\tout = [];\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar text = lines[line];\n\t\tif(!/^\\s*\\/\\/#/.test(text)) {\n\t\t\tout.push(text);\n\t\t}\n\t}\n\treturn out.join(\"\\n\");\n};\n\nViewWidget.prototype.getValueAsJsEncoded = function() {\n\treturn $tw.utils.stringify(this.getValueAsText());\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nViewWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.template || changedAttributes.format || changedTiddlers[this.viewTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.view = ViewWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/widget.js": {
"title": "$:/core/modules/widgets/widget.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/widget.js\ntype: application/javascript\nmodule-type: widget\n\nWidget base class\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate a widget object for a parse tree node\n\tparseTreeNode: reference to the parse tree node to be rendered\n\toptions: see below\nOptions include:\n\twiki: mandatory reference to wiki associated with this render tree\n\tparentWidget: optional reference to a parent renderer node for the context chain\n\tdocument: optional document object to use instead of global document\n*/\nvar Widget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInitialise widget properties. These steps are pulled out of the constructor so that we can reuse them in subclasses\n*/\nWidget.prototype.initialise = function(parseTreeNode,options) {\n\t// Bail if parseTreeNode is undefined, meaning that the widget constructor was called without any arguments so that it can be subclassed\n\tif(parseTreeNode === undefined) {\n\t\treturn;\n\t}\n\toptions = options || {};\n\t// Save widget info\n\tthis.parseTreeNode = parseTreeNode;\n\tthis.wiki = options.wiki;\n\tthis.parentWidget = options.parentWidget;\n\tthis.variablesConstructor = function() {};\n\tthis.variablesConstructor.prototype = this.parentWidget ? this.parentWidget.variables : {};\n\tthis.variables = new this.variablesConstructor();\n\tthis.document = options.document;\n\tthis.attributes = {};\n\tthis.children = [];\n\tthis.domNodes = [];\n\tthis.eventListeners = {};\n\t// Hashmap of the widget classes\n\tif(!this.widgetClasses) {\n\t\t// Get widget classes\n\t\tWidget.prototype.widgetClasses = $tw.modules.applyMethods(\"widget\");\n\t\t// Process any subclasses\n\t\t$tw.modules.forEachModuleOfType(\"widget-subclass\",function(title,module) {\n\t\t\tif(module.baseClass) {\n\t\t\t\tvar baseClass = Widget.prototype.widgetClasses[module.baseClass];\n\t\t\t\tif(!baseClass) {\n\t\t\t\t\tthrow \"Module '\" + title + \"' is attemping to extend a non-existent base class '\" + module.baseClass + \"'\";\n\t\t\t\t}\n\t\t\t\tvar subClass = module.constructor;\n\t\t\t\tsubClass.prototype = new baseClass();\n\t\t\t\t$tw.utils.extend(subClass.prototype,module.prototype);\n\t\t\t\tWidget.prototype.widgetClasses[module.name || module.baseClass] = subClass;\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWidget.prototype.execute = function() {\n\tthis.makeChildWidgets();\n};\n\n/*\nSet the value of a context variable\nname: name of the variable\nvalue: value of the variable\nparams: array of {name:, default:} for each parameter\nisMacroDefinition: true if the variable is set via a \\define macro pragma (and hence should have variable substitution performed)\n*/\nWidget.prototype.setVariable = function(name,value,params,isMacroDefinition) {\n\tthis.variables[name] = {value: value, params: params, isMacroDefinition: !!isMacroDefinition};\n};\n\n/*\nGet the prevailing value of a context variable\nname: name of variable\noptions: see below\nOptions include\nparams: array of {name:, value:} for each parameter\ndefaultValue: default value if the variable is not defined\n\nReturns an object with the following fields:\n\nparams: array of {name:,value:} of parameters passed to wikitext variables\ntext: text of variable, with parameters properly substituted\n*/\nWidget.prototype.getVariableInfo = function(name,options) {\n\toptions = options || {};\n\tvar actualParams = options.params || [],\n\t\tparentWidget = this.parentWidget;\n\t// Check for the variable defined in the parent widget (or an ancestor in the prototype chain)\n\tif(parentWidget && name in parentWidget.variables) {\n\t\tvar variable = parentWidget.variables[name],\n\t\t\toriginalValue = variable.value,\n\t\t\tvalue = originalValue,\n\t\t\tparams = this.resolveVariableParameters(variable.params,actualParams);\n\t\t// Substitute any parameters specified in the definition\n\t\t$tw.utils.each(params,function(param) {\n\t\t\tvalue = $tw.utils.replaceString(value,new RegExp(\"\\\\$\" + $tw.utils.escapeRegExp(param.name) + \"\\\\$\",\"mg\"),param.value);\n\t\t});\n\t\t// Only substitute variable references if this variable was defined with the \\define pragma\n\t\tif(variable.isMacroDefinition) {\n\t\t\tvalue = this.substituteVariableReferences(value);\t\t\t\n\t\t}\n\t\treturn {\n\t\t\ttext: value,\n\t\t\tparams: params,\n\t\t\tsrcVariable: variable,\n\t\t\tisCacheable: originalValue === value\n\t\t};\n\t}\n\t// If the variable doesn't exist in the parent widget then look for a macro module\n\treturn {\n\t\ttext: this.evaluateMacroModule(name,actualParams,options.defaultValue)\n\t};\n};\n\n/*\nSimplified version of getVariableInfo() that just returns the text\n*/\nWidget.prototype.getVariable = function(name,options) {\n\treturn this.getVariableInfo(name,options).text;\n};\n\nWidget.prototype.resolveVariableParameters = function(formalParams,actualParams) {\n\tformalParams = formalParams || [];\n\tactualParams = actualParams || [];\n\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\tparamInfo, paramValue,\n\t\tresults = [];\n\t// Step through each of the parameters in the macro definition\n\tfor(var p=0; p<formalParams.length; p++) {\n\t\t// Check if we've got a macro call parameter with the same name\n\t\tparamInfo = formalParams[p];\n\t\tparamValue = undefined;\n\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t}\n\t\t}\n\t\t// If not, use the next available anonymous macro call parameter\n\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\tnextAnonParameter++;\n\t\t}\n\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t}\n\t\t// If we've still not got a value, use the default, if any\n\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t// Store the parameter name and value\n\t\tresults.push({name: paramInfo.name, value: paramValue});\n\t}\n\treturn results;\n};\n\nWidget.prototype.substituteVariableReferences = function(text) {\n\tvar self = this;\n\treturn (text || \"\").replace(/\\$\\(([^\\)\\$]+)\\)\\$/g,function(match,p1,offset,string) {\n\t\treturn self.getVariable(p1,{defaultValue: \"\"});\n\t});\n};\n\nWidget.prototype.evaluateMacroModule = function(name,actualParams,defaultValue) {\n\tif($tw.utils.hop($tw.macros,name)) {\n\t\tvar macro = $tw.macros[name],\n\t\t\targs = [];\n\t\tif(macro.params.length > 0) {\n\t\t\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\t\t\tparamInfo, paramValue;\n\t\t\t// Step through each of the parameters in the macro definition\n\t\t\tfor(var p=0; p<macro.params.length; p++) {\n\t\t\t\t// Check if we've got a macro call parameter with the same name\n\t\t\t\tparamInfo = macro.params[p];\n\t\t\t\tparamValue = undefined;\n\t\t\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If not, use the next available anonymous macro call parameter\n\t\t\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\t\t\tnextAnonParameter++;\n\t\t\t\t}\n\t\t\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t\t\t}\n\t\t\t\t// If we've still not got a value, use the default, if any\n\t\t\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t\t\t// Save the parameter\n\t\t\t\targs.push(paramValue);\n\t\t\t}\n\t\t}\n\t\telse for(var i=0; i<actualParams.length; ++i) {\n\t\t\targs.push(actualParams[i].value);\n\t\t}\n\t\treturn (macro.run.apply(this,args) || \"\").toString();\n\t} else {\n\t\treturn defaultValue;\n\t}\n};\n\n/*\nCheck whether a given context variable value exists in the parent chain\n*/\nWidget.prototype.hasVariable = function(name,value) {\n\tvar node = this;\n\twhile(node) {\n\t\tif($tw.utils.hop(node.variables,name) && node.variables[name].value === value) {\n\t\t\treturn true;\n\t\t}\n\t\tnode = node.parentWidget;\n\t}\n\treturn false;\n};\n\n/*\nConstruct a qualifying string based on a hash of concatenating the values of a given variable in the parent chain\n*/\nWidget.prototype.getStateQualifier = function(name) {\n\tthis.qualifiers = this.qualifiers || Object.create(null);\n\tname = name || \"transclusion\";\n\tif(this.qualifiers[name]) {\n\t\treturn this.qualifiers[name];\n\t} else {\n\t\tvar output = [],\n\t\t\tnode = this;\n\t\twhile(node && node.parentWidget) {\n\t\t\tif($tw.utils.hop(node.parentWidget.variables,name)) {\n\t\t\t\toutput.push(node.getVariable(name));\n\t\t\t}\n\t\t\tnode = node.parentWidget;\n\t\t}\n\t\tvar value = $tw.utils.hashString(output.join(\"\"));\n\t\tthis.qualifiers[name] = value;\n\t\treturn value;\n\t}\n};\n\n/*\nCompute the current values of the attributes of the widget. Returns a hashmap of the names of the attributes that have changed\n*/\nWidget.prototype.computeAttributes = function() {\n\tvar changedAttributes = {},\n\t\tself = this,\n\t\tvalue;\n\t$tw.utils.each(this.parseTreeNode.attributes,function(attribute,name) {\n\t\tif(attribute.type === \"filtered\") {\n\t\t\tvalue = self.wiki.filterTiddlers(attribute.filter,self)[0] || \"\";\n\t\t} else if(attribute.type === \"indirect\") {\n\t\t\tvalue = self.wiki.getTextReference(attribute.textReference,\"\",self.getVariable(\"currentTiddler\"));\n\t\t} else if(attribute.type === \"macro\") {\n\t\t\tvalue = self.getVariable(attribute.value.name,{params: attribute.value.params});\n\t\t} else { // String attribute\n\t\t\tvalue = attribute.value;\n\t\t}\n\t\t// Check whether the attribute has changed\n\t\tif(self.attributes[name] !== value) {\n\t\t\tself.attributes[name] = value;\n\t\t\tchangedAttributes[name] = true;\n\t\t}\n\t});\n\treturn changedAttributes;\n};\n\n/*\nCheck for the presence of an attribute\n*/\nWidget.prototype.hasAttribute = function(name) {\n\treturn $tw.utils.hop(this.attributes,name);\n};\n\n/*\nGet the value of an attribute\n*/\nWidget.prototype.getAttribute = function(name,defaultText) {\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\treturn this.attributes[name];\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nAssign the computed attributes of the widget to a domNode\noptions include:\nexcludeEventAttributes: ignores attributes whose name begins with \"on\"\n*/\nWidget.prototype.assignAttributes = function(domNode,options) {\n\toptions = options || {};\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(v,a) {\n\t\t// Check exclusions\n\t\tif(options.excludeEventAttributes && a.substr(0,2) === \"on\") {\n\t\t\tv = undefined;\n\t\t}\n\t\tif(v !== undefined) {\n\t\t\tvar b = a.split(\":\");\n\t\t\t// Setting certain attributes can cause a DOM error (eg xmlns on the svg element)\n\t\t\ttry {\n\t\t\t\tif (b.length == 2 && b[0] == \"xlink\"){\n\t\t\t\t\tdomNode.setAttributeNS(\"http://www.w3.org/1999/xlink\",b[1],v);\n\t\t\t\t} else {\n\t\t\t\t\tdomNode.setAttributeNS(null,a,v);\n\t\t\t\t}\n\t\t\t} catch(e) {\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nMake child widgets correspondng to specified parseTreeNodes\n*/\nWidget.prototype.makeChildWidgets = function(parseTreeNodes) {\n\tthis.children = [];\n\tvar self = this;\n\t$tw.utils.each(parseTreeNodes || (this.parseTreeNode && this.parseTreeNode.children),function(childNode) {\n\t\tself.children.push(self.makeChildWidget(childNode));\n\t});\n};\n\n/*\nConstruct the widget object for a parse tree node\n*/\nWidget.prototype.makeChildWidget = function(parseTreeNode) {\n\tvar WidgetClass = this.widgetClasses[parseTreeNode.type];\n\tif(!WidgetClass) {\n\t\tWidgetClass = this.widgetClasses.text;\n\t\tparseTreeNode = {type: \"text\", text: \"Undefined widget '\" + parseTreeNode.type + \"'\"};\n\t}\n\treturn new WidgetClass(parseTreeNode,{\n\t\twiki: this.wiki,\n\t\tvariables: {},\n\t\tparentWidget: this,\n\t\tdocument: this.document\n\t});\n};\n\n/*\nGet the next sibling of this widget\n*/\nWidget.prototype.nextSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index < this.parentWidget.children.length-1) {\n\t\t\treturn this.parentWidget.children[index+1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the previous sibling of this widget\n*/\nWidget.prototype.previousSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index > 0) {\n\t\t\treturn this.parentWidget.children[index-1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRender the children of this widget into the DOM\n*/\nWidget.prototype.renderChildren = function(parent,nextSibling) {\n\tvar children = this.children;\n\tfor(var i = 0; i < children.length; i++) {\n\t\tchildren[i].render(parent,nextSibling);\n\t};\n};\n\n/*\nAdd a list of event listeners from an array [{type:,handler:},...]\n*/\nWidget.prototype.addEventListeners = function(listeners) {\n\tvar self = this;\n\t$tw.utils.each(listeners,function(listenerInfo) {\n\t\tself.addEventListener(listenerInfo.type,listenerInfo.handler);\n\t});\n};\n\n/*\nAdd an event listener\n*/\nWidget.prototype.addEventListener = function(type,handler) {\n\tvar self = this;\n\tif(typeof handler === \"string\") { // The handler is a method name on this widget\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn self[handler].call(self,event);\n\t\t};\n\t} else { // The handler is a function\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn handler.call(self,event);\n\t\t};\n\t}\n};\n\n/*\nDispatch an event to a widget. If the widget doesn't handle the event then it is also dispatched to the parent widget\n*/\nWidget.prototype.dispatchEvent = function(event) {\n\tevent.widget = event.widget || this;\n\t// Dispatch the event if this widget handles it\n\tvar listener = this.eventListeners[event.type];\n\tif(listener) {\n\t\t// Don't propagate the event if the listener returned false\n\t\tif(!listener(event)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Dispatch the event to the parent widget\n\tif(this.parentWidget) {\n\t\treturn this.parentWidget.dispatchEvent(event);\n\t}\n\treturn true;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nRebuild a previously rendered widget\n*/\nWidget.prototype.refreshSelf = function() {\n\tvar nextSibling = this.findNextSiblingDomNode();\n\tthis.removeChildDomNodes();\n\tthis.render(this.parentDomNode,nextSibling);\n};\n\n/*\nRefresh all the children of a widget\n*/\nWidget.prototype.refreshChildren = function(changedTiddlers) {\n\tvar children = this.children,\n\t\trefreshed = false;\n\tfor (var i = 0; i < children.length; i++) {\n\t\trefreshed = children[i].refresh(changedTiddlers) || refreshed;\n\t}\n\treturn refreshed;\n};\n\n/*\nFind the next sibling in the DOM to this widget. This is done by scanning the widget tree through all next siblings and their descendents that share the same parent DOM node\n*/\nWidget.prototype.findNextSiblingDomNode = function(startIndex) {\n\t// Refer to this widget by its index within its parents children\n\tvar parent = this.parentWidget,\n\t\tindex = startIndex !== undefined ? startIndex : parent.children.indexOf(this);\nif(index === -1) {\n\tthrow \"node not found in parents children\";\n}\n\t// Look for a DOM node in the later siblings\n\twhile(++index < parent.children.length) {\n\t\tvar domNode = parent.children[index].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\t// Go back and look for later siblings of our parent if it has the same parent dom node\n\tvar grandParent = parent.parentWidget;\n\tif(grandParent && parent.parentDomNode === this.parentDomNode) {\n\t\tindex = grandParent.children.indexOf(parent);\n\t\tif(index !== -1) {\n\t\t\treturn parent.findNextSiblingDomNode(index);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nFind the first DOM node generated by a widget or its children\n*/\nWidget.prototype.findFirstDomNode = function() {\n\t// Return the first dom node of this widget, if we've got one\n\tif(this.domNodes.length > 0) {\n\t\treturn this.domNodes[0];\n\t}\n\t// Otherwise, recursively call our children\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar domNode = this.children[t].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRemove any DOM nodes created by this widget or its children\n*/\nWidget.prototype.removeChildDomNodes = function() {\n\t// If this widget has directly created DOM nodes, delete them and exit. This assumes that any child widgets are contained within the created DOM nodes, which would normally be the case\n\tif(this.domNodes.length > 0) {\n\t\t$tw.utils.each(this.domNodes,function(domNode) {\n\t\t\tdomNode.parentNode.removeChild(domNode);\n\t\t});\n\t\tthis.domNodes = [];\n\t} else {\n\t\t// Otherwise, ask the child widgets to delete their DOM nodes\n\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\tchildWidget.removeChildDomNodes();\n\t\t});\n\t}\n};\n\n/*\nInvoke the action widgets that are descendents of the current widget.\n*/\nWidget.prototype.invokeActions = function(triggeringWidget,event) {\n\tvar handled = false;\n\t// For each child widget\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar child = this.children[t];\n\t\t// Invoke the child if it is an action widget\n\t\tif(child.invokeAction) {\n\t\t\tchild.refreshSelf();\n\t\t\tif(child.invokeAction(triggeringWidget,event)) {\n\t\t\t\thandled = true;\n\t\t\t}\n\t\t}\n\t\t// Propagate through through the child if it permits it\n\t\tif(child.allowActionPropagation() && child.invokeActions(triggeringWidget,event)) {\n\t\t\thandled = true;\n\t\t}\n\t}\n\treturn handled;\n};\n\n/*\nInvoke the action widgets defined in a string\n*/\nWidget.prototype.invokeActionString = function(actions,triggeringWidget,event,variables) {\n\tactions = actions || \"\";\n\tvar parser = this.wiki.parseText(\"text/vnd.tiddlywiki\",actions,{\n\t\t\tparentWidget: this,\n\t\t\tdocument: this.document\n\t\t}),\n\t\twidgetNode = this.wiki.makeWidget(parser,{\n\t\t\tparentWidget: this,\n\t\t\tdocument: this.document,\n\t\t\tvariables: variables\n\t\t});\n\tvar container = this.document.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn widgetNode.invokeActions(this,event);\n};\n\n/*\nExecute action tiddlers by tag\n*/\nWidget.prototype.invokeActionsByTag = function(tag,event,variables) {\n\tvar self = this;\n\t$tw.utils.each(self.wiki.filterTiddlers(\"[all[shadows+tiddlers]tag[\" + tag + \"]!has[draft.of]]\"),function(title) {\n\t\tself.invokeActionString(self.wiki.getTiddlerText(title),self,event,variables);\n\t});\n};\n\nWidget.prototype.allowActionPropagation = function() {\n\treturn true;\n};\n\nexports.widget = Widget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/wikify.js": {
"title": "$:/core/modules/widgets/wikify.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/wikify.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to wikify text into a variable\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar WikifyWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nWikifyWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nWikifyWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWikifyWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.wikifyName = this.getAttribute(\"name\");\n\tthis.wikifyText = this.getAttribute(\"text\");\n\tthis.wikifyType = this.getAttribute(\"type\");\n\tthis.wikifyMode = this.getAttribute(\"mode\",\"block\");\n\tthis.wikifyOutput = this.getAttribute(\"output\",\"text\");\n\t// Create the parse tree\n\tthis.wikifyParser = this.wiki.parseText(this.wikifyType,this.wikifyText,{\n\t\t\tparseAsInline: this.wikifyMode === \"inline\"\n\t\t});\n\t// Create the widget tree \n\tthis.wikifyWidgetNode = this.wiki.makeWidget(this.wikifyParser,{\n\t\t\tdocument: $tw.fakeDocument,\n\t\t\tparentWidget: this\n\t\t});\n\t// Render the widget tree to the container\n\tthis.wikifyContainer = $tw.fakeDocument.createElement(\"div\");\n\tthis.wikifyWidgetNode.render(this.wikifyContainer,null);\n\tthis.wikifyResult = this.getResult();\n\t// Set context variable\n\tthis.setVariable(this.wikifyName,this.wikifyResult);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nReturn the result string\n*/\nWikifyWidget.prototype.getResult = function() {\n\tvar result;\n\tswitch(this.wikifyOutput) {\n\t\tcase \"text\":\n\t\t\tresult = this.wikifyContainer.textContent;\n\t\t\tbreak;\n\t\tcase \"formattedtext\":\n\t\t\tresult = this.wikifyContainer.formattedTextContent;\n\t\t\tbreak;\n\t\tcase \"html\":\n\t\t\tresult = this.wikifyContainer.innerHTML;\n\t\t\tbreak;\n\t\tcase \"parsetree\":\n\t\t\tresult = JSON.stringify(this.wikifyParser.tree,0,$tw.config.preferences.jsonSpaces);\n\t\t\tbreak;\n\t\tcase \"widgettree\":\n\t\t\tresult = JSON.stringify(this.getWidgetTree(),0,$tw.config.preferences.jsonSpaces);\n\t\t\tbreak;\n\t}\n\treturn result;\n};\n\n/*\nReturn a string of the widget tree\n*/\nWikifyWidget.prototype.getWidgetTree = function() {\n\tvar copyNode = function(widgetNode,resultNode) {\n\t\t\tvar type = widgetNode.parseTreeNode.type;\n\t\t\tresultNode.type = type;\n\t\t\tswitch(type) {\n\t\t\t\tcase \"element\":\n\t\t\t\t\tresultNode.tag = widgetNode.parseTreeNode.tag;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\tresultNode.text = widgetNode.parseTreeNode.text;\n\t\t\t\t\tbreak;\t\n\t\t\t}\n\t\t\tif(Object.keys(widgetNode.attributes || {}).length > 0) {\n\t\t\t\tresultNode.attributes = {};\n\t\t\t\t$tw.utils.each(widgetNode.attributes,function(attr,attrName) {\n\t\t\t\t\tresultNode.attributes[attrName] = widgetNode.getAttribute(attrName);\n\t\t\t\t});\n\t\t\t}\n\t\t\tif(Object.keys(widgetNode.children || {}).length > 0) {\n\t\t\t\tresultNode.children = [];\n\t\t\t\t$tw.utils.each(widgetNode.children,function(widgetChildNode) {\n\t\t\t\t\tvar node = {};\n\t\t\t\t\tresultNode.children.push(node);\n\t\t\t\t\tcopyNode(widgetChildNode,node);\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tresults = {};\n\tcopyNode(this.wikifyWidgetNode,results);\n\treturn results;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWikifyWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh ourselves entirely if any of our attributes have changed\n\tif(changedAttributes.name || changedAttributes.text || changedAttributes.type || changedAttributes.mode || changedAttributes.output) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\t// Refresh the widget tree\n\t\tif(this.wikifyWidgetNode.refresh(changedTiddlers)) {\n\t\t\t// Check if there was any change\n\t\t\tvar result = this.getResult();\n\t\t\tif(result !== this.wikifyResult) {\n\t\t\t\t// If so, save the change\n\t\t\t\tthis.wikifyResult = result;\n\t\t\t\tthis.setVariable(this.wikifyName,this.wikifyResult);\n\t\t\t\t// Refresh each of our child widgets\n\t\t\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\t\t\tchildWidget.refreshSelf();\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t// Just refresh the children\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.wikify = WikifyWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/wiki-bulkops.js": {
"title": "$:/core/modules/wiki-bulkops.js",
"text": "/*\\\ntitle: $:/core/modules/wiki-bulkops.js\ntype: application/javascript\nmodule-type: wikimethod\n\nBulk tiddler operations such as rename.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRename a tiddler, and relink any tags or lists that reference it.\n*/\nfunction renameTiddler(fromTitle,toTitle,options) {\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\toptions = options || {};\n\tif(fromTitle && toTitle && fromTitle !== toTitle) {\n\t\t// Rename the tiddler itself\n\t\tvar oldTiddler = this.getTiddler(fromTitle),\n\t\t\tnewTiddler = new $tw.Tiddler(oldTiddler,{title: toTitle},this.getModificationFields());\n\t\tnewTiddler = $tw.hooks.invokeHook(\"th-renaming-tiddler\",newTiddler,oldTiddler);\n\t\tthis.addTiddler(newTiddler);\n\t\tthis.deleteTiddler(fromTitle);\n\t\t// Rename any tags or lists that reference it\n\t\tthis.relinkTiddler(fromTitle,toTitle,options)\n\t}\n}\n\n/*\nRelink any tags or lists that reference a given tiddler\n*/\nfunction relinkTiddler(fromTitle,toTitle,options) {\n\tvar self = this;\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\toptions = options || {};\n\tif(fromTitle && toTitle && fromTitle !== toTitle) {\n\t\tthis.each(function(tiddler,title) {\n\t\t\tvar type = tiddler.fields.type || \"\";\n\t\t\t// Don't touch plugins or JavaScript modules\n\t\t\tif(!tiddler.fields[\"plugin-type\"] && type !== \"application/javascript\") {\n\t\t\t\tvar tags = tiddler.fields.tags ? tiddler.fields.tags.slice(0) : undefined,\n\t\t\t\t\tlist = tiddler.fields.list ? tiddler.fields.list.slice(0) : undefined,\n\t\t\t\t\tisModified = false;\n\t\t\t\tif(!options.dontRenameInTags) {\n\t\t\t\t\t// Rename tags\n\t\t\t\t\t$tw.utils.each(tags,function (title,index) {\n\t\t\t\t\t\tif(title === fromTitle) {\nconsole.log(\"Renaming tag '\" + tags[index] + \"' to '\" + toTitle + \"' of tiddler '\" + tiddler.fields.title + \"'\");\n\t\t\t\t\t\t\ttags[index] = toTitle;\n\t\t\t\t\t\t\tisModified = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif(!options.dontRenameInLists) {\n\t\t\t\t\t// Rename lists\n\t\t\t\t\t$tw.utils.each(list,function (title,index) {\n\t\t\t\t\t\tif(title === fromTitle) {\nconsole.log(\"Renaming list item '\" + list[index] + \"' to '\" + toTitle + \"' of tiddler '\" + tiddler.fields.title + \"'\");\n\t\t\t\t\t\t\tlist[index] = toTitle;\n\t\t\t\t\t\t\tisModified = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif(isModified) {\n\t\t\t\t\tvar newTiddler = new $tw.Tiddler(tiddler,{tags: tags, list: list},self.getModificationFields())\n\t\t\t\t\tnewTiddler = $tw.hooks.invokeHook(\"th-relinking-tiddler\",newTiddler,tiddler);\n\t\t\t\t\tself.addTiddler(newTiddler);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\nexports.renameTiddler = renameTiddler;\nexports.relinkTiddler = relinkTiddler;\n\n})();\n",
"type": "application/javascript",
"module-type": "wikimethod"
},
"$:/core/modules/wiki.js": {
"title": "$:/core/modules/wiki.js",
"text": "/*\\\ntitle: $:/core/modules/wiki.js\ntype: application/javascript\nmodule-type: wikimethod\n\nExtension methods for the $tw.Wiki object\n\nAdds the following properties to the wiki object:\n\n* `eventListeners` is a hashmap by type of arrays of listener functions\n* `changedTiddlers` is a hashmap describing changes to named tiddlers since wiki change events were last dispatched. Each entry is a hashmap containing two fields:\n\tmodified: true/false\n\tdeleted: true/false\n* `changeCount` is a hashmap by tiddler title containing a numerical index that starts at zero and is incremented each time a tiddler is created changed or deleted\n* `caches` is a hashmap by tiddler title containing a further hashmap of named cache objects. Caches are automatically cleared when a tiddler is modified or deleted\n* `globalCache` is a hashmap by cache name of cache objects that are cleared whenever any tiddler change occurs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar USER_NAME_TITLE = \"$:/status/UserName\",\n\tTIMESTAMP_DISABLE_TITLE = \"$:/config/TimestampDisable\";\n\n/*\nAdd available indexers to this wiki\n*/\nexports.addIndexersToWiki = function() {\n\tvar self = this;\n\t$tw.utils.each($tw.modules.applyMethods(\"indexer\"),function(Indexer,name) {\n\t\tself.addIndexer(new Indexer(self),name);\n\t});\n};\n\n/*\nGet the value of a text reference. Text references can have any of these forms:\n\t<tiddlertitle>\n\t<tiddlertitle>!!<fieldname>\n\t!!<fieldname> - specifies a field of the current tiddlers\n\t<tiddlertitle>##<index>\n*/\nexports.getTextReference = function(textRef,defaultText,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tif(tr.field) {\n\t\tvar tiddler = this.getTiddler(title);\n\t\tif(tr.field === \"title\") { // Special case so we can return the title of a non-existent tiddler\n\t\t\treturn title;\n\t\t} else if(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\treturn tiddler.getFieldString(tr.field);\n\t\t} else {\n\t\t\treturn defaultText;\n\t\t}\n\t} else if(tr.index) {\n\t\treturn this.extractTiddlerDataItem(title,tr.index,defaultText);\n\t} else {\n\t\treturn this.getTiddlerText(title,defaultText);\n\t}\n};\n\nexports.setTextReference = function(textRef,value,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tthis.setText(title,tr.field,tr.index,value);\n};\n\nexports.setText = function(title,field,index,value,options) {\n\toptions = options || {};\n\tvar creationFields = options.suppressTimestamp ? {} : this.getCreationFields(),\n\t\tmodificationFields = options.suppressTimestamp ? {} : this.getModificationFields();\n\t// Check if it is a reference to a tiddler field\n\tif(index) {\n\t\tvar data = this.getTiddlerData(title,Object.create(null));\n\t\tif(value !== undefined) {\n\t\t\tdata[index] = value;\n\t\t} else {\n\t\t\tdelete data[index];\n\t\t}\n\t\tthis.setTiddlerData(title,data,modificationFields);\n\t} else {\n\t\tvar tiddler = this.getTiddler(title),\n\t\t\tfields = {title: title};\n\t\tfields[field || \"text\"] = value;\n\t\tthis.addTiddler(new $tw.Tiddler(creationFields,tiddler,fields,modificationFields));\n\t}\n};\n\nexports.deleteTextReference = function(textRef,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle,tiddler,fields;\n\t// Check if it is a reference to a tiddler\n\tif(tr.title && !tr.field) {\n\t\tthis.deleteTiddler(tr.title);\n\t// Else check for a field reference\n\t} else if(tr.field) {\n\t\ttitle = tr.title || currTiddlerTitle;\n\t\ttiddler = this.getTiddler(title);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\tfields = Object.create(null);\n\t\t\tfields[tr.field] = undefined;\n\t\t\tthis.addTiddler(new $tw.Tiddler(tiddler,fields,this.getModificationFields()));\n\t\t}\n\t}\n};\n\nexports.addEventListener = function(type,listener) {\n\tthis.eventListeners = this.eventListeners || {};\n\tthis.eventListeners[type] = this.eventListeners[type] || [];\n\tthis.eventListeners[type].push(listener);\t\n};\n\nexports.removeEventListener = function(type,listener) {\n\tvar listeners = this.eventListeners[type];\n\tif(listeners) {\n\t\tvar p = listeners.indexOf(listener);\n\t\tif(p !== -1) {\n\t\t\tlisteners.splice(p,1);\n\t\t}\n\t}\n};\n\nexports.dispatchEvent = function(type /*, args */) {\n\tvar args = Array.prototype.slice.call(arguments,1),\n\t\tlisteners = this.eventListeners[type];\n\tif(listeners) {\n\t\tfor(var p=0; p<listeners.length; p++) {\n\t\t\tvar listener = listeners[p];\n\t\t\tlistener.apply(listener,args);\n\t\t}\n\t}\n};\n\n/*\nCauses a tiddler to be marked as changed, incrementing the change count, and triggers event handlers.\nThis method should be called after the changes it describes have been made to the wiki.tiddlers[] array.\n\ttitle: Title of tiddler\n\tisDeleted: defaults to false (meaning the tiddler has been created or modified),\n\t\ttrue if the tiddler has been deleted\n*/\nexports.enqueueTiddlerEvent = function(title,isDeleted) {\n\t// Record the touch in the list of changed tiddlers\n\tthis.changedTiddlers = this.changedTiddlers || Object.create(null);\n\tthis.changedTiddlers[title] = this.changedTiddlers[title] || Object.create(null);\n\tthis.changedTiddlers[title][isDeleted ? \"deleted\" : \"modified\"] = true;\n\t// Increment the change count\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\tthis.changeCount[title]++;\n\t} else {\n\t\tthis.changeCount[title] = 1;\n\t}\n\t// Trigger events\n\tthis.eventListeners = this.eventListeners || {};\n\tif(!this.eventsTriggered) {\n\t\tvar self = this;\n\t\t$tw.utils.nextTick(function() {\n\t\t\tvar changes = self.changedTiddlers;\n\t\t\tself.changedTiddlers = Object.create(null);\n\t\t\tself.eventsTriggered = false;\n\t\t\tif($tw.utils.count(changes) > 0) {\n\t\t\t\tself.dispatchEvent(\"change\",changes);\n\t\t\t}\n\t\t});\n\t\tthis.eventsTriggered = true;\n\t}\n};\n\nexports.getSizeOfTiddlerEventQueue = function() {\n\treturn $tw.utils.count(this.changedTiddlers);\n};\n\nexports.clearTiddlerEventQueue = function() {\n\tthis.changedTiddlers = Object.create(null);\n\tthis.changeCount = Object.create(null);\n};\n\nexports.getChangeCount = function(title) {\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\treturn this.changeCount[title];\n\t} else {\n\t\treturn 0;\n\t}\n};\n\n/*\nGenerate an unused title from the specified base\n*/\nexports.generateNewTitle = function(baseTitle,options) {\n\toptions = options || {};\n\tvar c = 0,\n\t\ttitle = baseTitle;\n\twhile(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) {\n\t\ttitle = baseTitle + \n\t\t\t(options.prefix || \" \") + \n\t\t\t(++c);\n\t}\n\treturn title;\n};\n\nexports.isSystemTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/\") === 0;\n};\n\nexports.isTemporaryTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/temp/\") === 0;\n};\n\nexports.isImageTiddler = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\t\t\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/vnd.tiddlywiki\"];\n\t\treturn !!contentTypeInfo && contentTypeInfo.flags.indexOf(\"image\") !== -1;\n\t} else {\n\t\treturn null;\n\t}\n};\n\nexports.isBinaryTiddler = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\t\t\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/vnd.tiddlywiki\"];\n\t\treturn !!contentTypeInfo && contentTypeInfo.encoding === \"base64\";\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLike addTiddler() except it will silently reject any plugin tiddlers that are older than the currently loaded version. Returns true if the tiddler was imported\n*/\nexports.importTiddler = function(tiddler) {\n\tvar existingTiddler = this.getTiddler(tiddler.fields.title);\n\t// Check if we're dealing with a plugin\n\tif(tiddler && tiddler.hasField(\"plugin-type\") && tiddler.hasField(\"version\") && existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t// Reject the incoming plugin if it is older\n\t\tif(!$tw.utils.checkVersions(tiddler.fields.version,existingTiddler.fields.version)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Fall through to adding the tiddler\n\tthis.addTiddler(tiddler);\n\treturn true;\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is created\n*/\nexports.getCreationFields = function() {\n\tif(this.getTiddlerText(TIMESTAMP_DISABLE_TITLE,\"\").toLowerCase() !== \"yes\") {\n\t\tvar fields = {\n\t\t\t\tcreated: new Date()\n\t\t\t},\n\t\t\tcreator = this.getTiddlerText(USER_NAME_TITLE);\n\t\tif(creator) {\n\t\t\tfields.creator = creator;\n\t\t}\n\t\treturn fields;\n\t} else {\n\t\treturn {};\n\t}\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is modified\n*/\nexports.getModificationFields = function() {\n\tif(this.getTiddlerText(TIMESTAMP_DISABLE_TITLE,\"\").toLowerCase() !== \"yes\") {\n\t\tvar fields = Object.create(null),\n\t\t\tmodifier = this.getTiddlerText(USER_NAME_TITLE);\n\t\tfields.modified = new Date();\n\t\tif(modifier) {\n\t\t\tfields.modifier = modifier;\n\t\t}\n\t\treturn fields;\n\t} else {\n\t\treturn {};\n\t}\n};\n\n/*\nReturn a sorted array of tiddler titles. Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.getTiddlers = function(options) {\n\toptions = options || Object.create(null);\n\tvar self = this,\n\t\tsortField = options.sortField || \"title\",\n\t\ttiddlers = [], t, titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tif(options.includeSystem || !self.isSystemTiddler(title)) {\n\t\t\tif(!options.excludeTag || !tiddler.hasTag(options.excludeTag)) {\n\t\t\t\ttiddlers.push(tiddler);\n\t\t\t}\n\t\t}\n\t});\n\ttiddlers.sort(function(a,b) {\n\t\tvar aa = a.fields[sortField].toLowerCase() || \"\",\n\t\t\tbb = b.fields[sortField].toLowerCase() || \"\";\n\t\tif(aa < bb) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(aa > bb) {\n\t\t\t\treturn 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n\tfor(t=0; t<tiddlers.length; t++) {\n\t\ttitles.push(tiddlers[t].fields.title);\n\t}\n\treturn titles;\n};\n\nexports.countTiddlers = function(excludeTag) {\n\tvar tiddlers = this.getTiddlers({excludeTag: excludeTag});\n\treturn $tw.utils.count(tiddlers);\n};\n\n/*\nReturns a function iterator(callback) that iterates through the specified titles, and invokes the callback with callback(tiddler,title)\n*/\nexports.makeTiddlerIterator = function(titles) {\n\tvar self = this;\n\tif(!$tw.utils.isArray(titles)) {\n\t\ttitles = Object.keys(titles);\n\t} else {\n\t\ttitles = titles.slice(0);\n\t}\n\treturn function(callback) {\n\t\ttitles.forEach(function(title) {\n\t\t\tcallback(self.getTiddler(title),title);\n\t\t});\n\t};\n};\n\n/*\nSort an array of tiddler titles by a specified field\n\ttitles: array of titles (sorted in place)\n\tsortField: name of field to sort by\n\tisDescending: true if the sort should be descending\n\tisCaseSensitive: true if the sort should consider upper and lower case letters to be different\n*/\nexports.sortTiddlers = function(titles,sortField,isDescending,isCaseSensitive,isNumeric,isAlphaNumeric) {\n\tvar self = this;\n\ttitles.sort(function(a,b) {\n\t\tvar x,y,\n\t\t\tcompareNumbers = function(x,y) {\n\t\t\t\tvar result = \n\t\t\t\t\tisNaN(x) && !isNaN(y) ? (isDescending ? -1 : 1) :\n\t\t\t\t\t!isNaN(x) && isNaN(y) ? (isDescending ? 1 : -1) :\n\t\t\t\t\t\t\t\t\t\t\t(isDescending ? y - x : x - y);\n\t\t\t\treturn result;\n\t\t\t};\n\t\tif(sortField !== \"title\") {\n\t\t\tvar tiddlerA = self.getTiddler(a),\n\t\t\t\ttiddlerB = self.getTiddler(b);\n\t\t\tif(tiddlerA) {\n\t\t\t\ta = tiddlerA.fields[sortField] || \"\";\n\t\t\t} else {\n\t\t\t\ta = \"\";\n\t\t\t}\n\t\t\tif(tiddlerB) {\n\t\t\t\tb = tiddlerB.fields[sortField] || \"\";\n\t\t\t} else {\n\t\t\t\tb = \"\";\n\t\t\t}\n\t\t}\n\t\tx = Number(a);\n\t\ty = Number(b);\n\t\tif(isNumeric && (!isNaN(x) || !isNaN(y))) {\n\t\t\treturn compareNumbers(x,y);\n\t\t} else if($tw.utils.isDate(a) && $tw.utils.isDate(b)) {\n\t\t\treturn isDescending ? b - a : a - b;\n\t\t} else if(isAlphaNumeric) {\n\t\t\treturn isDescending ? b.localeCompare(a,undefined,{numeric: true,sensitivity: \"base\"}) : a.localeCompare(b,undefined,{numeric: true,sensitivity: \"base\"});\n\t\t} else {\n\t\t\ta = String(a);\n\t\t\tb = String(b);\n\t\t\tif(!isCaseSensitive) {\n\t\t\t\ta = a.toLowerCase();\n\t\t\t\tb = b.toLowerCase();\n\t\t\t}\n\t\t\treturn isDescending ? b.localeCompare(a) : a.localeCompare(b);\n\t\t}\n\t});\n};\n\n/*\nFor every tiddler invoke a callback(title,tiddler) with `this` set to the wiki object. Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.forEachTiddler = function(/* [options,]callback */) {\n\tvar arg = 0,\n\t\toptions = arguments.length >= 2 ? arguments[arg++] : {},\n\t\tcallback = arguments[arg++],\n\t\ttitles = this.getTiddlers(options),\n\t\tt, tiddler;\n\tfor(t=0; t<titles.length; t++) {\n\t\ttiddler = this.getTiddler(titles[t]);\n\t\tif(tiddler) {\n\t\t\tcallback.call(this,tiddler.fields.title,tiddler);\n\t\t}\n\t}\n};\n\n/*\nReturn an array of tiddler titles that are directly linked within the given parse tree\n */\nexports.extractLinks = function(parseTreeRoot) {\n\t// Count up the links\n\tvar links = [],\n\t\tcheckParseTree = function(parseTree) {\n\t\t\tfor(var t=0; t<parseTree.length; t++) {\n\t\t\t\tvar parseTreeNode = parseTree[t];\n\t\t\t\tif(parseTreeNode.type === \"link\" && parseTreeNode.attributes.to && parseTreeNode.attributes.to.type === \"string\") {\n\t\t\t\t\tvar value = parseTreeNode.attributes.to.value;\n\t\t\t\t\tif(links.indexOf(value) === -1) {\n\t\t\t\t\t\tlinks.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(parseTreeNode.children) {\n\t\t\t\t\tcheckParseTree(parseTreeNode.children);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\tcheckParseTree(parseTreeRoot);\n\treturn links;\n};\n\n/*\nReturn an array of tiddler titles that are directly linked from the specified tiddler\n*/\nexports.getTiddlerLinks = function(title) {\n\tvar self = this;\n\t// We'll cache the links so they only get computed if the tiddler changes\n\treturn this.getCacheForTiddler(title,\"links\",function() {\n\t\t// Parse the tiddler\n\t\tvar parser = self.parseTiddler(title);\n\t\tif(parser) {\n\t\t\treturn self.extractLinks(parser.tree);\n\t\t}\n\t\treturn [];\n\t});\n};\n\n/*\nReturn an array of tiddler titles that link to the specified tiddler\n*/\nexports.getTiddlerBacklinks = function(targetTitle) {\n\tvar self = this,\n\t\tbacklinksIndexer = this.getIndexer(\"BacklinksIndexer\"),\n\t\tbacklinks = backlinksIndexer && backlinksIndexer.lookup(targetTitle);\n\n\tif(!backlinks) {\n\t\tbacklinks = [];\n\t\tthis.forEachTiddler(function(title,tiddler) {\n\t\t\tvar links = self.getTiddlerLinks(title);\n\t\t\tif(links.indexOf(targetTitle) !== -1) {\n\t\t\t\tbacklinks.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn backlinks;\n};\n\n/*\nReturn a hashmap of tiddler titles that are referenced but not defined. Each value is the number of times the missing tiddler is referenced\n*/\nexports.getMissingTitles = function() {\n\tvar self = this,\n\t\tmissing = [];\n// We should cache the missing tiddler list, even if we recreate it every time any tiddler is modified\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tif((!self.tiddlerExists(link) && !self.isShadowTiddler(link)) && missing.indexOf(link) === -1) {\n\t\t\t\tmissing.push(link);\n\t\t\t}\n\t\t});\n\t});\n\treturn missing;\n};\n\nexports.getOrphanTitles = function() {\n\tvar self = this,\n\t\torphans = this.getTiddlers();\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tvar p = orphans.indexOf(link);\n\t\t\tif(p !== -1) {\n\t\t\t\torphans.splice(p,1);\n\t\t\t}\n\t\t});\n\t});\n\treturn orphans; // Todo\n};\n\n/*\nRetrieves a list of the tiddler titles that are tagged with a given tag\n*/\nexports.getTiddlersWithTag = function(tag) {\n\t// Try to use the indexer\n\tvar self = this,\n\t\ttagIndexer = this.getIndexer(\"TagIndexer\"),\n\t\tresults = tagIndexer && tagIndexer.subIndexers[3].lookup(tag);\n\tif(!results) {\n\t\t// If not available, perform a manual scan\n\t\tresults = this.getGlobalCache(\"taglist-\" + tag,function() {\n\t\t\tvar tagmap = self.getTagMap();\n\t\t\treturn self.sortByList(tagmap[tag],tag);\n\t\t});\n\t}\n\treturn results;\n};\n\n/*\nGet a hashmap by tag of arrays of tiddler titles\n*/\nexports.getTagMap = function() {\n\tvar self = this;\n\treturn this.getGlobalCache(\"tagmap\",function() {\n\t\tvar tags = Object.create(null),\n\t\t\tstoreTags = function(tagArray,title) {\n\t\t\t\tif(tagArray) {\n\t\t\t\t\tfor(var index=0; index<tagArray.length; index++) {\n\t\t\t\t\t\tvar tag = tagArray[index];\n\t\t\t\t\t\tif($tw.utils.hop(tags,tag)) {\n\t\t\t\t\t\t\ttags[tag].push(title);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttags[tag] = [title];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\ttitle, tiddler;\n\t\t// Collect up all the tags\n\t\tself.eachShadow(function(tiddler,title) {\n\t\t\tif(!self.tiddlerExists(title)) {\n\t\t\t\ttiddler = self.getTiddler(title);\n\t\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t\t}\n\t\t});\n\t\tself.each(function(tiddler,title) {\n\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t});\n\t\treturn tags;\n\t});\n};\n\n/*\nLookup a given tiddler and return a list of all the tiddlers that include it in the specified list field\n*/\nexports.findListingsOfTiddler = function(targetTitle,fieldName) {\n\tfieldName = fieldName || \"list\";\n\tvar titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tvar list = $tw.utils.parseStringArray(tiddler.fields[fieldName]);\n\t\tif(list && list.indexOf(targetTitle) !== -1) {\n\t\t\ttitles.push(title);\n\t\t}\n\t});\n\treturn titles;\n};\n\n/*\nSorts an array of tiddler titles according to an ordered list\n*/\nexports.sortByList = function(array,listTitle) {\n\tvar self = this,\n\t\treplacedTitles = Object.create(null);\n\t// Given a title, this function will place it in the correct location\n\t// within titles.\n\tfunction moveItemInList(title) {\n\t\tif(!$tw.utils.hop(replacedTitles, title)) {\n\t\t\treplacedTitles[title] = true;\n\t\t\tvar newPos = -1,\n\t\t\t\ttiddler = self.getTiddler(title);\n\t\t\tif(tiddler) {\n\t\t\t\tvar beforeTitle = tiddler.fields[\"list-before\"],\n\t\t\t\t\tafterTitle = tiddler.fields[\"list-after\"];\n\t\t\t\tif(beforeTitle === \"\") {\n\t\t\t\t\tnewPos = 0;\n\t\t\t\t} else if(afterTitle === \"\") {\n\t\t\t\t\tnewPos = titles.length;\n\t\t\t\t} else if(beforeTitle) {\n\t\t\t\t\t// if this title is placed relative\n\t\t\t\t\t// to another title, make sure that\n\t\t\t\t\t// title is placed before we place\n\t\t\t\t\t// this one.\n\t\t\t\t\tmoveItemInList(beforeTitle);\n\t\t\t\t\tnewPos = titles.indexOf(beforeTitle);\n\t\t\t\t} else if(afterTitle) {\n\t\t\t\t\t// Same deal\n\t\t\t\t\tmoveItemInList(afterTitle);\n\t\t\t\t\tnewPos = titles.indexOf(afterTitle);\n\t\t\t\t\tif(newPos >= 0) {\n\t\t\t\t\t\t++newPos;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If a new position is specified, let's move it\n\t\t\t\tif (newPos !== -1) {\n\t\t\t\t\t// get its current Pos, and make sure\n\t\t\t\t\t// sure that it's _actually_ in the list\n\t\t\t\t\t// and that it would _actually_ move\n\t\t\t\t\t// (#4275) We don't bother calling\n\t\t\t\t\t// indexOf unless we have a new\n\t\t\t\t\t// position to work with\n\t\t\t\t\tvar currPos = titles.indexOf(title);\n\t\t\t\t\tif(currPos >= 0 && newPos !== currPos) {\n\t\t\t\t\t\t// move it!\n\t\t\t\t\t\ttitles.splice(currPos,1);\n\t\t\t\t\t\tif(newPos >= currPos) {\n\t\t\t\t\t\t\tnewPos--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttitles.splice(newPos,0,title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tvar list = this.getTiddlerList(listTitle);\n\tif(!array || array.length === 0) {\n\t\treturn [];\n\t} else {\n\t\tvar titles = [], t, title;\n\t\t// First place any entries that are present in the list\n\t\tfor(t=0; t<list.length; t++) {\n\t\t\ttitle = list[t];\n\t\t\tif(array.indexOf(title) !== -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Then place any remaining entries\n\t\tfor(t=0; t<array.length; t++) {\n\t\t\ttitle = array[t];\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Finally obey the list-before and list-after fields of each tiddler in turn\n\t\tvar sortedTitles = titles.slice(0);\n\t\tfor(t=0; t<sortedTitles.length; t++) {\n\t\t\ttitle = sortedTitles[t];\n\t\t\tmoveItemInList(title);\n\t\t}\n\t\treturn titles;\n\t}\n};\n\nexports.getSubTiddler = function(title,subTiddlerTitle) {\n\tvar bundleInfo = this.getPluginInfo(title) || this.getTiddlerDataCached(title);\n\tif(bundleInfo && bundleInfo.tiddlers) {\n\t\tvar subTiddler = bundleInfo.tiddlers[subTiddlerTitle];\n\t\tif(subTiddler) {\n\t\t\treturn new $tw.Tiddler(subTiddler);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRetrieve a tiddler as a JSON string of the fields\n*/\nexports.getTiddlerAsJson = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\tvar fields = Object.create(null);\n\t\t$tw.utils.each(tiddler.fields,function(value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\treturn JSON.stringify(fields);\n\t} else {\n\t\treturn JSON.stringify({title: title});\n\t}\n};\n\nexports.getTiddlersAsJson = function(filter,spaces) {\n\tvar tiddlers = this.filterTiddlers(filter),\n\t\tspaces = (spaces === undefined) ? $tw.config.preferences.jsonSpaces : spaces,\n\t\tdata = [];\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\tvar tiddler = this.getTiddler(tiddlers[t]);\n\t\tif(tiddler) {\n\t\t\tvar fields = new Object();\n\t\t\tfor(var field in tiddler.fields) {\n\t\t\t\tfields[field] = tiddler.getFieldString(field);\n\t\t\t}\n\t\t\tdata.push(fields);\n\t\t}\n\t}\n\treturn JSON.stringify(data,null,spaces);\n};\n\n/*\nGet the content of a tiddler as a JavaScript object. How this is done depends on the type of the tiddler:\n\napplication/json: the tiddler JSON is parsed into an object\napplication/x-tiddler-dictionary: the tiddler is parsed as sequence of name:value pairs\n\nOther types currently just return null.\n\ntitleOrTiddler: string tiddler title or a tiddler object\ndefaultData: default data to be returned if the tiddler is missing or doesn't contain data\n\nNote that the same value is returned for repeated calls for the same tiddler data. The value is frozen to prevent modification; otherwise modifications would be visible to all callers\n*/\nexports.getTiddlerDataCached = function(titleOrTiddler,defaultData) {\n\tvar self = this,\n\t\ttiddler = titleOrTiddler;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler) {\n\t\treturn this.getCacheForTiddler(tiddler.fields.title,\"data\",function() {\n\t\t\t// Return the frozen value\n\t\t\tvar value = self.getTiddlerData(tiddler.fields.title,undefined);\n\t\t\t$tw.utils.deepFreeze(value);\n\t\t\treturn value;\n\t\t}) || defaultData;\n\t} else {\n\t\treturn defaultData;\n\t}\n};\n\n/*\nAlternative, uncached version of getTiddlerDataCached(). The return value can be mutated freely and reused\n*/\nexports.getTiddlerData = function(titleOrTiddler,defaultData) {\n\tvar tiddler = titleOrTiddler,\n\t\tdata;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler && tiddler.fields.text) {\n\t\tswitch(tiddler.fields.type) {\n\t\t\tcase \"application/json\":\n\t\t\t\t// JSON tiddler\n\t\t\t\ttry {\n\t\t\t\t\tdata = JSON.parse(tiddler.fields.text);\n\t\t\t\t} catch(ex) {\n\t\t\t\t\treturn defaultData;\n\t\t\t\t}\n\t\t\t\treturn data;\n\t\t\tcase \"application/x-tiddler-dictionary\":\n\t\t\t\treturn $tw.utils.parseFields(tiddler.fields.text);\n\t\t}\n\t}\n\treturn defaultData;\n};\n\n/*\nExtract an indexed field from within a data tiddler\n*/\nexports.extractTiddlerDataItem = function(titleOrTiddler,index,defaultText) {\n\tvar data = this.getTiddlerDataCached(titleOrTiddler,Object.create(null)),\n\t\ttext;\n\tif(data && $tw.utils.hop(data,index)) {\n\t\ttext = data[index];\n\t}\n\tif(typeof text === \"string\" || typeof text === \"number\") {\n\t\treturn text.toString();\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nSet a tiddlers content to a JavaScript object. Currently this is done by setting the tiddler's type to \"application/json\" and setting the text to the JSON text of the data.\ntitle: title of tiddler\ndata: object that can be serialised to JSON\nfields: optional hashmap of additional tiddler fields to be set\n*/\nexports.setTiddlerData = function(title,data,fields) {\n\tvar existingTiddler = this.getTiddler(title),\n\t\tnewFields = {\n\t\t\ttitle: title\n\t};\n\tif(existingTiddler && existingTiddler.fields.type === \"application/x-tiddler-dictionary\") {\n\t\tnewFields.text = $tw.utils.makeTiddlerDictionary(data);\n\t} else {\n\t\tnewFields.type = \"application/json\";\n\t\tnewFields.text = JSON.stringify(data,null,$tw.config.preferences.jsonSpaces);\n\t}\n\tthis.addTiddler(new $tw.Tiddler(this.getCreationFields(),existingTiddler,fields,newFields,this.getModificationFields()));\n};\n\n/*\nReturn the content of a tiddler as an array containing each line\n*/\nexports.getTiddlerList = function(title,field,index) {\n\tif(index) {\n\t\treturn $tw.utils.parseStringArray(this.extractTiddlerDataItem(title,index,\"\"));\n\t}\n\tfield = field || \"list\";\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\treturn ($tw.utils.parseStringArray(tiddler.fields[field]) || []).slice(0);\n\t}\n\treturn [];\n};\n\n// Return a named global cache object. Global cache objects are cleared whenever a tiddler change occurs\nexports.getGlobalCache = function(cacheName,initializer) {\n\tthis.globalCache = this.globalCache || Object.create(null);\n\tif($tw.utils.hop(this.globalCache,cacheName)) {\n\t\treturn this.globalCache[cacheName];\n\t} else {\n\t\tthis.globalCache[cacheName] = initializer();\n\t\treturn this.globalCache[cacheName];\n\t}\n};\n\nexports.clearGlobalCache = function() {\n\tthis.globalCache = Object.create(null);\n};\n\n// Return the named cache object for a tiddler. If the cache doesn't exist then the initializer function is invoked to create it\nexports.getCacheForTiddler = function(title,cacheName,initializer) {\n\tthis.caches = this.caches || Object.create(null);\n\tvar caches = this.caches[title];\n\tif(caches && caches[cacheName]) {\n\t\treturn caches[cacheName];\n\t} else {\n\t\tif(!caches) {\n\t\t\tcaches = Object.create(null);\n\t\t\tthis.caches[title] = caches;\n\t\t}\n\t\tcaches[cacheName] = initializer();\n\t\treturn caches[cacheName];\n\t}\n};\n\n// Clear all caches associated with a particular tiddler, or, if the title is null, clear all the caches for all the tiddlers\nexports.clearCache = function(title) {\n\tif(title) {\n\t\tthis.caches = this.caches || Object.create(null);\n\t\tif($tw.utils.hop(this.caches,title)) {\n\t\t\tdelete this.caches[title];\n\t\t}\n\t} else {\n\t\tthis.caches = Object.create(null);\n\t}\n};\n\nexports.initParsers = function(moduleType) {\n\t// Install the parser modules\n\t$tw.Wiki.parsers = {};\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(\"parser\",function(title,module) {\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\t$tw.Wiki.parsers[f] = module[f]; // Store the parser class\n\t\t\t}\n\t\t}\n\t});\n\t// Use the generic binary parser for any binary types not registered so far\n\tif($tw.Wiki.parsers[\"application/octet-stream\"]) {\n\t\tObject.keys($tw.config.contentTypeInfo).forEach(function(type) {\n\t\t\tif(!$tw.utils.hop($tw.Wiki.parsers,type) && $tw.config.contentTypeInfo[type].encoding === \"base64\") {\n\t\t\t\t$tw.Wiki.parsers[type] = $tw.Wiki.parsers[\"application/octet-stream\"];\n\t\t\t}\n\t\t});\t\t\n\t}\n};\n\n/*\nParse a block of text of a specified MIME type\n\ttype: content type of text to be parsed\n\ttext: text\n\toptions: see below\nOptions include:\n\tparseAsInline: if true, the text of the tiddler will be parsed as an inline run\n\t_canonical_uri: optional string of the canonical URI of this content\n*/\nexports.parseText = function(type,text,options) {\n\ttext = text || \"\";\n\toptions = options || {};\n\t// Select a parser\n\tvar Parser = $tw.Wiki.parsers[type];\n\tif(!Parser && $tw.utils.getFileExtensionInfo(type)) {\n\t\tParser = $tw.Wiki.parsers[$tw.utils.getFileExtensionInfo(type).type];\n\t}\n\tif(!Parser) {\n\t\tParser = $tw.Wiki.parsers[options.defaultType || \"text/vnd.tiddlywiki\"];\n\t}\n\tif(!Parser) {\n\t\treturn null;\n\t}\n\t// Return the parser instance\n\treturn new Parser(type,text,{\n\t\tparseAsInline: options.parseAsInline,\n\t\twiki: this,\n\t\t_canonical_uri: options._canonical_uri\n\t});\n};\n\n/*\nParse a tiddler according to its MIME type\n*/\nexports.parseTiddler = function(title,options) {\n\toptions = $tw.utils.extend({},options);\n\tvar cacheType = options.parseAsInline ? \"inlineParseTree\" : \"blockParseTree\",\n\t\ttiddler = this.getTiddler(title),\n\t\tself = this;\n\treturn tiddler ? this.getCacheForTiddler(title,cacheType,function() {\n\t\t\tif(tiddler.hasField(\"_canonical_uri\")) {\n\t\t\t\toptions._canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t}\n\t\t\treturn self.parseText(tiddler.fields.type,tiddler.fields.text,options);\n\t\t}) : null;\n};\n\nexports.parseTextReference = function(title,field,index,options) {\n\tvar tiddler,text;\n\tif(options.subTiddler) {\n\t\ttiddler = this.getSubTiddler(title,options.subTiddler);\n\t} else {\n\t\ttiddler = this.getTiddler(title);\n\t\tif(field === \"text\" || (!field && !index)) {\n\t\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\t\treturn this.parseTiddler(title,options);\n\t\t}\n\t}\n\tif(field === \"text\" || (!field && !index)) {\n\t\tif(tiddler && tiddler.fields) {\n\t\t\treturn this.parseText(tiddler.fields.type,tiddler.fields.text,options);\t\t\t\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t} else if(field) {\n\t\tif(field === \"title\") {\n\t\t\ttext = title;\n\t\t} else {\n\t\t\tif(!tiddler || !tiddler.hasField(field)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\ttext = tiddler.fields[field];\n\t\t}\n\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text.toString(),options);\n\t} else if(index) {\n\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\ttext = this.extractTiddlerDataItem(tiddler,index,undefined);\n\t\tif(text === undefined) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text,options);\n\t}\n};\n\n/*\nMake a widget tree for a parse tree\nparser: parser object\noptions: see below\nOptions include:\ndocument: optional document to use\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.makeWidget = function(parser,options) {\n\toptions = options || {};\n\tvar widgetNode = {\n\t\t\ttype: \"widget\",\n\t\t\tchildren: []\n\t\t},\n\t\tcurrWidgetNode = widgetNode;\n\t// Create set variable widgets for each variable\n\t$tw.utils.each(options.variables,function(value,name) {\n\t\tvar setVariableWidget = {\n\t\t\ttype: \"set\",\n\t\t\tattributes: {\n\t\t\t\tname: {type: \"string\", value: name},\n\t\t\t\tvalue: {type: \"string\", value: value}\n\t\t\t},\n\t\t\tchildren: []\n\t\t};\n\t\tcurrWidgetNode.children = [setVariableWidget];\n\t\tcurrWidgetNode = setVariableWidget;\n\t});\n\t// Add in the supplied parse tree nodes\n\tcurrWidgetNode.children = parser ? parser.tree : [];\n\t// Create the widget\n\treturn new widget.widget(widgetNode,{\n\t\twiki: this,\n\t\tdocument: options.document || $tw.fakeDocument,\n\t\tparentWidget: options.parentWidget\n\t});\n};\n\n/*\nMake a widget tree for transclusion\ntitle: target tiddler title\noptions: as for wiki.makeWidget() plus:\noptions.field: optional field to transclude (defaults to \"text\")\noptions.mode: transclusion mode \"inline\" or \"block\"\noptions.recursionMarker : optional flag to set a recursion marker, defaults to \"yes\"\noptions.children: optional array of children for the transclude widget\noptions.importVariables: optional importvariables filter string for macros to be included\noptions.importPageMacros: optional boolean; if true, equivalent to passing \"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\" to options.importVariables\n*/\nexports.makeTranscludeWidget = function(title,options) {\n\toptions = options || {};\n\tvar parseTreeDiv = {tree: [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"div\",\n\t\t\tchildren: []}]},\n\t\tparseTreeImportVariables = {\n\t\t\ttype: \"importvariables\",\n\t\t\tattributes: {\n\t\t\t\tfilter: {\n\t\t\t\t\tname: \"filter\",\n\t\t\t\t\ttype: \"string\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tisBlock: false,\n\t\t\tchildren: []},\n\t\tparseTreeTransclude = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\trecursionMarker: {\n\t\t\t\t\tname: \"recursionMarker\",\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: options.recursionMarker || \"yes\"\n\t\t\t\t\t},\n\t\t\t\ttiddler: {\n\t\t\t\t\tname: \"tiddler\",\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: title\n\t\t\t\t}\n\t\t\t},\n\t\t\tisBlock: !options.parseAsInline};\n\tif(options.importVariables || options.importPageMacros) {\n\t\tif(options.importVariables) {\n\t\t\tparseTreeImportVariables.attributes.filter.value = options.importVariables;\n\t\t} else if(options.importPageMacros) {\n\t\t\tparseTreeImportVariables.attributes.filter.value = \"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\";\n\t\t}\n\t\tparseTreeDiv.tree[0].children.push(parseTreeImportVariables);\n\t\tparseTreeImportVariables.children.push(parseTreeTransclude);\n\t} else {\n\t\tparseTreeDiv.tree[0].children.push(parseTreeTransclude);\n\t}\n\tif(options.field) {\n\t\tparseTreeTransclude.attributes.field = {type: \"string\", value: options.field};\n\t}\n\tif(options.mode) {\n\t\tparseTreeTransclude.attributes.mode = {type: \"string\", value: options.mode};\n\t}\n\tif(options.children) {\n\t\tparseTreeTransclude.children = options.children;\n\t}\n\treturn this.makeWidget(parseTreeDiv,options);\n};\n\n/*\nParse text in a specified format and render it into another format\n\toutputType: content type for the output\n\ttextType: content type of the input text\n\ttext: input text\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderText = function(outputType,textType,text,options) {\n\toptions = options || {};\n\tvar parser = this.parseText(textType,text,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : container.textContent;\n};\n\n/*\nParse text from a tiddler and render it into another format\n\toutputType: content type for the output\n\ttitle: title of the tiddler to be rendered\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderTiddler = function(outputType,title,options) {\n\toptions = options || {};\n\tvar parser = this.parseTiddler(title,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : (outputType === \"text/plain-formatted\" ? container.formattedTextContent : container.textContent);\n};\n\n/*\nReturn an array of tiddler titles that match a search string\n\ttext: The text string to search for\n\toptions: see below\nOptions available:\n\tsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\n\texclude: An array of tiddler titles to exclude from the search\n\tinvert: If true returns tiddlers that do not contain the specified string\n\tcaseSensitive: If true forces a case sensitive search\n\tfield: If specified, restricts the search to the specified field, or an array of field names\n\tanchored: If true, forces all but regexp searches to be anchored to the start of text\n\texcludeField: If true, the field options are inverted to specify the fields that are not to be searched\n\tThe search mode is determined by the first of these boolean flags to be true\n\t\tliteral: searches for literal string\n\t\twhitespace: same as literal except runs of whitespace are treated as a single space\n\t\tregexp: treats the search term as a regular expression\n\t\twords: (default) treats search string as a list of tokens, and matches if all tokens are found, regardless of adjacency or ordering\n*/\nexports.search = function(text,options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tt,\n\t\tinvert = !!options.invert;\n\t// Convert the search string into a regexp for each term\n\tvar terms, searchTermsRegExps,\n\t\tflags = options.caseSensitive ? \"\" : \"i\",\n\t\tanchor = options.anchored ? \"^\" : \"\";\n\tif(options.literal) {\n\t\tif(text.length === 0) {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [new RegExp(\"(\" + anchor + $tw.utils.escapeRegExp(text) + \")\",flags)];\n\t\t}\n\t} else if(options.whitespace) {\n\t\tterms = [];\n\t\t$tw.utils.each(text.split(/\\s+/g),function(term) {\n\t\t\tif(term) {\n\t\t\t\tterms.push($tw.utils.escapeRegExp(term));\n\t\t\t}\n\t\t});\n\t\tsearchTermsRegExps = [new RegExp(\"(\" + anchor + terms.join(\"\\\\s+\") + \")\",flags)];\n\t} else if(options.regexp) {\n\t\ttry {\n\t\t\tsearchTermsRegExps = [new RegExp(\"(\" + text + \")\",flags)];\t\t\t\n\t\t} catch(e) {\n\t\t\tsearchTermsRegExps = null;\n\t\t\tconsole.log(\"Regexp error parsing /(\" + text + \")/\" + flags + \": \",e);\n\t\t}\n\t} else {\n\t\tterms = text.split(/ +/);\n\t\tif(terms.length === 1 && terms[0] === \"\") {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [];\n\t\t\tfor(t=0; t<terms.length; t++) {\n\t\t\t\tsearchTermsRegExps.push(new RegExp(\"(\" + anchor + $tw.utils.escapeRegExp(terms[t]) + \")\",flags));\n\t\t\t}\n\t\t}\n\t}\n\t// Accumulate the array of fields to be searched or excluded from the search\n\tvar fields = [];\n\tif(options.field) {\n\t\tif($tw.utils.isArray(options.field)) {\n\t\t\t$tw.utils.each(options.field,function(fieldName) {\n\t\t\t\tif(fieldName) {\n\t\t\t\t\tfields.push(fieldName);\t\t\t\t\t\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tfields.push(options.field);\n\t\t}\n\t}\n\t// Use default fields if none specified and we're not excluding fields (excluding fields with an empty field array is the same as searching all fields)\n\tif(fields.length === 0 && !options.excludeField) {\n\t\tfields.push(\"title\");\n\t\tfields.push(\"tags\");\n\t\tfields.push(\"text\");\n\t}\n\t// Function to check a given tiddler for the search term\n\tvar searchTiddler = function(title) {\n\t\tif(!searchTermsRegExps) {\n\t\t\treturn true;\n\t\t}\n\t\tvar notYetFound = searchTermsRegExps.slice();\n\n\t\tvar tiddler = self.getTiddler(title);\n\t\tif(!tiddler) {\n\t\t\ttiddler = new $tw.Tiddler({title: title, text: \"\", type: \"text/vnd.tiddlywiki\"});\n\t\t}\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type] || $tw.config.contentTypeInfo[\"text/vnd.tiddlywiki\"],\n\t\t\tsearchFields;\n\t\t// Get the list of fields we're searching\n\t\tif(options.excludeField) {\n\t\t\tsearchFields = Object.keys(tiddler.fields);\n\t\t\t$tw.utils.each(fields,function(fieldName) {\n\t\t\t\tvar p = searchFields.indexOf(fieldName);\n\t\t\t\tif(p !== -1) {\n\t\t\t\t\tsearchFields.splice(p,1);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsearchFields = fields;\n\t\t}\n\t\tfor(var fieldIndex=0; notYetFound.length>0 && fieldIndex<searchFields.length; fieldIndex++) {\n\t\t\t// Don't search the text field if the content type is binary\n\t\t\tvar fieldName = searchFields[fieldIndex];\n\t\t\tif(fieldName === \"text\" && contentTypeInfo.encoding !== \"utf8\") {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tvar str = tiddler.fields[fieldName],\n\t\t\t\tt;\n\t\t\tif(str) {\n\t\t\t\tif($tw.utils.isArray(str)) {\n\t\t\t\t\t// If the field value is an array, test each regexp against each field array entry and fail if each regexp doesn't match at least one field array entry\n\t\t\t\t\tfor(var s=0; s<str.length; s++) {\n\t\t\t\t\t\tfor(t=0; t<notYetFound.length;) {\n\t\t\t\t\t\t\tif(notYetFound[t].test(str[s])) {\n\t\t\t\t\t\t\t\tnotYetFound.splice(t, 1);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tt++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// If the field isn't an array, force it to a string and test each regexp against it and fail if any do not match\n\t\t\t\t\tstr = tiddler.getFieldString(fieldName);\n\t\t\t\t\tfor(t=0; t<notYetFound.length;) {\n\t\t\t\t\t\tif(notYetFound[t].test(str)) {\n\t\t\t\t\t\t\tnotYetFound.splice(t, 1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tt++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn notYetFound.length == 0;\n\t};\n\t// Loop through all the tiddlers doing the search\n\tvar results = [],\n\t\tsource = options.source || this.each;\n\tsource(function(tiddler,title) {\n\t\tif(searchTiddler(title) !== options.invert) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\t// Remove any of the results we have to exclude\n\tif(options.exclude) {\n\t\tfor(t=0; t<options.exclude.length; t++) {\n\t\t\tvar p = results.indexOf(options.exclude[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tresults.splice(p,1);\n\t\t\t}\n\t\t}\n\t}\n\treturn results;\n};\n\n/*\nTrigger a load for a tiddler if it is skinny. Returns the text, or undefined if the tiddler is missing, null if the tiddler is being lazily loaded.\n*/\nexports.getTiddlerText = function(title,defaultText) {\n\tvar tiddler = this.getTiddler(title);\n\t// Return undefined if the tiddler isn't found\n\tif(!tiddler) {\n\t\treturn defaultText;\n\t}\n\tif(!tiddler.hasField(\"_is_skinny\")) {\n\t\t// Just return the text if we've got it\n\t\treturn tiddler.fields.text || \"\";\n\t} else {\n\t\t// Tell any listeners about the need to lazily load this tiddler\n\t\tthis.dispatchEvent(\"lazyLoad\",title);\n\t\t// Indicate that the text is being loaded\n\t\treturn null;\n\t}\n};\n\n/*\nCheck whether the text of a tiddler matches a given value. By default, the comparison is case insensitive, and any spaces at either end of the tiddler text is trimmed\n*/\nexports.checkTiddlerText = function(title,targetText,options) {\n\toptions = options || {};\n\tvar text = this.getTiddlerText(title,\"\");\n\tif(!options.noTrim) {\n\t\ttext = text.trim();\n\t}\n\tif(!options.caseSensitive) {\n\t\ttext = text.toLowerCase();\n\t\ttargetText = targetText.toLowerCase();\n\t}\n\treturn text === targetText;\n}\n\n/*\nRead an array of browser File objects, invoking callback(tiddlerFieldsArray) once they're all read\n*/\nexports.readFiles = function(files,options) {\n\tvar callback;\n\tif(typeof options === \"function\") {\n\t\tcallback = options;\n\t\toptions = {};\n\t} else {\n\t\tcallback = options.callback;\n\t}\n\tvar result = [],\n\t\toutstanding = files.length,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tresult.push.apply(result,tiddlerFieldsArray);\n\t\t\tif(--outstanding === 0) {\n\t\t\t\tcallback(result);\n\t\t\t}\n\t\t};\n\tfor(var f=0; f<files.length; f++) {\n\t\tthis.readFile(files[f],$tw.utils.extend({},options,{callback: readFileCallback}));\n\t}\n\treturn files.length;\n};\n\n/*\nRead a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\n*/\nexports.readFile = function(file,options) {\n\tvar callback;\n\tif(typeof options === \"function\") {\n\t\tcallback = options;\n\t\toptions = {};\n\t} else {\n\t\tcallback = options.callback;\n\t}\n\t// Get the type, falling back to the filename extension\n\tvar self = this,\n\t\ttype = file.type;\n\tif(type === \"\" || !type) {\n\t\tvar dotPos = file.name.lastIndexOf(\".\");\n\t\tif(dotPos !== -1) {\n\t\t\tvar fileExtensionInfo = $tw.utils.getFileExtensionInfo(file.name.substr(dotPos));\n\t\t\tif(fileExtensionInfo) {\n\t\t\t\ttype = fileExtensionInfo.type;\n\t\t\t}\n\t\t}\n\t}\n\t// Figure out if we're reading a binary file\n\tvar contentTypeInfo = $tw.config.contentTypeInfo[type],\n\t\tisBinary = contentTypeInfo ? contentTypeInfo.encoding === \"base64\" : false;\n\t// Log some debugging information\n\tif($tw.log.IMPORT) {\n\t\tconsole.log(\"Importing file '\" + file.name + \"', type: '\" + type + \"', isBinary: \" + isBinary);\n\t}\n\t// Give the hook a chance to process the drag\n\tif($tw.hooks.invokeHook(\"th-importing-file\",{\n\t\tfile: file,\n\t\ttype: type,\n\t\tisBinary: isBinary,\n\t\tcallback: callback\n\t}) !== true) {\n\t\tthis.readFileContent(file,type,isBinary,options.deserializer,callback);\n\t}\n};\n\n/*\nLower level utility to read the content of a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\n*/\nexports.readFileContent = function(file,type,isBinary,deserializer,callback) {\n\tvar self = this;\n\t// Create the FileReader\n\tvar reader = new FileReader();\n\t// Onload\n\treader.onload = function(event) {\n\t\tvar text = event.target.result,\n\t\t\ttiddlerFields = {title: file.name || \"Untitled\"};\n\t\tif(isBinary) {\n\t\t\tvar commaPos = text.indexOf(\",\");\n\t\t\tif(commaPos !== -1) {\n\t\t\t\ttext = text.substr(commaPos + 1);\n\t\t\t}\n\t\t}\n\t\t// Check whether this is an encrypted TiddlyWiki file\n\t\tvar encryptedJson = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedJson) {\n\t\t\t// If so, attempt to decrypt it with the current password\n\t\t\t$tw.utils.decryptStoreAreaInteractive(encryptedJson,function(tiddlers) {\n\t\t\t\tcallback(tiddlers);\n\t\t\t});\n\t\t} else {\n\t\t\t// Otherwise, just try to deserialise any tiddlers in the file\n\t\t\tcallback(self.deserializeTiddlers(type,text,tiddlerFields,{deserializer: deserializer}));\n\t\t}\n\t};\n\t// Kick off the read\n\tif(isBinary) {\n\t\treader.readAsDataURL(file);\n\t} else {\n\t\treader.readAsText(file);\n\t}\n};\n\n/*\nFind any existing draft of a specified tiddler\n*/\nexports.findDraft = function(targetTitle) {\n\tvar draftTitle = undefined;\n\tthis.forEachTiddler({includeSystem: true},function(title,tiddler) {\n\t\tif(tiddler.fields[\"draft.title\"] && tiddler.fields[\"draft.of\"] === targetTitle) {\n\t\t\tdraftTitle = title;\n\t\t}\n\t});\n\treturn draftTitle;\n}\n\n/*\nCheck whether the specified draft tiddler has been modified.\nIf the original tiddler doesn't exist, create a vanilla tiddler variable,\nto check if additional fields have been added.\n*/\nexports.isDraftModified = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(!tiddler.isDraft()) {\n\t\treturn false;\n\t}\n\tvar ignoredFields = [\"created\", \"modified\", \"title\", \"draft.title\", \"draft.of\"],\n\t\torigTiddler = this.getTiddler(tiddler.fields[\"draft.of\"]) || new $tw.Tiddler({text:\"\", tags:[]}),\n\t\ttitleModified = tiddler.fields[\"draft.title\"] !== tiddler.fields[\"draft.of\"];\n\treturn titleModified || !tiddler.isEqual(origTiddler,ignoredFields);\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\nhistoryTitle: title of history tiddler (defaults to $:/HistoryList)\n*/\nexports.addToHistory = function(title,fromPageRect,historyTitle) {\n\tvar story = new $tw.Story({wiki: this, historyTitle: historyTitle});\n\tstory.addToHistory(title,fromPageRect);\t\n\tconsole.log(\"$tw.wiki.addToHistory() is deprecated since V5.1.23! Use the this.story.addToHistory() from the story-object!\")\n};\n\n/*\nAdd a new tiddler to the story river\ntitle: a title string or an array of title strings\nfromTitle: the title of the tiddler from which the navigation originated\nstoryTitle: title of story tiddler (defaults to $:/StoryList)\noptions: see story.js\n*/\nexports.addToStory = function(title,fromTitle,storyTitle,options) {\n\tvar story = new $tw.Story({wiki: this, storyTitle: storyTitle});\n\tstory.addToStory(title,fromTitle,options);\n\tconsole.log(\"$tw.wiki.addToStory() is deprecated since V5.1.23! Use the this.story.addToStory() from the story-object!\")\n};\n\n/*\nGenerate a title for the draft of a given tiddler\n*/\nexports.generateDraftTitle = function(title) {\n\tvar c = 0,\n\t\tdraftTitle,\n\t\tusername = this.getTiddlerText(\"$:/status/UserName\"),\n\t\tattribution = username ? \" by \" + username : \"\";\n\tdo {\n\t\tdraftTitle = \"Draft \" + (c ? (c + 1) + \" \" : \"\") + \"of '\" + title + \"'\" + attribution;\n\t\tc++;\n\t} while(this.tiddlerExists(draftTitle));\n\treturn draftTitle;\n};\n\n/*\nInvoke the available upgrader modules\ntitles: array of tiddler titles to be processed\ntiddlers: hashmap by title of tiddler fields of pending import tiddlers. These can be modified by the upgraders. An entry with no fields indicates a tiddler that was pending import has been suppressed. When entries are added to the pending import the tiddlers hashmap may have entries that are not present in the titles array\nReturns a hashmap of messages keyed by tiddler title.\n*/\nexports.invokeUpgraders = function(titles,tiddlers) {\n\t// Collect up the available upgrader modules\n\tvar self = this;\n\tif(!this.upgraderModules) {\n\t\tthis.upgraderModules = [];\n\t\t$tw.modules.forEachModuleOfType(\"upgrader\",function(title,module) {\n\t\t\tif(module.upgrade) {\n\t\t\t\tself.upgraderModules.push(module);\n\t\t\t}\n\t\t});\n\t}\n\t// Invoke each upgrader in turn\n\tvar messages = {};\n\tfor(var t=0; t<this.upgraderModules.length; t++) {\n\t\tvar upgrader = this.upgraderModules[t],\n\t\t\tupgraderMessages = upgrader.upgrade(this,titles,tiddlers);\n\t\t$tw.utils.extend(messages,upgraderMessages);\n\t}\n\treturn messages;\n};\n\n// Determine whether a plugin by title is dynamically loadable\nexports.doesPluginRequireReload = function(title) {\n\treturn this.doesPluginInfoRequireReload(this.getPluginInfo(title) || this.getTiddlerDataCached(title));\n};\n\n// Determine whether a plugin info structure is dynamically loadable\nexports.doesPluginInfoRequireReload = function(pluginInfo) {\n\tif(pluginInfo) {\n\t\tvar foundModule = false;\n\t\t$tw.utils.each(pluginInfo.tiddlers,function(tiddler) {\n\t\t\tif(tiddler.type === \"application/javascript\" && $tw.utils.hop(tiddler,\"module-type\")) {\n\t\t\t\tfoundModule = true;\n\t\t\t}\n\t\t});\n\t\treturn foundModule;\n\t} else {\n\t\treturn null;\n\t}\n};\n\nexports.slugify = function(title,options) {\n\tvar tiddler = this.getTiddler(title),\n\t\tslug;\n\tif(tiddler && tiddler.fields.slug) {\n\t\tslug = tiddler.fields.slug;\n\t} else {\n\t\tslug = $tw.utils.transliterate(title.toString().toLowerCase()) // Replace diacritics with basic lowercase ASCII\n\t\t\t.replace(/\\s+/g,\"-\") // Replace spaces with -\n\t\t\t.replace(/[^\\w\\-\\.]+/g,\"\") // Remove all non-word chars except dash and dot\n\t\t\t.replace(/\\-\\-+/g,\"-\") // Replace multiple - with single -\n\t\t\t.replace(/^-+/,\"\") // Trim - from start of text\n\t\t\t.replace(/-+$/,\"\"); // Trim - from end of text\n\t}\n\t// If the resulting slug is blank (eg because the title is just punctuation characters)\n\tif(!slug) {\n\t\t// ...then just use the character codes of the title\n\t\tvar result = [];\n\t\t$tw.utils.each(title.split(\"\"),function(char) {\n\t\t\tresult.push(char.charCodeAt(0).toString());\n\t\t});\n\t\tslug = result.join(\"-\");\n\t}\n\treturn slug;\n};\n\n})();\n\n",
"type": "application/javascript",
"module-type": "wikimethod"
},
"$:/palettes/Blanca": {
"title": "$:/palettes/Blanca",
"name": "Blanca",
"description": "A clean white palette to let you focus",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #66cccc\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ffffff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #7897f3\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ccc\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #ffffff\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #7897f3\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #eeeeee\ntab-border-selected: #cccccc\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffeedd\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: #eee\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #ff9900\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/Blue": {
"title": "$:/palettes/Blue",
"name": "Blue",
"description": "A blue theme",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333353\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ddddff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #5959c0\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: #ccccdd\ntab-border-selected: #ccccdd\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #eeeeff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #666666\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #ffffff\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #ffffff\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #5959c0\ntoolbar-new-button: #5eb95e\ntoolbar-options-button: rgb(128, 88, 165)\ntoolbar-save-button: #0e90d2\ntoolbar-info-button: #0e90d2\ntoolbar-edit-button: rgb(243, 123, 29)\ntoolbar-close-button: #dd514c\ntoolbar-delete-button: #dd514c\ntoolbar-cancel-button: rgb(243, 123, 29)\ntoolbar-done-button: #5eb95e\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/Muted": {
"title": "$:/palettes/Muted",
"name": "Muted",
"description": "Bright tiddlers on a muted background",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #6f6f70\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #29a6ee\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #c2c1c2\nsidebar-foreground-shadow: rgba(255,255,255,0)\nsidebar-foreground: #d3d2d4\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #6f6f70\nsidebar-tab-background: #666667\nsidebar-tab-border-selected: #999\nsidebar-tab-border: #515151\nsidebar-tab-divider: #999\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: #999\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #d1d0d2\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #d5ad34\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/ContrastLight": {
"title": "$:/palettes/ContrastLight",
"name": "Contrast (Light)",
"description": "High contrast and unambiguous (light version)",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #f00\nalert-border: <<colour background>>\nalert-highlight: <<colour foreground>>\nalert-muted-foreground: #800\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: <<colour background>>\nbutton-foreground: <<colour foreground>>\nbutton-border: <<colour foreground>>\ncode-background: <<colour background>>\ncode-border: <<colour foreground>>\ncode-foreground: <<colour foreground>>\ndirty-indicator: #f00\ndownload-background: #080\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: <<colour foreground>>\ndropdown-tab-background: <<colour foreground>>\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00a\nexternal-link-foreground: #00e\nforeground: #000\nmessage-background: <<colour foreground>>\nmessage-border: <<colour background>>\nmessage-foreground: <<colour background>>\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour foreground>>\nmodal-header-border: <<colour foreground>>\nmuted-foreground: <<colour foreground>>\nnotification-background: <<colour background>>\nnotification-border: <<colour foreground>>\npage-background: <<colour background>>\npre-background: <<colour background>>\npre-border: <<colour foreground>>\nprimary: #00f\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: <<colour background>>\nsidebar-controls-foreground: <<colour foreground>>\nsidebar-foreground-shadow: rgba(0,0,0, 0)\nsidebar-foreground: <<colour foreground>>\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: <<colour foreground>>\nsidebar-tab-background-selected: <<colour background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: <<colour foreground>>\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: <<colour foreground>>\nsidebar-tiddler-link-foreground: <<colour primary>>\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: <<colour foreground>>\ntab-border-selected: <<colour foreground>>\ntab-border: <<colour foreground>>\ntab-divider: <<colour foreground>>\ntab-foreground-selected: <<colour foreground>>\ntab-foreground: <<colour background>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #000\ntag-foreground: #fff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour foreground>>\ntiddler-controls-foreground-hover: #ddd\ntiddler-controls-foreground-selected: #fdd\ntiddler-controls-foreground: <<colour foreground>>\ntiddler-editor-background: <<colour background>>\ntiddler-editor-border-image: <<colour foreground>>\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: <<colour background>>\ntiddler-editor-fields-odd: <<colour background>>\ntiddler-info-background: <<colour background>>\ntiddler-info-border: <<colour foreground>>\ntiddler-info-tab-background: <<colour background>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour foreground>>\ntiddler-title-foreground: <<colour foreground>>\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour foreground>>\nvery-muted-foreground: #888888\n"
},
"$:/palettes/ContrastDark": {
"title": "$:/palettes/ContrastDark",
"name": "Contrast (Dark)",
"description": "High contrast and unambiguous (dark version)",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #f00\nalert-border: <<colour background>>\nalert-highlight: <<colour foreground>>\nalert-muted-foreground: #800\nbackground: #000\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: <<colour background>>\nbutton-foreground: <<colour foreground>>\nbutton-border: <<colour foreground>>\ncode-background: <<colour background>>\ncode-border: <<colour foreground>>\ncode-foreground: <<colour foreground>>\ndirty-indicator: #f00\ndownload-background: #080\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: <<colour foreground>>\ndropdown-tab-background: <<colour foreground>>\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00a\nexternal-link-foreground: #00e\nforeground: #fff\nmessage-background: <<colour foreground>>\nmessage-border: <<colour background>>\nmessage-foreground: <<colour background>>\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour foreground>>\nmodal-header-border: <<colour foreground>>\nmuted-foreground: <<colour foreground>>\nnotification-background: <<colour background>>\nnotification-border: <<colour foreground>>\npage-background: <<colour background>>\npre-background: <<colour background>>\npre-border: <<colour foreground>>\nprimary: #00f\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: <<colour background>>\nsidebar-controls-foreground: <<colour foreground>>\nsidebar-foreground-shadow: rgba(0,0,0, 0)\nsidebar-foreground: <<colour foreground>>\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: <<colour foreground>>\nsidebar-tab-background-selected: <<colour background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: <<colour foreground>>\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: <<colour foreground>>\nsidebar-tiddler-link-foreground: <<colour primary>>\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: <<colour foreground>>\ntab-border-selected: <<colour foreground>>\ntab-border: <<colour foreground>>\ntab-divider: <<colour foreground>>\ntab-foreground-selected: <<colour foreground>>\ntab-foreground: <<colour background>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #fff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour foreground>>\ntiddler-controls-foreground-hover: #ddd\ntiddler-controls-foreground-selected: #fdd\ntiddler-controls-foreground: <<colour foreground>>\ntiddler-editor-background: <<colour background>>\ntiddler-editor-border-image: <<colour foreground>>\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: <<colour background>>\ntiddler-editor-fields-odd: <<colour background>>\ntiddler-info-background: <<colour background>>\ntiddler-info-border: <<colour foreground>>\ntiddler-info-tab-background: <<colour background>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour foreground>>\ntiddler-title-foreground: <<colour foreground>>\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour foreground>>\nvery-muted-foreground: #888888\n"
},
"$:/palettes/CupertinoDark": {
"title": "$:/palettes/CupertinoDark",
"tags": "$:/tags/Palette",
"name": "Cupertino Dark",
"description": "A macOS inspired dark palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #FF453A\nalert-border: #FF453A\nalert-highlight: #FFD60A\nalert-muted-foreground: <<colour muted-foreground>>\nbackground: #282828\nblockquote-bar: <<colour page-background>>\nbutton-foreground: <<colour background>>\ncode-background: <<colour pre-background>>\ncode-border: <<colour pre-border>>\ncode-foreground: rgba(255, 255, 255, 0.54)\ndirty-indicator: #FF453A\ndownload-background: <<colour primary>>\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour tiddler-info-background>>\ndropdown-border: <<colour dropdown-background>>\ndropdown-tab-background-selected: #3F638B\ndropdown-tab-background: #323232\ndropzone-background: #30D158\nexternal-link-background-hover: transparent\nexternal-link-background-visited: transparent\nexternal-link-background: transparent\nexternal-link-foreground-hover: \nexternal-link-foreground-visited: #BF5AF2\nexternal-link-foreground: #32D74B\nforeground: #FFFFFF\nmenubar-background: #464646\nmenubar-foreground: #ffffff\nmessage-background: <<colour background>>\nmessage-border: <<colour very-muted-foreground>>\nmessage-foreground: rgba(255, 255, 255, 0.54)\nmodal-backdrop: <<colour page-background>>\nmodal-background: <<colour background>>\nmodal-border: <<colour very-muted-foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour background>>\nmodal-header-border: <<colour very-muted-foreground>>\nmuted-foreground: #98989D\nnotification-background: <<colour dropdown-background>>\nnotification-border: <<colour dropdown-background>>\npage-background: #323232\npre-background: #464646\npre-border: transparent\nprimary: #0A84FF\nselect-tag-background: <<colour background>>\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour background>>\nsidebar-controls-foreground-hover: #FF9F0A\nsidebar-controls-foreground: #8E8E93\nsidebar-foreground-shadow: transparent\nsidebar-foreground: rgba(255, 255, 255, 0.54)\nsidebar-muted-foreground-hover: rgba(255, 255, 255, 0.54)\nsidebar-muted-foreground: rgba(255, 255, 255, 0.38)\nsidebar-tab-background-selected: #3F638B\nsidebar-tab-background: <<colour background>>\nsidebar-tab-border-selected: <<colour background>>\nsidebar-tab-border: <<colour background>>\nsidebar-tab-divider: <<colour background>>\nsidebar-tab-foreground-selected: rgba(255, 255, 255, 0.87)\nsidebar-tab-foreground: rgba(255, 255, 255, 0.54)\nsidebar-tiddler-link-foreground-hover: rgba(255, 255, 255, 0.7)\nsidebar-tiddler-link-foreground: rgba(255, 255, 255, 0.54)\nsite-title-foreground: #ffffff\nstatic-alert-foreground: #B4B4B4\ntab-background-selected: #3F638B\ntab-background: <<colour page-background>>\ntab-border-selected: <<colour page-background>>\ntab-border: <<colour page-background>>\ntab-divider: <<colour page-background>>\ntab-foreground-selected: rgba(255, 255, 255, 0.87)\ntab-foreground: rgba(255, 255, 255, 0.54)\ntable-border: #464646\ntable-footer-background: <<colour tiddler-editor-fields-odd>>\ntable-header-background: <<colour tiddler-editor-fields-even>>\ntag-background: #48484A\ntag-foreground: #323232\ntiddler-background: <<colour background>>\ntiddler-border: transparent\ntiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground-selected: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground: #48484A\ntiddler-editor-background: transparent\ntiddler-editor-border-image: \ntiddler-editor-border: rgba(255, 255, 255, 0.08)\ntiddler-editor-fields-even: rgba(255, 255, 255, 0.1)\ntiddler-editor-fields-odd: rgba(255, 255, 255, 0.04)\ntiddler-info-background: #1E1E1E\ntiddler-info-border: #1E1E1E\ntiddler-info-tab-background: #3F638B\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour muted-foreground>>\ntiddler-title-foreground: #FFFFFF\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour very-muted-foreground>>\nvery-muted-foreground: #464646\nselection-background: #3F638B\nselection-foreground: #ffffff\nwikilist-background: <<colour page-background>>\nwikilist-button-background: #3F638B\nwikilist-button-foreground: <<colour foreground>>\nwikilist-button-open: #32D74B\nwikilist-button-open-hover: #32D74B\nwikilist-button-reveal: #0A84FF\nwikilist-button-reveal-hover: #0A84FF\nwikilist-button-remove: #FF453A\nwikilist-button-remove-hover: #FF453A\nwikilist-droplink-dragover: #32D74B\nwikilist-item: <<colour background>>\nwikilist-toolbar-background: <<colour background>>\nwikilist-title: <<colour foreground>>\nwikilist-title-svg: <<colour foreground>>\nwikilist-toolbar-foreground: <<colour foreground>>\nwikilist-url: <<colour muted-foreground>>\n"
},
"$:/palettes/DarkPhotos": {
"title": "$:/palettes/DarkPhotos",
"created": "20150402111612188",
"description": "Good with dark photo backgrounds",
"modified": "20150402112344080",
"name": "DarkPhotos",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: \nbutton-foreground: \nbutton-border: \ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #ddd\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #336438\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #ccf\nsidebar-controls-foreground: #fff\nsidebar-foreground-shadow: rgba(0,0,0, 0.5)\nsidebar-foreground: #fff\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #eee\nsidebar-tab-background-selected: rgba(255,255,255, 0.8)\nsidebar-tab-background: rgba(255,255,255, 0.4)\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: rgba(255,255,255, 0.2)\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #aaf\nsidebar-tiddler-link-foreground: #ddf\nsite-title-foreground: #fff\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/DesertSand": {
"title": "$:/palettes/DesertSand",
"tags": "$:/tags/Palette",
"name": "Desert Sand",
"description": "A desert sand palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #E9E0C7\nblockquote-bar: <<colour muted-foreground>>\nbutton-foreground: <<colour foreground>>\ncode-background: #F3EDDF\ncode-border: #C3BAA1\ncode-foreground: #ab3250\ndiff-delete-background: #bd8b8b\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #91c093\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #ad3434\ndownload-background: #6ca16c\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #E9E0C7\ndropdown-tab-background: #BAB29C\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #313163\nexternal-link-foreground: #555592\nforeground: #2D2A23\nmenubar-background: #CDC2A6\nmenubar-foreground: #5A5446\nmessage-background: #ECE5CF\nmessage-border: #D6CBAA\nmessage-foreground: #5f6e7d\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #8A8885\nmodal-footer-background: #CDC2A6\nmodal-footer-border: #9D998E\nmodal-header-border: #9D998E\nmuted-foreground: #9D998E\nnotification-background: #F0E9D7\nnotification-border: #939189\npage-background: #e0d3af\npre-background: #D6CBAA\npre-border: #CDC2A6\nprimary: #5B6F55\nselection-background: #9D947B\nselection-foreground: <<colour foreground>>\nselect-tag-background: #F0E9D7\nselect-tag-foreground: #2D2A23\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #2D2A23\nsidebar-controls-foreground: #867F69\nsidebar-foreground-shadow: transparent\nsidebar-foreground: #867F69\nsidebar-muted-foreground-hover: #706A58\nsidebar-muted-foreground: #B3A98C\nsidebar-tab-background-selected: #e0d3af\nsidebar-tab-background: #A6A193\nsidebar-tab-border-selected: #C3BAA1\nsidebar-tab-border: #C3BAA1\nsidebar-tab-divider: #CDC2A6\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: #2D2A23\nsidebar-tiddler-link-foreground-hover: #433F35\nsidebar-tiddler-link-foreground: #706A58\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #A6A193\ntab-background-selected: #E9E0C7\ntab-background: #A6A193\ntab-border-selected: #C3BAA1\ntab-border: #C3BAA1\ntab-divider: #CDC2A6\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #2D2A23\ntable-border: #9D998E\ntable-footer-background: #8A8885\ntable-header-background: #B0AA98\ntag-background: #706A58\ntag-foreground: #E3D7B7\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #9D947B\ntiddler-controls-foreground-selected: #706A58\ntiddler-controls-foreground: #C3BAA1\ntiddler-editor-background: #E9E0C7\ntiddler-editor-border-image: #A6A193\ntiddler-editor-border: #A6A193\ntiddler-editor-fields-even: #D6CBAA\ntiddler-editor-fields-odd: #C3BAA1\ntiddler-info-background: #E3D7B7\ntiddler-info-border: #BAB29C\ntiddler-info-tab-background: #E9E0C7\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #867F69\ntiddler-title-foreground: #374464\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #8A8885\nvery-muted-foreground: #CDC2A6\nwikilist-background: <<colour page-background>>\nwikilist-item: #CDC2A6\nwikilist-info: #161512\nwikilist-title: #433F35\nwikilist-title-svg: <<colour wikilist-title>>\nwikilist-url: #706A58\nwikilist-button-open: #7db66a\nwikilist-button-open-hover: #56a556\nwikilist-button-reveal: #5a6c9e\nwikilist-button-reveal-hover: #454591\nwikilist-button-remove: #bc5972\nwikilist-button-remove-hover: #814040\nwikilist-toolbar-background: #CDC2A6\nwikilist-toolbar-foreground: #2D2A23\nwikilist-droplink-dragover: rgba(255,192,192,0.5)\nwikilist-button-background: #A6A193\nwikilist-button-foreground: #161512\n"
},
"$:/palettes/GruvboxDark": {
"title": "$:/palettes/GruvboxDark",
"name": "Gruvbox Dark",
"description": "Retro groove color scheme",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"license": "https://github.com/morhetz/gruvbox",
"text": "alert-background: #cc241d\nalert-border: #cc241d\nalert-highlight: #d79921\nalert-muted-foreground: #504945\nbackground: #3c3836\nblockquote-bar: <<colour muted-foreground>>\nbutton-foreground: <<colour page-background>>\ncode-background: #504945\ncode-border: #504945\ncode-foreground: #fb4934\ndiff-delete-background: #fb4934\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #b8bb26\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #fb4934\ndownload-background: #b8bb26\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: #665c54\ndropdown-border: <<colour background>>\ndropdown-tab-background-selected: #ebdbb2\ndropdown-tab-background: #665c54\ndropzone-background: #98971a\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #d3869b\nexternal-link-foreground: #8ec07c\nforeground: #fbf1c7\nmenubar-background: #504945\nmenubar-foreground: <<colour foreground>>\nmessage-background: #83a598\nmessage-border: #83a598\nmessage-foreground: #3c3836\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #504945\nmodal-footer-background: #3c3836\nmodal-footer-border: #3c3836\nmodal-header-border: #3c3836\nmuted-foreground: #d5c4a1\nnotification-background: <<colour primary>>\nnotification-border: <<colour primary>>\npage-background: #282828\npre-background: #504945\npre-border: #504945\nprimary: #d79921\nselect-tag-background: #665c54\nselect-tag-foreground: <<colour foreground>>\nselection-background: #458588\nselection-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour page-background>>\nsidebar-controls-foreground-hover: #7c6f64\nsidebar-controls-foreground: #504945\nsidebar-foreground-shadow: transparent\nsidebar-foreground: #fbf1c7\nsidebar-muted-foreground-hover: #7c6f64\nsidebar-muted-foreground: #504945\nsidebar-tab-background-selected: #bdae93\nsidebar-tab-background: #3c3836\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: #bdae93\nsidebar-tab-divider: <<colour page-background>>\nsidebar-tab-foreground-selected: #282828\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #458588\nsidebar-tiddler-link-foreground: #98971a\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #B48EAD\ntab-background-selected: #ebdbb2\ntab-background: #665c54\ntab-border-selected: #665c54\ntab-border: #665c54\ntab-divider: #bdae93\ntab-foreground-selected: #282828\ntab-foreground: #ebdbb2\ntable-border: #7c6f64\ntable-footer-background: #665c54\ntable-header-background: #504945\ntag-background: #d3869b\ntag-foreground: #282828\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #7c6f64\ntiddler-controls-foreground-selected: <<colour primary>>\ntiddler-controls-foreground: #665c54\ntiddler-editor-background: #32302f\ntiddler-editor-border-image: #282828\ntiddler-editor-border: #282828\ntiddler-editor-fields-even: #504945\ntiddler-editor-fields-odd: #7c6f64\ntiddler-info-background: #32302f\ntiddler-info-border: #ebdbb2\ntiddler-info-tab-background: #ebdbb2\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #7c6f64\ntiddler-title-foreground: #a89984\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #504945\nvery-muted-foreground: #bdae93\nwikilist-background: <<colour page-background>>\nwikilist-button-background: #acacac\nwikilist-button-foreground: <<colour button-foreground>>\nwikilist-item: <<colour background>>\nwikilist-toolbar-background: <<colour background>>\nwikilist-toolbar-foreground: <<colour foreground>>\nwikilist-title: <<colour foreground>>\nwikilist-title-svg: <<colour wikilist-title>>\nwikilist-url: <<colour muted-foreground>>\nwikilist-button-open-hover: <<colour primary>>\nwikilist-button-open: <<colour dropzone-background>>\nwikilist-button-remove: <<colour dirty-indicator>>\nwikilist-button-remove-hover: <<colour alert-background>>\nwikilist-droplink-dragover: <<colour dropzone-background>>\nwikilist-button-reveal: <<colour sidebar-tiddler-link-foreground-hover>>\nwikilist-button-reveal-hover: <<colour message-background>>\n"
},
"$:/palettes/Nord": {
"title": "$:/palettes/Nord",
"name": "Nord",
"description": "An arctic, north-bluish color palette.",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"license": "MIT, arcticicestudio, https://github.com/arcticicestudio/nord/blob/develop/LICENSE.md",
"text": "alert-background: #D08770\nalert-border: #D08770\nalert-highlight: #B48EAD\nalert-muted-foreground: #4C566A\nbackground: #3b4252\nblockquote-bar: <<colour muted-foreground>>\nbutton-foreground: <<colour page-background>>\ncode-background: #2E3440\ncode-border: #2E3440\ncode-foreground: #BF616A\ndiff-delete-background: #BF616A\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #A3BE8C\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #BF616A\ndownload-background: #A3BE8C\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour background>>\ndropdown-tab-background-selected: #ECEFF4\ndropdown-tab-background: #4C566A\ndropzone-background: #A3BE8C\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #5E81AC\nexternal-link-foreground: #8FBCBB\nforeground: #d8dee9\nmenubar-background: #2E3440\nmenubar-foreground: #d8dee9\nmessage-background: #2E3440\nmessage-border: #2E3440\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #3b4252\nmodal-footer-background: #3b4252\nmodal-footer-border: #3b4252\nmodal-header-border: #3b4252\nmuted-foreground: #4C566A\nnotification-background: <<colour primary>>\nnotification-border: #EBCB8B\npage-background: #2e3440\npre-background: #2E3440\npre-border: #2E3440\nprimary: #5E81AC\nselect-tag-background: #3b4252\nselect-tag-foreground: <<colour foreground>>\nselection-background: #5E81AC\nselection-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour page-background>>\nsidebar-controls-foreground-hover: #D8DEE9\nsidebar-controls-foreground: #4C566A\nsidebar-foreground-shadow: transparent\nsidebar-foreground: #D8DEE9\nsidebar-muted-foreground-hover: #4C566A\nsidebar-muted-foreground: #4C566A\nsidebar-tab-background-selected: #ECEFF4\nsidebar-tab-background: #4C566A\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: #4C566A\nsidebar-tab-divider: <<colour page-background>>\nsidebar-tab-foreground-selected: #4C566A\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #A3BE8C\nsidebar-tiddler-link-foreground: #81A1C1\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #B48EAD\ntab-background-selected: #ECEFF4\ntab-background: #4C566A\ntab-border-selected: #4C566A\ntab-border: #4C566A\ntab-divider: #4C566A\ntab-foreground-selected: #4C566A\ntab-foreground: #D8DEE9\ntable-border: #4C566A\ntable-footer-background: #2e3440\ntable-header-background: #2e3440\ntag-background: #A3BE8C\ntag-foreground: #4C566A\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: \ntiddler-controls-foreground-selected: #EBCB8B\ntiddler-controls-foreground: #4C566A\ntiddler-editor-background: #2e3440\ntiddler-editor-border-image: #2e3440\ntiddler-editor-border: #3b4252\ntiddler-editor-fields-even: #2e3440\ntiddler-editor-fields-odd: #2e3440\ntiddler-info-background: #2e3440\ntiddler-info-border: #2e3440\ntiddler-info-tab-background: #2e3440\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #4C566A\ntiddler-title-foreground: #81A1C1\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #2d3038\nvery-muted-foreground: #2d3038\nwikilist-background: <<colour page-background>>\nwikilist-toolbar-background: <<colour background>>\nwikilist-item: <<colour background>>\nwikilist-title: <<colour foreground>>\nwikilist-info: <<colour muted-foreground>>\nwikilist-button-open: #A3BE8C\nwikilist-button-open-hover: #A3BE8C\nwikilist-button-reveal: #81A1C1\nwikilist-button-reveal-hover: #81A1C1\nwikilist-button-remove: #B48EAD\nwikilist-button-remove-hover: #B48EAD\n"
},
"$:/palettes/Rocker": {
"title": "$:/palettes/Rocker",
"name": "Rocker",
"description": "A dark theme",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #000\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #cc0000\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.0)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #000\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #ffbb99\nsidebar-tiddler-link-foreground: #cc0000\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffbb99\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #cc0000\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/SolarFlare": {
"title": "$:/palettes/SolarFlare",
"name": "Solar Flare",
"description": "Warm, relaxing earth colours",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": ": Background Tones\n\nbase03: #002b36\nbase02: #073642\n\n: Content Tones\n\nbase01: #586e75\nbase00: #657b83\nbase0: #839496\nbase1: #93a1a1\n\n: Background Tones\n\nbase2: #eee8d5\nbase3: #fdf6e3\n\n: Accent Colors\n\nyellow: #b58900\norange: #cb4b16\nred: #dc322f\nmagenta: #d33682\nviolet: #6c71c4\nblue: #268bd2\ncyan: #2aa198\ngreen: #859900\n\n: Additional Tones (RA)\n\nbase10: #c0c4bb\nviolet-muted: #7c81b0\nblue-muted: #4e7baa\n\nyellow-hot: #ffcc44\norange-hot: #eb6d20\nred-hot: #ff2222\nblue-hot: #2298ee\ngreen-hot: #98ee22\n\n: Palette\n\n: Do not use colour macro for background and foreground\nbackground: #fdf6e3\n download-foreground: <<colour background>>\n dragger-foreground: <<colour background>>\n dropdown-background: <<colour background>>\n modal-background: <<colour background>>\n sidebar-foreground-shadow: <<colour background>>\n tiddler-background: <<colour background>>\n tiddler-border: <<colour background>>\n tiddler-link-background: <<colour background>>\n tab-background-selected: <<colour background>>\n dropdown-tab-background-selected: <<colour tab-background-selected>>\nforeground: #657b83\n dragger-background: <<colour foreground>>\n tab-foreground: <<colour foreground>>\n tab-foreground-selected: <<colour tab-foreground>>\n sidebar-tab-foreground-selected: <<colour tab-foreground-selected>>\n sidebar-tab-foreground: <<colour tab-foreground>>\n sidebar-button-foreground: <<colour foreground>>\n sidebar-controls-foreground: <<colour foreground>>\n sidebar-foreground: <<colour foreground>>\n: base03\n: base02\n: base01\n alert-muted-foreground: <<colour base01>>\n: base00\n code-foreground: <<colour base00>>\n message-foreground: <<colour base00>>\n tag-foreground: <<colour base00>>\n: base0\n sidebar-tiddler-link-foreground: <<colour base0>>\n: base1\n muted-foreground: <<colour base1>>\n blockquote-bar: <<colour muted-foreground>>\n dropdown-border: <<colour muted-foreground>>\n sidebar-muted-foreground: <<colour muted-foreground>>\n tiddler-title-foreground: <<colour muted-foreground>>\n site-title-foreground: <<colour tiddler-title-foreground>>\n: base2\n modal-footer-background: <<colour base2>>\n page-background: <<colour base2>>\n modal-backdrop: <<colour page-background>>\n notification-background: <<colour page-background>>\n code-background: <<colour page-background>>\n code-border: <<colour code-background>>\n pre-background: <<colour page-background>>\n pre-border: <<colour pre-background>>\n sidebar-tab-background-selected: <<colour page-background>>\n table-header-background: <<colour base2>>\n tag-background: <<colour base2>>\n tiddler-editor-background: <<colour base2>>\n tiddler-info-background: <<colour base2>>\n tiddler-info-tab-background: <<colour base2>>\n tab-background: <<colour base2>>\n dropdown-tab-background: <<colour tab-background>>\n: base3\n alert-background: <<colour base3>>\n message-background: <<colour base3>>\n: yellow\n: orange\n: red\n: magenta\n alert-highlight: <<colour magenta>>\n: violet\n external-link-foreground: <<colour violet>>\n: blue\n: cyan\n: green\n: base10\n tiddler-controls-foreground: <<colour base10>>\n: violet-muted\n external-link-foreground-visited: <<colour violet-muted>>\n: blue-muted\n primary: <<colour blue-muted>>\n download-background: <<colour primary>>\n tiddler-link-foreground: <<colour primary>>\n\nalert-border: #b99e2f\ndirty-indicator: #ff0000\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nmessage-border: #cfd6e6\nmodal-border: #999999\nselect-tag-background:\nselect-tag-foreground:\nsidebar-controls-foreground-hover:\nsidebar-muted-foreground-hover:\nsidebar-tab-background: #ded8c5\nsidebar-tiddler-link-foreground-hover:\nstatic-alert-foreground: #aaaaaa\ntab-border: #cccccc\n modal-footer-border: <<colour tab-border>>\n modal-header-border: <<colour tab-border>>\n notification-border: <<colour tab-border>>\n sidebar-tab-border: <<colour tab-border>>\n tab-border-selected: <<colour tab-border>>\n sidebar-tab-border-selected: <<colour tab-border-selected>>\ntab-divider: #d8d8d8\n sidebar-tab-divider: <<colour tab-divider>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-border: #dddddd\ntiddler-subtitle-foreground: #c0c0c0\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/SolarizedDark": {
"title": "$:/palettes/SolarizedDark",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"description": "Precision dark colors for machines and people",
"license": "MIT, Ethan Schoonover, https://github.com/altercation/solarized/blob/master/LICENSE",
"name": "SolarizedDark",
"text": "alert-background: #073642\nalert-border: #93a1a1\nalert-highlight: #d33682\nalert-muted-foreground: #d33682\nbackground: #073642\nblockquote-bar: #d33682\nbutton-background: #073642\nbutton-border: #586e75\nbutton-foreground: #93a1a1\ncode-background: #073642\ncode-border: #586e75\ncode-foreground: #93a1a1\ndirty-indicator: inherit\ndownload-background: #859900\ndownload-foreground: #073642\ndragger-background: #073642\ndragger-foreground: #839496\ndropdown-background: #073642\ndropdown-border: #93a1a1\ndropdown-tab-background: #002b36\ndropdown-tab-background-selected: #073642\ndropzone-background: #859900\nexternal-link-background: inherit\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-foreground: #268bd2\nexternal-link-foreground-hover:\nexternal-link-foreground-visited: #268bd2\nforeground: #839496\nmessage-background: #002b36\nmessage-border: #586e75\nmessage-foreground: #839496\nmodal-backdrop: #657b83\nmodal-background: #002b36\nmodal-border: #586e75\nmodal-footer-background: #073642\nmodal-footer-border: #586e75\nmodal-header-border: #586e75\nmuted-foreground: #93a1a1\nnotification-background: #002b36\nnotification-border: #586e75\npage-background: #073642\npre-background: inherit\npre-border: #657b83\nprimary: #859900\nselect-tag-background: #002b36\nselect-tag-foreground: #839496\nsidebar-button-foreground: #93a1a1\nsidebar-controls-foreground: #93a1a1\nsidebar-controls-foreground-hover: #eee8d5\nsidebar-foreground: #93a1a1\nsidebar-foreground-shadow: transparent\nsidebar-muted-foreground: #839496\nsidebar-muted-foreground-hover: #93a1a1\nsidebar-tab-background: #002b36\nsidebar-tab-background-selected: #073642\nsidebar-tab-border: #073642\nsidebar-tab-border-selected: #839496\nsidebar-tab-divider: #002b36\nsidebar-tab-foreground: #657b83\nsidebar-tab-foreground-selected: #93a1a1\nsidebar-tiddler-link-foreground: #2aa198\nsidebar-tiddler-link-foreground-hover: #eee8d5\nsite-title-foreground: #d33682\nstatic-alert-foreground: #93a1a1\ntab-background: #073642\ntab-background-selected: #002b36\ntab-border: #586e75\ntab-border-selected: #93a1a1\ntab-divider: #93a1a1\ntab-foreground: #839496\ntab-foreground-selected: #93a1a1\ntable-border: #586e75\ntable-footer-background: #073642\ntable-header-background: #073642\ntag-background: #b58900\ntag-foreground: #002b36\ntiddler-background: #002b36\ntiddler-border: #586e75\ntiddler-controls-foreground: inherit\ntiddler-controls-foreground-hover: #d33682\ntiddler-controls-foreground-selected: #2aa198\ntiddler-editor-background: #002b36\ntiddler-editor-border: #073642\ntiddler-editor-border-image: #002b36\ntiddler-editor-fields-even: #002b36\ntiddler-editor-fields-odd: #073642\ntiddler-info-background: #073642\ntiddler-info-border: #657b83\ntiddler-info-tab-background: #002b36\ntiddler-link-background: #002b36\ntiddler-link-foreground: #2aa198\ntiddler-subtitle-foreground: #839496\ntiddler-title-foreground: #d33682\ntoolbar-cancel-button: #839496\ntoolbar-close-button: #839496\ntoolbar-delete-button: #dc322f\ntoolbar-done-button: #839496\ntoolbar-edit-button: #839496\ntoolbar-info-button: #839496\ntoolbar-new-button: #839496\ntoolbar-options-button: #839496\ntoolbar-save-button: inherit\nuntagged-background: #586e75\nvery-muted-foreground: #586e75\n"
},
"$:/palettes/SolarizedLight": {
"title": "$:/palettes/SolarizedLight",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"description": "Precision colors for machines and people",
"license": "MIT, Ethan Schoonover, https://github.com/altercation/solarized/blob/master/LICENSE",
"name": "SolarizedLight",
"text": "alert-background: #eee8d5\nalert-border: #586e75\nalert-highlight: #d33682\nalert-muted-foreground: #d33682\nbackground: #eee8d5\nblockquote-bar: #d33682\nbutton-background: #eee8d5\nbutton-border: #93a1a1\nbutton-foreground: #586e75\ncode-background: #eee8d5\ncode-border: #93a1a1\ncode-foreground: #586e75\ndirty-indicator: inherit\ndownload-background: #859900\ndownload-foreground: #eee8d5\ndragger-background: #eee8d5\ndragger-foreground: #657b83\ndropdown-background: #eee8d5\ndropdown-border: #586e75\ndropdown-tab-background: #fdf6e3\ndropdown-tab-background-selected: #eee8d5\ndropzone-background: #859900\nexternal-link-background: inherit\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-foreground: #268bd2\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #268bd2\nforeground: #657b83\nmessage-background: #fdf6e3\nmessage-border: #93a1a1\nmessage-foreground: #657b83\nmodal-backdrop: #839496\nmodal-background: #fdf6e3\nmodal-border: #93a1a1\nmodal-footer-background: #eee8d5\nmodal-footer-border: #93a1a1\nmodal-header-border: #93a1a1\nmuted-foreground: #586e75\nnotification-background: #fdf6e3\nnotification-border: #93a1a1\npage-background: #eee8d5\npre-background: #eee8d5\npre-border: #839496\nprimary: #859900\nselect-tag-background: #fdf6e3\nselect-tag-foreground: #657b83\nsidebar-button-foreground: #586e75\nsidebar-controls-foreground: #586e75\nsidebar-controls-foreground-hover: #d33682\nsidebar-foreground: #586e75\nsidebar-foreground-shadow: transparent\nsidebar-muted-foreground: #657b83\nsidebar-muted-foreground-hover: #586e75\nsidebar-tab-background: #fdf6e3\nsidebar-tab-background-selected: #eee8d5\nsidebar-tab-border: #eee8d5\nsidebar-tab-border-selected: #657b83\nsidebar-tab-divider: #fdf6e3\nsidebar-tab-foreground: #839496\nsidebar-tab-foreground-selected: #586e75\nsidebar-tiddler-link-foreground: #2aa198\nsidebar-tiddler-link-foreground-hover: #002b36\nsite-title-foreground: #d33682\nstatic-alert-foreground: #586e75\ntab-background: #eee8d5\ntab-background-selected: #fdf6e3\ntab-border: #93a1a1\ntab-border-selected: #586e75\ntab-divider: #586e75\ntab-foreground: #657b83\ntab-foreground-selected: #586e75\ntable-border: #93a1a1\ntable-footer-background: #eee8d5\ntable-header-background: #eee8d5\ntag-background: #b58900\ntag-foreground: #fdf6e3\ntiddler-background: #fdf6e3\ntiddler-border: #93a1a1\ntiddler-controls-foreground: inherit\ntiddler-controls-foreground-hover: #d33682\ntiddler-controls-foreground-selected: #2aa198\ntiddler-editor-background: #fdf6e3\ntiddler-editor-border: #eee8d5\ntiddler-editor-border-image: #fdf6e3\ntiddler-editor-fields-even: #fdf6e3\ntiddler-editor-fields-odd: #eee8d5\ntiddler-info-background: #eee8d5\ntiddler-info-border: #839496\ntiddler-info-tab-background: #fdf6e3\ntiddler-link-background: #fdf6e3\ntiddler-link-foreground: #2aa198\ntiddler-subtitle-foreground: #657b83\ntiddler-title-foreground: #d33682\ntoolbar-cancel-button: #657b83\ntoolbar-close-button: #657b83\ntoolbar-delete-button: #dc322f\ntoolbar-done-button: #657b83\ntoolbar-edit-button: #657b83\ntoolbar-info-button: #657b83\ntoolbar-new-button: #657b83\ntoolbar-options-button: #657b83\ntoolbar-save-button: inherit\nuntagged-background: #586e75\nvery-muted-foreground: #93a1a1\n"
},
"$:/palettes/SpartanDay": {
"title": "$:/palettes/SpartanDay",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"description": "Cold, spartan day colors",
"name": "Spartan Day",
"text": "alert-background: <<colour background>>\nalert-border: <<colour very-muted-foreground>>\nalert-highlight: <<colour very-muted-foreground>>\nalert-muted-foreground: <<colour muted-foreground>>\nbackground: #FAFAFA\nblockquote-bar: <<colour page-background>>\nbutton-background: transparent\nbutton-foreground: inherit\nbutton-border: <<colour tag-background>>\ncode-background: #ececec\ncode-border: #ececec\ncode-foreground: \ndirty-indicator: #c80000\ndownload-background: <<colour primary>>\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: #FFFFFF\ndropdown-border: <<colour dropdown-background>>\ndropdown-tab-background-selected: <<colour dropdown-background>>\ndropdown-tab-background: #F5F5F5\ndropzone-background: <<colour tag-background>>\nexternal-link-background-hover: transparent\nexternal-link-background-visited: transparent\nexternal-link-background: transparent\nexternal-link-foreground-hover: \nexternal-link-foreground-visited: \nexternal-link-foreground: \nforeground: rgba(0, 0, 0, 0.87)\nmessage-background: <<colour background>>\nmessage-border: <<colour very-muted-foreground>>\nmessage-foreground: rgba(0, 0, 0, 0.54)\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour very-muted-foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour very-muted-foreground>>\nmodal-header-border: <<colour very-muted-foreground>>\nmuted-foreground: rgba(0, 0, 0, 0.54)\nnotification-background: <<colour dropdown-background>>\nnotification-border: <<colour dropdown-background>>\npage-background: #f4f4f4\npre-background: #ececec\npre-border: #ececec\nprimary: #3949ab\nselect-tag-background: <<colour background>>\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #aeaeae\nsidebar-controls-foreground: #c6c6c6\nsidebar-foreground-shadow: transparent\nsidebar-foreground: rgba(0, 0, 0, 0.54)\nsidebar-muted-foreground-hover: rgba(0, 0, 0, 0.54)\nsidebar-muted-foreground: rgba(0, 0, 0, 0.38)\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: transparent\nsidebar-tab-border-selected: <<colour table-border>>\nsidebar-tab-border: transparent\nsidebar-tab-divider: <<colour table-border>>\nsidebar-tab-foreground-selected: rgba(0, 0, 0, 0.87)\nsidebar-tab-foreground: rgba(0, 0, 0, 0.54)\nsidebar-tiddler-link-foreground-hover: rgba(0, 0, 0, 0.87)\nsidebar-tiddler-link-foreground: rgba(0, 0, 0, 0.54)\nsite-title-foreground: rgba(0, 0, 0, 0.87)\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: transparent\ntab-border-selected: <<colour table-border>>\ntab-border: transparent\ntab-divider: <<colour table-border>>\ntab-foreground-selected: rgba(0, 0, 0, 0.87)\ntab-foreground: rgba(0, 0, 0, 0.54)\ntable-border: #d8d8d8\ntable-footer-background: <<colour tiddler-editor-fields-odd>>\ntable-header-background: <<colour tiddler-editor-fields-even>>\ntag-background: #ec6\ntag-foreground: <<colour button-foreground>>\ntiddler-background: <<colour background>>\ntiddler-border: #f9f9f9\ntiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground-selected: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground: <<colour sidebar-controls-foreground>>\ntiddler-editor-background: transparent\ntiddler-editor-border-image: \ntiddler-editor-border: #e8e7e7\ntiddler-editor-fields-even: rgba(0, 0, 0, 0.1)\ntiddler-editor-fields-odd: rgba(0, 0, 0, 0.04)\ntiddler-info-background: #F5F5F5\ntiddler-info-border: #F5F5F5\ntiddler-info-tab-background: <<colour tiddler-editor-fields-odd>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour muted-foreground>>\ntiddler-title-foreground: #000000\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour very-muted-foreground>>\nvery-muted-foreground: rgba(0, 0, 0, 0.12)\n"
},
"$:/palettes/SpartanNight": {
"title": "$:/palettes/SpartanNight",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"description": "Dark spartan colors",
"name": "Spartan Night",
"text": "alert-background: <<colour background>>\nalert-border: <<colour very-muted-foreground>>\nalert-highlight: <<colour very-muted-foreground>>\nalert-muted-foreground: <<colour muted-foreground>>\nbackground: #303030\nblockquote-bar: <<colour page-background>>\nbutton-background: transparent\nbutton-foreground: inherit\nbutton-border: <<colour tag-background>>\ncode-background: <<colour pre-background>>\ncode-border: <<colour pre-border>>\ncode-foreground: rgba(255, 255, 255, 0.54)\ndirty-indicator: #c80000\ndownload-background: <<colour primary>>\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: #424242\ndropdown-border: <<colour dropdown-background>>\ndropdown-tab-background-selected: <<colour dropdown-background>>\ndropdown-tab-background: #050505\ndropzone-background: <<colour tag-background>>\nexternal-link-background-hover: transparent\nexternal-link-background-visited: transparent\nexternal-link-background: transparent\nexternal-link-foreground-hover: \nexternal-link-foreground-visited: #7c318c\nexternal-link-foreground: #9e3eb3\nforeground: rgba(255, 255, 255, 0.7)\nmessage-background: <<colour background>>\nmessage-border: <<colour very-muted-foreground>>\nmessage-foreground: rgba(255, 255, 255, 0.54)\nmodal-backdrop: <<colour page-background>>\nmodal-background: <<colour background>>\nmodal-border: <<colour very-muted-foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour background>>\nmodal-header-border: <<colour very-muted-foreground>>\nmuted-foreground: rgba(255, 255, 255, 0.54)\nnotification-background: <<colour dropdown-background>>\nnotification-border: <<colour dropdown-background>>\npage-background: #212121\npre-background: #2a2a2a\npre-border: transparent\nprimary: #5656f3\nselect-tag-background: <<colour background>>\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #494949\nsidebar-controls-foreground: #5d5d5d\nsidebar-foreground-shadow: transparent\nsidebar-foreground: rgba(255, 255, 255, 0.54)\nsidebar-muted-foreground-hover: rgba(255, 255, 255, 0.54)\nsidebar-muted-foreground: rgba(255, 255, 255, 0.38)\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: transparent\nsidebar-tab-border-selected: <<colour table-border>>\nsidebar-tab-border: transparent\nsidebar-tab-divider: <<colour table-border>>\nsidebar-tab-foreground-selected: rgba(255, 255, 255, 0.87)\nsidebar-tab-foreground: rgba(255, 255, 255, 0.54)\nsidebar-tiddler-link-foreground-hover: rgba(255, 255, 255, 0.7)\nsidebar-tiddler-link-foreground: rgba(255, 255, 255, 0.54)\nsite-title-foreground: rgba(255, 255, 255, 0.7)\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: transparent\ntab-border-selected: <<colour table-border>>\ntab-border: transparent\ntab-divider: <<colour table-border>>\ntab-foreground-selected: rgba(255, 255, 255, 0.87)\ntab-foreground: rgba(255, 255, 255, 0.54)\ntable-border: #3a3a3a\ntable-footer-background: <<colour tiddler-editor-fields-odd>>\ntable-header-background: <<colour tiddler-editor-fields-even>>\ntag-background: #ec6\ntag-foreground: <<colour button-foreground>>\ntiddler-background: <<colour background>>\ntiddler-border: rgb(55,55,55)\ntiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground-selected: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground: <<colour sidebar-controls-foreground>>\ntiddler-editor-background: transparent\ntiddler-editor-border-image: \ntiddler-editor-border: rgba(255, 255, 255, 0.08)\ntiddler-editor-fields-even: rgba(255, 255, 255, 0.1)\ntiddler-editor-fields-odd: rgba(255, 255, 255, 0.04)\ntiddler-info-background: #454545\ntiddler-info-border: #454545\ntiddler-info-tab-background: <<colour tiddler-editor-fields-odd>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour muted-foreground>>\ntiddler-title-foreground: #FFFFFF\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour very-muted-foreground>>\nvery-muted-foreground: rgba(255, 255, 255, 0.12)\n"
},
"$:/palettes/Twilight": {
"title": "$:/palettes/Twilight",
"tags": "$:/tags/Palette",
"author": "Thomas Elmiger",
"type": "application/x-tiddler-dictionary",
"name": "Twilight",
"description": "Delightful, soft darkness.",
"text": "alert-background: rgb(255, 255, 102)\nalert-border: rgb(232, 232, 125)\nalert-highlight: rgb(255, 51, 51)\nalert-muted-foreground: rgb(224, 82, 82)\nbackground: rgb(38, 38, 38)\nblockquote-bar: rgba(240, 196, 117, 0.7)\nbutton-background: rgb(63, 63, 63)\nbutton-border: rgb(127, 127, 127)\nbutton-foreground: rgb(179, 179, 179)\ncode-background: rgba(0,0,0,0.03)\ncode-border: rgba(0,0,0,0.08)\ncode-foreground: rgb(255, 94, 94)\ndiff-delete-background: #ffc9c9\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #aaefad\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: rgb(255, 94, 94)\ndownload-background: #19a974\ndownload-foreground: rgb(38, 38, 38)\ndragger-background: rgb(179, 179, 179)\ndragger-foreground: rgb(38, 38, 38)\ndropdown-background: rgb(38, 38, 38)\ndropdown-border: rgb(255, 255, 255)\ndropdown-tab-background: rgba(0,0,0,.1)\ndropdown-tab-background-selected: rgba(255,255,255,1)\ndropzone-background: #9eebcf\nexternal-link-background: inherit\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-foreground: rgb(179, 179, 255)\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: rgb(153, 153, 255)\nforeground: rgb(179, 179, 179)\nmessage-background: <<colour tag-foreground>>\nmessage-border: #96ccff\nmessage-foreground: <<colour tag-background>>\nmodal-backdrop: rgb(179, 179, 179)\nmodal-background: rgb(38, 38, 38)\nmodal-border: rgba(0,0,0,.5)\nmodal-footer-background: #f4f4f4\nmodal-footer-border: rgba(0,0,0,.1)\nmodal-header-border: rgba(0,0,0,.2)\nmuted-foreground: rgb(255, 255, 255)\nnotification-background: <<colour tag-foreground>>\nnotification-border: <<colour tag-background>>\npage-background: rgb(26, 26, 26)\npre-background: rgb(25, 25, 25)\npre-border: rgba(0,0,0,.2)\nprimary: rgb(255, 201, 102)\nselect-tag-background: \nselect-tag-foreground: \nsidebar-button-foreground: rgb(179, 179, 179)\nsidebar-controls-foreground: rgb(153, 153, 153)\nsidebar-controls-foreground-hover: <<colour tiddler-controls-foreground-hover>>\nsidebar-foreground: rgb(141, 141, 141)\nsidebar-foreground-shadow: transparent\nsidebar-muted-foreground: rgba(0, 0, 0, 0.5)\nsidebar-muted-foreground-hover: rgb(141, 141, 141)\nsidebar-tab-background: rgba(141, 141, 141, 0.2)\nsidebar-tab-background-selected: rgb(26, 26, 26)\nsidebar-tab-border: rgb(127, 127, 127)\nsidebar-tab-border-selected: rgb(127, 127, 127)\nsidebar-tab-divider: rgb(127, 127, 127)\nsidebar-tab-foreground: rgb(179, 179, 179)\nsidebar-tab-foreground-selected: rgb(179, 179, 179)\nsidebar-tiddler-link-foreground: rgb(179, 179, 179)\nsidebar-tiddler-link-foreground-hover: rgb(115, 115, 115)\nsite-title-foreground: rgb(255, 201, 102)\nstatic-alert-foreground: rgba(0,0,0,.3)\ntab-background: rgba(0,0,0,0.125)\ntab-background-selected: rgb(38, 38, 38)\ntab-border: rgb(255, 201, 102)\ntab-border-selected: rgb(255, 201, 102)\ntab-divider: rgb(255, 201, 102)\ntab-foreground: rgb(179, 179, 179)\ntab-foreground-selected: rgb(179, 179, 179)\ntable-border: rgba(255,255,255,.3)\ntable-footer-background: rgba(0,0,0,.4)\ntable-header-background: rgba(0,0,0,.1)\ntag-background: rgb(255, 201, 102)\ntag-foreground: rgb(25, 25, 25)\ntiddler-background: rgb(38, 38, 38)\ntiddler-border: rgba(240, 196, 117, 0.7)\ntiddler-controls-foreground: rgb(128, 128, 128)\ntiddler-controls-foreground-hover: rgba(255, 255, 255, 0.8)\ntiddler-controls-foreground-selected: rgba(255, 255, 255, 0.9)\ntiddler-editor-background: rgb(33, 33, 33)\ntiddler-editor-border: rgb(63, 63, 63)\ntiddler-editor-border-image: rgb(25, 25, 25)\ntiddler-editor-fields-even: rgb(33, 33, 33)\ntiddler-editor-fields-odd: rgb(28, 28, 28)\ntiddler-info-background: rgb(43, 43, 43)\ntiddler-info-border: rgb(25, 25, 25)\ntiddler-info-tab-background: rgb(43, 43, 43)\ntiddler-link-background: rgb(38, 38, 38)\ntiddler-link-foreground: rgb(204, 204, 255)\ntiddler-subtitle-foreground: rgb(255, 255, 255)\ntiddler-title-foreground: rgb(255, 192, 76)\ntoolbar-cancel-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-done-button: \ntoolbar-edit-button: \ntoolbar-info-button: \ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \nuntagged-background: rgb(255, 255, 255)\nvery-muted-foreground: rgba(240, 196, 117, 0.7)\n"
},
"$:/palettes/Vanilla": {
"title": "$:/palettes/Vanilla",
"name": "Vanilla",
"description": "Pale and unobtrusive",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndiff-delete-background: #ffc9c9\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #aaefad\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #f4f4f4\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselection-background:\nselection-foreground:\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #aaaaaa\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #f4f4f4\nsidebar-tab-background: #e0e0e0\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: #e4e4e4\nsidebar-tab-foreground-selected:\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #999999\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\nwikilist-background: #e5e5e5\nwikilist-item: #fff\nwikilist-info: #000\nwikilist-title: #666\nwikilist-title-svg: <<colour wikilist-title>>\nwikilist-url: #aaa\nwikilist-button-open: #4fb82b\nwikilist-button-open-hover: green\nwikilist-button-reveal: #5778d8\nwikilist-button-reveal-hover: blue\nwikilist-button-remove: #d85778\nwikilist-button-remove-hover: red\nwikilist-toolbar-background: #d3d3d3\nwikilist-toolbar-foreground: #888\nwikilist-droplink-dragover: rgba(255,192,192,0.5)\nwikilist-button-background: #acacac\nwikilist-button-foreground: #000\n"
},
"$:/core/readme": {
"title": "$:/core/readme",
"text": "This plugin contains TiddlyWiki's core components, comprising:\n\n* JavaScript code modules\n* Icons\n* Templates needed to create TiddlyWiki's user interface\n* British English (''en-GB'') translations of the localisable strings used by the core\n"
},
"$:/library/sjcl.js/license": {
"title": "$:/library/sjcl.js/license",
"type": "text/plain",
"text": "SJCL is open. You can use, modify and redistribute it under a BSD\nlicense or under the GNU GPL, version 2.0.\n\n---------------------------------------------------------------------\n\nhttp://opensource.org/licenses/BSD-2-Clause\n\nCopyright (c) 2009-2015, Emily Stark, Mike Hamburg and Dan Boneh at\nStanford University. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\nnotice, this list of conditions and the following disclaimer in the\ndocumentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\nIS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\nTO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n---------------------------------------------------------------------\n\nhttp://opensource.org/licenses/GPL-2.0\n\nThe Stanford Javascript Crypto Library (hosted here on GitHub) is a\nproject by the Stanford Computer Security Lab to build a secure,\npowerful, fast, small, easy-to-use, cross-browser library for\ncryptography in Javascript.\n\nCopyright (c) 2009-2015, Emily Stark, Mike Hamburg and Dan Boneh at\nStanford University.\n\nThis program is free software; you can redistribute it and/or modify it\nunder the terms of the GNU General Public License as published by the\nFree Software Foundation; either version 2 of the License, or (at your\noption) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General\nPublic License for more details.\n\nYou should have received a copy of the GNU General Public License along\nwith this program; if not, write to the Free Software Foundation, Inc.,\n59 Temple Place, Suite 330, Boston, MA 02111-1307 USA"
},
"$:/core/templates/MOTW.html": {
"title": "$:/core/templates/MOTW.html",
"text": "\\rules only filteredtranscludeinline transcludeinline entity\n<!-- The following comment is called a MOTW comment and is necessary for the TiddlyIE Internet Explorer extension -->\n<!-- saved from url=(0021)https://tiddlywiki.com --> "
},
"$:/core/templates/alltiddlers.template.html": {
"title": "$:/core/templates/alltiddlers.template.html",
"type": "text/vnd.tiddlywiki-html",
"text": "<!-- This template is provided for backwards compatibility with older versions of TiddlyWiki -->\n\n<$set name=\"exportFilter\" value=\"[!is[system]sort[title]]\">\n\n{{$:/core/templates/exporters/StaticRiver}}\n\n</$set>\n"
},
"$:/core/templates/canonical-uri-external-image": {
"title": "$:/core/templates/canonical-uri-external-image",
"text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external images.\n\nChange the `./images/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./images/<$view field=\"title\" format=\"doubleurlencoded\"/>"
},
"$:/core/templates/canonical-uri-external-raw": {
"title": "$:/core/templates/canonical-uri-external-raw",
"text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external raw files that are stored in the same directory\n\n-->\n<$view field=\"title\" format=\"doubleurlencoded\"/>"
},
"$:/core/templates/canonical-uri-external-text": {
"title": "$:/core/templates/canonical-uri-external-text",
"text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external text files.\n\nChange the `./text/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./text/<$view field=\"title\" format=\"doubleurlencoded\"/>.tid"
},
"$:/core/templates/css-tiddler": {
"title": "$:/core/templates/css-tiddler",
"text": "<!--\n\nThis template is used for saving CSS tiddlers as a style tag with data attributes representing the tiddler fields.\n\n-->`<style`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/css\">`<$view field=\"text\" format=\"text\" />`</style>`"
},
"$:/core/templates/exporters/CsvFile": {
"title": "$:/core/templates/exporters/CsvFile",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/CsvFile}}",
"extension": ".csv",
"text": "<$macrocall $name=\"csvtiddlers\" filter=<<exportFilter>> format=\"quoted-comma-sep\" $output=\"text/raw\"/>\n"
},
"$:/core/templates/exporters/JsonFile": {
"title": "$:/core/templates/exporters/JsonFile",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/JsonFile}}",
"extension": ".json",
"text": "<$macrocall $name=\"jsontiddlers\" filter=<<exportFilter>> $output=\"text/raw\"/>\n"
},
"$:/core/templates/exporters/StaticRiver": {
"title": "$:/core/templates/exporters/StaticRiver",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/StaticRiver}}",
"extension": ".html",
"text": "\\define tv-wikilink-template() #$uri_encoded$\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n<section class=\"tc-story-river tc-static-story-river\">\n{{$:/core/templates/exporters/StaticRiver/Content||$:/core/templates/html-tiddler}}\n</section>\n</body>\n</html>\n"
},
"$:/core/templates/exporters/StaticRiver/Content": {
"title": "$:/core/templates/exporters/StaticRiver/Content",
"text": "\\define renderContent()\n{{{ $(exportFilter)$ ||$:/core/templates/static-tiddler}}}\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<<renderContent>>\n"
},
"$:/core/templates/exporters/TidFile": {
"title": "$:/core/templates/exporters/TidFile",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/TidFile}}",
"extension": ".tid",
"condition": "[<count>compare:lte[1]]",
"text": "\\define renderContent()\n{{{ $(exportFilter)$ +[limit[1]] ||$:/core/templates/tid-tiddler}}}\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<<renderContent>>"
},
"$:/core/save/all-external-js": {
"title": "$:/core/save/all-external-js",
"text": "\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[prefix[$:/temp/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/core]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$\n\\end\n{{$:/core/templates/tiddlywiki5-external-js.html}}\n"
},
"$:/core/templates/tiddlywiki5.js": {
"title": "$:/core/templates/tiddlywiki5.js",
"text": "\\rules only filteredtranscludeinline transcludeinline codeinline\n\n/*\n{{ $:/core/copyright.txt ||$:/core/templates/plain-text-tiddler}}\n`*/\n`<!--~~ Library modules ~~-->\n{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/plain-text-tiddler}}}\n<!--~~ Boot prefix ~~-->\n{{ $:/boot/bootprefix.js ||$:/core/templates/plain-text-tiddler}}\n<!--~~ Core plugin ~~-->\n{{$:/core/templates/tiddlywiki5.js/tiddlers}}\n<!--~~ Boot kernel ~~-->\n{{ $:/boot/boot.js ||$:/core/templates/plain-text-tiddler}}\n"
},
"$:/core/templates/tiddlywiki5.js/tiddlers": {
"title": "$:/core/templates/tiddlywiki5.js/tiddlers",
"text": "`\n$tw.preloadTiddlerArray(`<$text text=<<jsontiddlers \"[[$:/core]]\">>/>`);\n`\n"
},
"$:/core/templates/tiddlywiki5-external-js.html": {
"title": "$:/core/templates/tiddlywiki5-external-js.html",
"text": "\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n{{$:/core/templates/MOTW.html}}<html lang=\"`<$text text={{{ [{$:/language}get[name]] }}}/>`\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<!--~~ Raw markup for the top of the head section ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/TopHead]] ||$:/core/templates/raw-static-tiddler}}}\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\"/>\n<meta name=\"application-name\" content=\"TiddlyWiki\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\" />\n<meta name=\"copyright\" content=\"{{$:/core/copyright.txt}}\" />\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\n\n<!--~~ Raw markup ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/core/wiki/rawmarkup]] [all[shadows+tiddlers]tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified]] ||$:/core/templates/raw-static-tiddler}}}\n</head>\n<body class=\"tc-body\">\n<!--~~ Raw markup for the top of the body section ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/TopBody]] ||$:/core/templates/raw-static-tiddler}}}\n<!--~~ Static styles ~~-->\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<!--~~ Static content for Google and browsers without JavaScript ~~-->\n<noscript>\n<div id=\"splashArea\">\n{{$:/core/templates/static.area}}\n</div>\n</noscript>\n<!--~~ Ordinary tiddlers ~~-->\n{{$:/core/templates/store.area.template.html}}\n<!--~~ Raw markup for the bottom of the body section ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/BottomBody]] ||$:/core/templates/raw-static-tiddler}}}\n</body>\n<script src=\"%24%3A%2Fcore%2Ftemplates%2Ftiddlywiki5.js\" onerror=\"alert('Error: Cannot load tiddlywiki.js');\"></script>\n</html>\n"
},
"$:/core/templates/html-div-skinny-tiddler": {
"title": "$:/core/templates/html-div-skinny-tiddler",
"text": "<!--\n\nThis template is a variant of $:/core/templates/html-div-tiddler used for saving skinny tiddlers (with no text field)\n\n-->`<div`<$fields template=' $name$=\"$encoded_value$\"'></$fields>`>\n<pre></pre>\n</div>`\n"
},
"$:/core/templates/html-div-tiddler": {
"title": "$:/core/templates/html-div-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as an HTML DIV tag with attributes representing the tiddler fields.\n\n-->`<div`<$fields template=' $name$=\"$encoded_value$\"'></$fields>`>\n<pre>`<$view field=\"text\" format=\"htmlencoded\" />`</pre>\n</div>`\n"
},
"$:/core/templates/html-tiddler": {
"title": "$:/core/templates/html-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as raw HTML\n\n--><$view field=\"text\" format=\"htmlwikified\" />"
},
"$:/core/templates/javascript-tiddler": {
"title": "$:/core/templates/javascript-tiddler",
"text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields.\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\">`<$view field=\"text\" format=\"text\" />`</script>`"
},
"$:/core/templates/json-tiddler": {
"title": "$:/core/templates/json-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as raw JSON\n\n--><$text text=<<jsontiddler>>/>"
},
"$:/core/templates/module-tiddler": {
"title": "$:/core/templates/module-tiddler",
"text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields. The body of the tiddler is wrapped in a call to the `$tw.modules.define` function in order to define the body of the tiddler as a module\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\" data-module=\"yes\">$tw.modules.define(\"`<$view field=\"title\" format=\"jsencoded\" />`\",\"`<$view field=\"module-type\" format=\"jsencoded\" />`\",function(module,exports,require) {`<$view field=\"text\" format=\"text\" />`});\n</script>`"
},
"$:/core/templates/plain-text-tiddler": {
"title": "$:/core/templates/plain-text-tiddler",
"text": "<$view field=\"text\" format=\"text\" />"
},
"$:/core/templates/raw-static-tiddler": {
"title": "$:/core/templates/raw-static-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as static HTML\n\n--><$view field=\"text\" format=\"plainwikified\" />"
},
"$:/core/save/all": {
"title": "$:/core/save/all",
"text": "\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[prefix[$:/temp/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/empty": {
"title": "$:/core/save/empty",
"text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/lazy-all": {
"title": "$:/core/save/lazy-all",
"text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] \n\\end\n\\define skinnySaveTiddlerFilter()\n[!is[system]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/lazy-images": {
"title": "$:/core/save/lazy-images",
"text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[!is[system]is[image]] +[sort[title]] \n\\end\n\\define skinnySaveTiddlerFilter()\n[is[image]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/templates/server/static.sidebar.wikitext": {
"title": "$:/core/templates/server/static.sidebar.wikitext",
"text": "\\whitespace trim\n<div class=\"tc-sidebar-scrollable\" style=\"overflow: auto;\">\n<div class=\"tc-sidebar-header\">\n<h1 class=\"tc-site-title\">\n<$transclude tiddler=\"$:/SiteTitle\"/>\n</h1>\n<div class=\"tc-site-subtitle\">\n<$transclude tiddler=\"$:/SiteSubtitle\"/>\n</div>\n<h2>\n</h2>\n<div class=\"tc-sidebar-lists\">\n<$list filter={{$:/DefaultTiddlers}}>\n<div class=\"tc-menu-list-subitem\">\n<$link><$text text=<<currentTiddler>>/></$link>\n</div>\n</$list>\n</div>\n<!-- Currently disabled the recent list as it is unweildy when the responsive narrow view kicks in\n<h2>\n{{$:/language/SideBar/Recent/Caption}}\n</h2>\n<div class=\"tc-sidebar-lists\">\n<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n</div>\n</div>\n</div>\n-->\n"
},
"$:/core/templates/server/static.tiddler.html": {
"title": "$:/core/templates/server/static.tiddler.html",
"text": "\\whitespace trim\n\\define tv-wikilink-template() $uri_encoded$\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content={{$:/core/templates/version}} />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<link rel=\"stylesheet\" href=\"%24%3A%2Fcore%2Ftemplates%2Fstatic.template.css\">\n<title><$view field=\"caption\" format=\"plainwikified\"><$view field=\"title\"/></$view>: <$view tiddler=\"$:/core/wiki/title\" format=\"plainwikified\"/></title>\n</head>\n<body class=\"tc-body\">\n<$transclude tiddler=\"$:/core/templates/server/static.sidebar.wikitext\" mode=\"inline\"/>\n<section class=\"tc-story-river\">\n<div class=\"tc-tiddler-frame\">\n<$transclude tiddler=\"$:/core/templates/server/static.tiddler.wikitext\" mode=\"inline\"/>\n</div>\n</section>\n</body>\n</html>"
},
"$:/core/templates/server/static.tiddler.wikitext": {
"title": "$:/core/templates/server/static.tiddler.wikitext",
"text": "\\whitespace trim\n<div class=\"tc-tiddler-title\">\n<div class=\"tc-titlebar\">\n<h2><$text text=<<currentTiddler>>/></h2>\n</div>\n</div>\n<div class=\"tc-subtitle\">\n<$link to={{!!modifier}}>\n<$view field=\"modifier\"/>\n</$link> <$view field=\"modified\" format=\"date\" template={{$:/language/Tiddler/DateFormat}}/>\n</div>\n<div class=\"tc-tags-wrapper\">\n<$list filter=\"[all[current]tags[]sort[title]]\">\n<a href={{{ [<currentTiddler>encodeuricomponent[]] }}}>\n<$macrocall $name=\"tag-pill\" tag=<<currentTiddler>>/>\n</a>\n</$list>\n</div>\n<div class=\"tc-tiddler-body\">\n<$transclude mode=\"block\"/>\n</div>\n"
},
"$:/core/templates/single.tiddler.window": {
"title": "$:/core/templates/single.tiddler.window",
"text": "\\whitespace trim\n\\define containerClasses()\ntc-page-container tc-page-view-$(storyviewTitle)$ tc-language-$(languageTitle)$\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$vars\n\ttv-config-toolbar-icons={{$:/config/Toolbar/Icons}}\n\ttv-config-toolbar-text={{$:/config/Toolbar/Text}}\n\ttv-config-toolbar-class={{$:/config/Toolbar/ButtonClass}}\n\ttv-show-missing-links={{$:/config/MissingLinks}}\n\tstoryviewTitle={{$:/view}}\n\tlanguageTitle={{{ [{$:/language}get[name]] }}}>\n\n<div class=<<containerClasses>>>\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\">\n\n<$transclude mode=\"block\"/>\n\n</$navigator>\n\n</div>\n\n</$vars>\n"
},
"$:/core/templates/split-recipe": {
"title": "$:/core/templates/split-recipe",
"text": "<$list filter=\"[!is[system]]\">\ntiddler: <$view field=\"title\" format=\"urlencoded\"/>.tid\n</$list>\n"
},
"$:/core/templates/static-tiddler": {
"title": "$:/core/templates/static-tiddler",
"text": "<a name=<<currentTiddler>>>\n<$transclude tiddler=\"$:/core/ui/ViewTemplate\"/>\n</a>"
},
"$:/core/templates/static.area": {
"title": "$:/core/templates/static.area",
"text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawStaticContent]!has[draft.of]] ||$:/core/templates/raw-static-tiddler}}}\n{{$:/core/templates/static.content||$:/core/templates/html-tiddler}}\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\nThis file contains an encrypted ~TiddlyWiki. Enable ~JavaScript and enter the decryption password when prompted.\n</$reveal>\n<!-- ensure splash screen isn't shown when JS is disabled -->\n`<style>\n.tc-remove-when-wiki-loaded {display: none;}\n</style>`\n"
},
"$:/core/templates/static.content": {
"title": "$:/core/templates/static.content",
"text": "<!-- For Google, and people without JavaScript-->\nThis [[TiddlyWiki|https://tiddlywiki.com]] contains the following tiddlers:\n\n<ul>\n<$list filter=<<saveTiddlerFilter>>>\n<li><$view field=\"title\" format=\"text\"></$view></li>\n</$list>\n</ul>\n"
},
"$:/core/templates/static.template.css": {
"title": "$:/core/templates/static.template.css",
"text": "{{$:/boot/boot.css||$:/core/templates/plain-text-tiddler}}\n\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n"
},
"$:/core/templates/static.template.html": {
"title": "$:/core/templates/static.template.html",
"type": "text/vnd.tiddlywiki-html",
"text": "\\define tv-wikilink-template() static/$uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n{{$:/core/ui/PageTemplate||$:/core/templates/html-tiddler}}\n</body>\n</html>\n"
},
"$:/core/templates/static.tiddler.html": {
"title": "$:/core/templates/static.tiddler.html",
"text": "\\define tv-wikilink-template() $uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n`<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"`{{$:/core/templates/version}}`\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<link rel=\"stylesheet\" href=\"static.css\">\n<title>`<$view field=\"caption\"><$view field=\"title\"/></$view>: {{$:/core/wiki/title}}`</title>\n</head>\n<body class=\"tc-body\">\n`{{$:/StaticBanner||$:/core/templates/html-tiddler}}`\n<section class=\"tc-story-river tc-static-story-river\">\n`<$view tiddler=\"$:/core/ui/ViewTemplate\" format=\"htmlwikified\"/>`\n</section>\n</body>\n</html>\n`\n"
},
"$:/core/templates/store.area.template.html": {
"title": "$:/core/templates/store.area.template.html",
"text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n`<div id=\"storeArea\" style=\"display:none;\">`\n<$list filter=<<saveTiddlerFilter>> template=\"$:/core/templates/html-div-tiddler\"/>\n<$list filter={{{ [<skinnySaveTiddlerFilter>] }}} template=\"$:/core/templates/html-div-skinny-tiddler\"/>\n`</div>`\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n`<!--~~ Encrypted tiddlers ~~-->`\n`<pre id=\"encryptedStoreArea\" type=\"text/plain\" style=\"display:none;\">`\n<$encrypt filter=<<saveTiddlerFilter>>/>\n`</pre>`\n</$reveal>"
},
"$:/core/templates/tid-tiddler": {
"title": "$:/core/templates/tid-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers in TiddlyWeb *.tid format\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>`\n`<$view field=\"text\" format=\"text\" />"
},
"$:/core/templates/tiddler-metadata": {
"title": "$:/core/templates/tiddler-metadata",
"text": "<!--\n\nThis template is used for saving tiddler metadata *.meta files\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>"
},
"$:/core/templates/tiddlywiki5.html": {
"title": "$:/core/templates/tiddlywiki5.html",
"text": "<$set name=\"saveTiddlerAndShadowsFilter\" filter=\"[subfilter<saveTiddlerFilter>] [subfilter<saveTiddlerFilter>plugintiddlers[]]\">\n`<!doctype html>\n`{{$:/core/templates/MOTW.html}}`<html lang=\"`<$text text={{{ [{$:/language}get[name]] }}}/>`\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<!--~~ Raw markup for the top of the head section ~~-->\n`{{{ [<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/TopHead]] ||$:/core/templates/raw-static-tiddler}}}`\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\"/>\n<meta name=\"application-name\" content=\"TiddlyWiki\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"`{{$:/core/templates/version}}`\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\" />\n<meta name=\"copyright\" content=\"`{{$:/core/copyright.txt}}`\" />\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>`{{$:/core/wiki/title}}`</title>\n<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\n\n<!--~~ Raw markup ~~-->\n`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/core/wiki/rawmarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified]] ||$:/core/templates/raw-static-tiddler}}}`\n</head>\n<body class=\"tc-body\">\n<!--~~ Raw markup for the top of the body section ~~-->\n`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/TopBody]] ||$:/core/templates/raw-static-tiddler}}}`\n<!--~~ Static styles ~~-->\n<div id=\"styleArea\">\n`{{$:/boot/boot.css||$:/core/templates/css-tiddler}}`\n</div>\n<!--~~ Static content for Google and browsers without JavaScript ~~-->\n<noscript>\n<div id=\"splashArea\">\n`{{$:/core/templates/static.area}}`\n</div>\n</noscript>\n<!--~~ Ordinary tiddlers ~~-->\n`{{$:/core/templates/store.area.template.html}}`\n<!--~~ Library modules ~~-->\n<div id=\"libraryModules\" style=\"display:none;\">\n`{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/javascript-tiddler}}}`\n</div>\n<!--~~ Boot kernel prologue ~~-->\n<div id=\"bootKernelPrefix\" style=\"display:none;\">\n`{{ $:/boot/bootprefix.js ||$:/core/templates/javascript-tiddler}}`\n</div>\n<!--~~ Boot kernel ~~-->\n<div id=\"bootKernel\" style=\"display:none;\">\n`{{ $:/boot/boot.js ||$:/core/templates/javascript-tiddler}}`\n</div>\n<!--~~ Raw markup for the bottom of the body section ~~-->\n`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/BottomBody]] ||$:/core/templates/raw-static-tiddler}}}`\n</body>\n</html>`\n"
},
"$:/core/templates/version": {
"title": "$:/core/templates/version",
"text": "<<version>>"
},
"$:/core/templates/wikified-tiddler": {
"title": "$:/core/templates/wikified-tiddler",
"text": "<$transclude />"
},
"$:/core/ui/AboveStory/tw2-plugin-check": {
"title": "$:/core/ui/AboveStory/tw2-plugin-check",
"tags": "$:/tags/AboveStory",
"text": "\\define lingo-base() $:/language/AboveStory/ClassicPlugin/\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]limit[1]]\">\n\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n<ul>\n\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]]\">\n\n<li>\n\n<$link><$view field=\"title\"/></$link>\n\n</li>\n\n</$list>\n\n</ul>\n\n</div>\n\n</$list>\n"
},
"$:/core/ui/Actions/new-image": {
"title": "$:/core/ui/Actions/new-image",
"tags": "$:/tags/Actions",
"description": "create a new image tiddler",
"text": "\\define get-type()\nimage/$(imageType)$\n\\end\n\\define get-tags() $(textFieldTags)$ $(tagsFieldTags)$\n<$vars imageType={{$:/config/NewImageType}} textFieldTags={{$:/config/NewJournal/Tags}} tagsFieldTags={{$:/config/NewJournal/Tags!!tags}}>\n<$action-sendmessage $message=\"tm-new-tiddler\" type=<<get-type>> tags=<<get-tags>>/>\n</$vars>\n"
},
"$:/core/ui/Actions/new-journal": {
"title": "$:/core/ui/Actions/new-journal",
"tags": "$:/tags/Actions",
"description": "create a new journal tiddler",
"text": "\\define get-tags() $(textFieldTags)$ $(tagsFieldTags)$\n<$vars journalTitleTemplate={{$:/config/NewJournal/Title}} textFieldTags={{$:/config/NewJournal/Tags}} tagsFieldTags={{$:/config/NewJournal/Tags!!tags}} journalText={{$:/config/NewJournal/Text}}>\n<$wikify name=\"journalTitle\" text=\"\"\"<$macrocall $name=\"now\" format=<<journalTitleTemplate>>/>\"\"\">\n<$reveal type=\"nomatch\" state=<<journalTitle>> text=\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<journalTitle>> tags=<<get-tags>> text={{{ [<journalTitle>get[]] }}}/>\n</$reveal>\n<$reveal type=\"match\" state=<<journalTitle>> text=\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<journalTitle>> tags=<<get-tags>> text=<<journalText>>/>\n</$reveal>\n</$wikify>\n</$vars>\n"
},
"$:/core/ui/Actions/new-tiddler": {
"title": "$:/core/ui/Actions/new-tiddler",
"tags": "$:/tags/Actions",
"description": "create a new empty tiddler",
"text": "\\define get-tags() $(textFieldTags)$ $(tagsFieldTags)$\n<$vars textFieldTags={{$:/config/NewTiddler/Tags}} tagsFieldTags={{$:/config/NewTiddler/Tags!!tags}}>\n<$action-sendmessage $message=\"tm-new-tiddler\" tags=<<get-tags>>/>\n</$vars>\n"
},
"$:/core/ui/AdvancedSearch/Filter": {
"title": "$:/core/ui/AdvancedSearch/Filter",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Filter/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n\\define set-next-input-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab--1498284803\" tag=\"$:/tags/AdvancedSearch\" beforeafter=\"$beforeafter$\" defaultState=\"$:/core/ui/AdvancedSearch/System\" actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define cancel-search-actions() <$list filter=\"[{$:/temp/advancedsearch/input}!match{$:/temp/advancedsearch}]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[[$:/temp/advancedsearch]] [[$:/temp/advancedsearch/input]] [[$:/temp/advancedsearch/selected-item]]\" />\"\"\"><$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" text={{$:/temp/advancedsearch}}/><$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/></$list>\n\n\\define input-accept-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\"\"\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\n\n\\define input-accept-variant-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\"\"\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\n\n<<lingo Filter/Hint>>\n\n<div class=\"tc-search tc-advanced-search\">\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">>>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=\"$:/temp/advancedsearch/input\" storeTitle=\"$:/temp/advancedsearch\" \n\t\trefreshTitle=\"$:/temp/advancedsearch/refresh\" selectionStateTitle=\"$:/temp/advancedsearch/selected-item\" type=\"search\" \n\t\ttag=\"input\" focus={{$:/config/Search/AutoFocus}} configTiddlerFilter=\"[[$:/temp/advancedsearch]]\" firstSearchFilterField=\"text\" \n\t\tinputAcceptActions=<<input-accept-actions>> inputAcceptVariantActions=<<input-accept-variant-actions>> \n\t\tinputCancelActions=<<cancel-search-actions>>/>\n</$keyboard>\n</$keyboard>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch/FilterButton]!has[draft.of]]\"><$transclude/></$list>\n</div>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\n<div class=\"tc-search-results\">\n<<lingo Filter/Matches>>\n<$list filter={{$:/temp/advancedsearch}}>\n<span class={{{[<currentTiddler>addsuffix[-primaryList]] -[[$:/temp/advancedsearch/selected-item]get[text]] +[then[]else[tc-list-item-selected]] }}}>\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</span>\n</$list>\n</div>\n</$set>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<<cancel-search-actions>>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\".tc-advanced-search input\"\"\" />\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button popup=<<qualify \"$:/state/filterDeleteDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/delete-button}}\n</$button>\n</$reveal>\n\n<$reveal state=<<qualify \"$:/state/filterDeleteDropdown\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<div class=\"tc-dropdown-item-plain\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\nAre you sure you wish to delete <<resultCount>> tiddler(s)?\n</$set>\n</div>\n<div class=\"tc-dropdown-item-plain\">\n<$button class=\"tc-btn\">\n<$action-deletetiddler $filter={{$:/temp/advancedsearch}}/>\nDelete these tiddlers\n</$button>\n</div>\n</div>\n</div>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/filterDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</span>\n\n<$reveal state=<<qualify \"$:/state/filterDropdown\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$linkcatcher actions=\"\"\"<$action-setfield $tiddler=\"$:/temp/advancedsearch\" text=<<navigateTo>>/><$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" text=<<navigateTo>>/><$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/><$action-sendmessage $message=\"tm-focus-selector\" $param='.tc-advanced-search input' />\"\"\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Filter]]\"><$link to={{!!filter}}><$transclude field=\"description\"/></$link>\n</$list>\n</div>\n</div>\n</$linkcatcher>\n</$set>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/export": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/export",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$macrocall $name=\"exportButton\" exportFilter={{$:/temp/advancedsearch}} lingoBase=\"$:/language/Buttons/ExportTiddlers/\"/>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Shadows": {
"title": "$:/core/ui/AdvancedSearch/Shadows",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Shadows/Caption}}",
"first-search-filter": "[all[shadows]search<userInput>sort[title]limit[250]] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]]",
"text": "\\define lingo-base() $:/language/Search/\n\n\\define set-next-input-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab--1498284803\" tag=\"$:/tags/AdvancedSearch\" beforeafter=\"$beforeafter$\" defaultState=\"$:/core/ui/AdvancedSearch/System\" actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define cancel-search-actions() <$list filter=\"[{$:/temp/advancedsearch}!match{$:/temp/advancedsearch/input}]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[[$:/temp/advancedsearch]] [[$:/temp/advancedsearch/input]] [[$:/temp/advancedsearch/selected-item]]\" />\"\"\"><$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" text={{$:/temp/advancedsearch}}/><$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/></$list><$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\".tc-advanced-search input\"\"\"/>\n\n\\define input-accept-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\"\"\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\n\n\\define input-accept-variant-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\"\"\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\n\n<<lingo Shadows/Hint>>\n\n<div class=\"tc-search\">\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">>>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=\"$:/temp/advancedsearch/input\" storeTitle=\"$:/temp/advancedsearch\"\n\t\trefreshTitle=\"$:/temp/advancedsearch/refresh\" selectionStateTitle=\"$:/temp/advancedsearch/selected-item\" type=\"search\"\n\t\ttag=\"input\" focus={{$:/config/Search/AutoFocus}} configTiddlerFilter=\"[[$:/core/ui/AdvancedSearch/Shadows]]\"\n\t\tinputCancelActions=<<cancel-search-actions>> inputAcceptActions=<<input-accept-actions>> \n\t\tinputAcceptVariantActions=<<input-accept-variant-actions>> filterMinLength={{$:/config/Search/MinLength}}/>\n</$keyboard>\n</$keyboard>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<<cancel-search-actions>>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[all[shadows]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]]\"/>\"\"\">\n\n<div class=\"tc-search-results\">\n\n<<lingo Shadows/Matches>>\n\n<$list filter=\"[all[shadows]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]]\">\n<span class={{{[<currentTiddler>addsuffix[-primaryList]] -[[$:/temp/advancedsearch/selected-item]get[text]] +[then[]else[tc-list-item-selected]] }}}>\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</span>\n</$list>\n\n</div>\n\n</$set>\n\n</$list>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Standard": {
"title": "$:/core/ui/AdvancedSearch/Standard",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Standard/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n\\define set-next-input-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab--1498284803\" tag=\"$:/tags/AdvancedSearch\" beforeafter=\"$beforeafter$\" defaultState=\"$:/core/ui/AdvancedSearch/System\" actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define next-search-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab/search-results/advancedsearch\" tag=\"$:/tags/SearchResults\" beforeafter=\"$beforeafter$\" defaultState={{$:/config/SearchResults/Default}} actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/standard/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define cancel-search-actions() <$list filter=\"[{$:/temp/advancedsearch}!match{$:/temp/advancedsearch/input}]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[[$:/temp/advancedsearch]] [[$:/temp/advancedsearch/input]] [[$:/temp/advancedsearch/selected-item]]\" />\"\"\"><$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" text={{$:/temp/advancedsearch}}/><$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/></$list><$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\".tc-advanced-search input\"\"\"/>\n\n\\define input-accept-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\"\"\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\n\n\\define input-accept-variant-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\"\"\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\n\n<<lingo Standard/Hint>>\n\n<div class=\"tc-search\">\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">>>\n<$keyboard key=\"shift-alt-Right\" actions=<<next-search-tab>>>\n<$keyboard key=\"shift-alt-Left\" actions=<<next-search-tab \"before\">>>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=\"$:/temp/advancedsearch/input\" storeTitle=\"$:/temp/advancedsearch\"\n\t\trefreshTitle=\"$:/temp/advancedsearch/refresh\" selectionStateTitle=\"$:/temp/advancedsearch/selected-item\" type=\"search\"\n\t\ttag=\"input\" focus={{$:/config/Search/AutoFocus}} inputCancelActions=<<cancel-search-actions>> \n\t\tinputAcceptActions=<<input-accept-actions>> inputAcceptVariantActions=<<input-accept-variant-actions>> \n\t\tconfigTiddlerFilter=\"[[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}]\"\n\t\tfilterMinLength={{$:/config/Search/MinLength}}/>\n</$keyboard>\n</$keyboard>\n</$keyboard>\n</$keyboard>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<<cancel-search-actions>>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$vars userInput={{{ [[$:/temp/advancedsearch]get[text]] }}} configTiddler={{{ [[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}] }}} searchListState=\"$:/temp/advancedsearch/selected-item\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude/>\n</$list>\n\"\"\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}} actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/standard/currentTab\" text=<<currentTab>>/>\"\"\" explicitState=\"$:/state/tab/search-results/advancedsearch\" />\n</$list>\n</$vars>\n</$list>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/System": {
"title": "$:/core/ui/AdvancedSearch/System",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/System/Caption}}",
"first-search-filter": "[is[system]search<userInput>sort[title]limit[250]] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]] -[[$:/temp/advancedsearch/selected-item]]",
"text": "\\define lingo-base() $:/language/Search/\n\\define set-next-input-tab(beforeafter:\"after\",stateTitle,tag,defaultState,currentTabTiddler) <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab--1498284803\" tag=\"$:/tags/AdvancedSearch\" beforeafter=\"$beforeafter$\" defaultState=\"$:/core/ui/AdvancedSearch/System\" actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define cancel-search-actions() <$list filter=\"[{$:/temp/advancedsearch}!match{$:/temp/advancedsearch/input}]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[[$:/temp/advancedsearch]] [[$:/temp/advancedsearch/input]] [[$:/temp/advancedsearch/selected-item]]\" />\"\"\"><$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" text={{$:/temp/advancedsearch}}/><$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/></$list><$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\".tc-advanced-search input\"\"\"/>\n\n\\define input-accept-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\"\"\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\n\n\\define input-accept-variant-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\"\"\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\n\n<<lingo System/Hint>>\n\n<div class=\"tc-search\">\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">>>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=\"$:/temp/advancedsearch/input\" storeTitle=\"$:/temp/advancedsearch\"\n\t\trefreshTitle=\"$:/temp/advancedsearch/refresh\" selectionStateTitle=\"$:/temp/advancedsearch/selected-item\"\n\t\ttype=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}} configTiddlerFilter=\"[[$:/core/ui/AdvancedSearch/System]]\"\n\t\tinputCancelActions=<<cancel-search-actions>> inputAcceptActions=<<input-accept-actions>> \n\t\tinputAcceptVariantActions=<<input-accept-variant-actions>> filterMinLength={{$:/config/Search/MinLength}}/>\n</$keyboard>\n</$keyboard>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<<cancel-search-actions>>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[is[system]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]] -[[$:/temp/advancedsearch/selected-item]]\"/>\"\"\">\n\n<div class=\"tc-search-results\">\n\n<<lingo System/Matches>>\n\n<$list filter=\"[is[system]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]] -[[$:/temp/advancedsearch/selected-item]]\">\n<span class={{{[<currentTiddler>addsuffix[-primaryList]] -[[$:/temp/advancedsearch/selected-item]get[text]] +[then[]else[tc-list-item-selected]] }}}>\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</span>\n</$list>\n\n</div>\n\n</$set>\n\n</$list>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
},
"$:/AdvancedSearch": {
"title": "$:/AdvancedSearch",
"icon": "$:/core/images/advanced-search-button",
"color": "#bbb",
"text": "<div class=\"tc-advanced-search\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch]!has[draft.of]]\" default=\"$:/core/ui/AdvancedSearch/System\" actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/currentTab\" text=<<currentTab>>/>\"\"\" explicitState=\"$:/state/tab--1498284803\"/>\n</div>\n"
},
"$:/core/ui/AlertTemplate": {
"title": "$:/core/ui/AlertTemplate",
"text": "<div class=\"tc-alert\">\n<div class=\"tc-alert-toolbar\">\n<$button class=\"tc-btn-invisible\"><$action-deletetiddler $tiddler=<<currentTiddler>>/>{{$:/core/images/cancel-button}}</$button>\n</div>\n<div class=\"tc-alert-subtitle\">\n<$wikify name=\"format\" text=<<lingo Tiddler/DateFormat>>>\n<$view field=\"component\"/> - <$view field=\"modified\" format=\"date\" template=<<format>>/> <$reveal type=\"nomatch\" state=\"!!count\" text=\"\"><span class=\"tc-alert-highlight\">({{$:/language/Count}}: <$view field=\"count\"/>)</span></$reveal>\n</$wikify>\n</div>\n<div class=\"tc-alert-body\">\n\n<$transclude/>\n\n</div>\n</div>\n"
},
"$:/core/ui/BinaryWarning": {
"title": "$:/core/ui/BinaryWarning",
"text": "\\define lingo-base() $:/language/BinaryWarning/\n<<lingo Prompt>>\n"
},
"$:/core/ui/Components/plugin-info": {
"title": "$:/core/ui/Components/plugin-info",
"text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define popup-state-macro()\n$(qualified-state)$-$(currentTiddler)$\n\\end\n\n\\define tabs-state-macro()\n$(popup-state)$-$(pluginInfoType)$\n\\end\n\n\\define plugin-icon-title()\n$(currentTiddler)$/icon\n\\end\n\n\\define plugin-disable-title()\n$:/config/Plugins/Disabled/$(currentTiddler)$\n\\end\n\n\\define plugin-table-body(type,disabledMessage,default-popup-state)\n<div class=\"tc-plugin-info-chunk tc-plugin-info-toggle\">\n<$reveal type=\"nomatch\" state=<<popup-state>> text=\"yes\" default=\"\"\"$default-popup-state$\"\"\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"yes\">\n{{$:/core/images/chevron-right}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<popup-state>> text=\"yes\" default=\"\"\"$default-popup-state$\"\"\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"no\">\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-icon\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<plugin-icon-title>>>\n<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\n</$transclude>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-description\">\n<h1>\n''<$text text={{{ [<currentTiddler>get[name]] ~[<currentTiddler>split[/]last[1]] }}}/>'': <$view field=\"description\"><$view field=\"title\"/></$view> $disabledMessage$\n</h1>\n<h2>\n<$view field=\"title\"/>\n</h2>\n<h2>\n<div><em><$view field=\"version\"/></em></div>\n</h2>\n</div>\n\\end\n\n\\define plugin-info(type,default-popup-state)\n<$set name=\"popup-state\" value=<<popup-state-macro>>>\n<$reveal type=\"nomatch\" state=<<plugin-disable-title>> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info\">\n<<plugin-table-body type:\"$type$\" default-popup-state:\"\"\"$default-popup-state$\"\"\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" state=<<plugin-disable-title>> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info tc-plugin-info-disabled\">\n<<plugin-table-body type:\"$type$\" default-popup-state:\"\"\"$default-popup-state$\"\"\" disabledMessage:\"<$macrocall $name='lingo' title='Disabled/Status'/>\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>> default=\"\"\"$default-popup-state$\"\"\">\n<div class=\"tc-plugin-info-dropdown\">\n<div class=\"tc-plugin-info-dropdown-body\">\n<$list filter=\"[all[current]] -[[$:/core]]\">\n<div style=\"float:right;\">\n<$reveal type=\"nomatch\" state=<<plugin-disable-title>> text=\"yes\">\n<$button set=<<plugin-disable-title>> setTo=\"yes\" tooltip={{$:/language/ControlPanel/Plugins/Disable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Disable/Caption}}>\n<<lingo Disable/Caption>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<plugin-disable-title>> text=\"yes\">\n<$button set=<<plugin-disable-title>> setTo=\"no\" tooltip={{$:/language/ControlPanel/Plugins/Enable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Enable/Caption}}>\n<<lingo Enable/Caption>>\n</$button>\n</$reveal>\n</div>\n</$list>\n<$set name=\"tabsList\" filter=\"[<currentTiddler>list[]] contents\">\n<$macrocall $name=\"tabs\" state=<<tabs-state-macro>> tabsList=<<tabsList>> default={{{ [enlist<tabsList>] }}} template=\"$:/core/ui/PluginInfo\"/>\n</$set>\n</div>\n</div>\n</$reveal>\n</$set>\n\\end\n\n<$macrocall $name=\"plugin-info\" type=<<plugin-type>> default-popup-state=<<default-popup-state>>/>\n"
},
"$:/core/ui/Components/tag-link": {
"title": "$:/core/ui/Components/tag-link",
"text": "<$link>\n<$set name=\"backgroundColor\" value={{!!color}}>\n<span style=<<tag-styles>> class=\"tc-tag-label\">\n<$view field=\"title\" format=\"text\"/>\n</span>\n</$set>\n</$link>"
},
"$:/core/ui/ControlPanel/Advanced": {
"title": "$:/core/ui/ControlPanel/Advanced",
"tags": "$:/tags/ControlPanel/Info",
"caption": "{{$:/language/ControlPanel/Advanced/Caption}}",
"text": "{{$:/language/ControlPanel/Advanced/Hint}}\n\n<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Advanced]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/TiddlerFields\" explicitState=\"$:/state/tab--959111941\"/>\n</div>\n"
},
"$:/core/ui/ControlPanel/Appearance": {
"title": "$:/core/ui/ControlPanel/Appearance",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Appearance/Caption}}",
"text": "{{$:/language/ControlPanel/Appearance/Hint}}\n\n<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Appearance]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/Theme\" explicitState=\"$:/state/tab--1963855381\"/>\n</div>\n"
},
"$:/core/ui/ControlPanel/Basics": {
"title": "$:/core/ui/ControlPanel/Basics",
"tags": "$:/tags/ControlPanel/Info",
"caption": "{{$:/language/ControlPanel/Basics/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Basics/\n\n\\define show-filter-count(filter)\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $value=\"\"\"$filter$\"\"\"/>\n<$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" $value=\"\"\"$filter$\"\"\"/>\n<$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/>\n<$action-setfield $tiddler=\"$:/state/tab--1498284803\" $value=\"$:/core/ui/AdvancedSearch/Filter\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=\".tc-advanced-search input\"/>\n''<$count filter=\"\"\"$filter$\"\"\"/>''\n{{$:/core/images/advanced-search-button}}\n</$button>\n\\end\n\n|<<lingo Version/Prompt>> |''<<version>>'' |\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/status/UserName\"><<lingo Username/Prompt>></$link> |<$edit-text tiddler=\"$:/status/UserName\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/AnimationDuration\"><<lingo AnimDuration/Prompt>></$link> |<$edit-text tiddler=\"$:/config/AnimationDuration\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\" class=\"tc-edit-texteditor\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n|<$link to=\"$:/language/DefaultNewTiddlerTitle\"><<lingo NewTiddler/Title/Prompt>></$link> |<$edit-text tiddler=\"$:/language/DefaultNewTiddlerTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/NewJournal/Title\"><<lingo NewJournal/Title/Prompt>></$link> |<$edit-text tiddler=\"$:/config/NewJournal/Title\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/NewJournal/Text\"><<lingo NewJournal/Text/Prompt>></$link> |<$edit tiddler=\"$:/config/NewJournal/Text\" tag=\"textarea\" class=\"tc-edit-texteditor\" default=\"\"/> |\n|<$link to=\"$:/config/NewTiddler/Tags\"><<lingo NewTiddler/Tags/Prompt>></$link> |<$vars currentTiddler=\"$:/config/NewTiddler/Tags\" tagField=\"text\">{{||$:/core/ui/EditTemplate/tags}}<$list filter=\"[<currentTiddler>tags[]] +[limit[1]]\" variable=\"ignore\"><$button tooltip={{$:/language/ControlPanel/Basics/RemoveTags/Hint}}><<lingo RemoveTags>><$action-listops $tiddler=<<currentTiddler>> $field=\"text\" $subfilter={{{ [<currentTiddler>get[tags]] }}}/><$action-setfield $tiddler=<<currentTiddler>> tags=\"\"/></$button></$list></$vars> |\n|<$link to=\"$:/config/NewJournal/Tags\"><<lingo NewJournal/Tags/Prompt>></$link> |<$vars currentTiddler=\"$:/config/NewJournal/Tags\" tagField=\"text\">{{||$:/core/ui/EditTemplate/tags}}<$list filter=\"[<currentTiddler>tags[]] +[limit[1]]\" variable=\"ignore\"><$button tooltip={{$:/language/ControlPanel/Basics/RemoveTags/Hint}}><<lingo RemoveTags>><$action-listops $tiddler=<<currentTiddler>> $field=\"text\" $subfilter={{{ [<currentTiddler>get[tags]] }}}/><$action-setfield $tiddler=<<currentTiddler>> tags=\"\"/></$button></$list></$vars> |\n|<$link to=\"$:/config/AutoFocus\"><<lingo AutoFocus/Prompt>></$link> |{{$:/snippets/minifocusswitcher}} |\n|<<lingo Language/Prompt>> |{{$:/snippets/minilanguageswitcher}} |\n|<<lingo Tiddlers/Prompt>> |<<show-filter-count \"[!is[system]sort[title]]\">> |\n|<<lingo Tags/Prompt>> |<<show-filter-count \"[tags[]sort[title]]\">> |\n|<<lingo SystemTiddlers/Prompt>> |<<show-filter-count \"[is[system]sort[title]]\">> |\n|<<lingo ShadowTiddlers/Prompt>> |<<show-filter-count \"[all[shadows]sort[title]]\">> |\n|<<lingo OverriddenShadowTiddlers/Prompt>> |<<show-filter-count \"[is[tiddler]is[shadow]sort[title]]\">> |\n"
},
"$:/core/ui/ControlPanel/EditorTypes": {
"title": "$:/core/ui/ControlPanel/EditorTypes",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/EditorTypes/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/EditorTypes/\n\n<<lingo Hint>>\n\n<table>\n<tbody>\n<tr>\n<th><<lingo Type/Caption>></th>\n<th><<lingo Editor/Caption>></th>\n</tr>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/config/EditorTypeMappings/]sort[title]]\">\n<tr>\n<td>\n<$link>\n<$list filter=\"[all[current]removeprefix[$:/config/EditorTypeMappings/]]\">\n<$text text={{!!title}}/>\n</$list>\n</$link>\n</td>\n<td>\n<$view field=\"text\"/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ControlPanel/Info": {
"title": "$:/core/ui/ControlPanel/Info",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Info/Caption}}",
"text": "{{$:/language/ControlPanel/Info/Hint}}\n\n<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Info]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/Basics\" explicitState=\"$:/state/tab--2112689675\"/>\n</div>\n"
},
"$:/core/ui/ControlPanel/KeyboardShortcuts": {
"title": "$:/core/ui/ControlPanel/KeyboardShortcuts",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/KeyboardShortcuts/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/KeyboardShortcuts/\n\n\\define new-shortcut(title)\n<div class=\"tc-dropdown-item-plain\">\n<$edit-shortcut tiddler=\"$title$\" placeholder={{$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt}} focus=\"true\" style=\"width:auto;\"/> <$button>\n<<lingo Add/Caption>>\n<$action-listops\n\t$tiddler=\"$(shortcutTitle)$\"\n\t$field=\"text\"\n\t$subfilter=\"[{$title$}]\"\n/>\n<$action-deletetiddler\n\t$tiddler=\"$title$\"\n/>\n</$button>\n</div>\n\\end\n\n\\define shortcut-list-item(caption)\n<td>\n</td>\n<td style=\"text-align:right;font-size:0.7em;\">\n<<lingo Platform/$caption$>>\n</td>\n<td>\n<div style=\"position:relative;\">\n<$button popup=<<qualify \"$:/state/dropdown/$(shortcutTitle)$\">> class=\"tc-btn-invisible\">\n{{$:/core/images/edit-button}}\n</$button>\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{$(shortcutTitle)$}} prefix=\"<kbd>\" separator=\"</kbd> <kbd>\" suffix=\"</kbd>\"/>\n\n<$reveal state=<<qualify \"$:/state/dropdown/$(shortcutTitle)$\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown tc-popup-keep\">\n<$list filter=\"[list[$(shortcutTitle)$!!text]sort[title]]\" variable=\"shortcut\" emptyMessage=\"\"\"\n<div class=\"tc-dropdown-item-plain\">\n//<<lingo NoShortcuts/Caption>>//\n</div>\n\"\"\">\n<div class=\"tc-dropdown-item-plain\">\n<$button class=\"tc-btn-invisible\" tooltip={{$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint}}>\n<$action-listops\n\t$tiddler=\"$(shortcutTitle)$\"\n\t$field=\"text\"\n\t$subfilter=\"+[remove<shortcut>]\"\n/>\n<small>{{$:/core/images/close-button}}</small>\n</$button>\n<kbd>\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts=<<shortcut>>/>\n</kbd>\n</div>\n</$list>\n<hr/>\n<$macrocall $name=\"new-shortcut\" title=<<qualify \"$:/state/new-shortcut/$(shortcutTitle)$\">>/>\n</div>\n</div>\n</$reveal>\n</div>\n</td>\n\\end\n\n\\define shortcut-list(caption,prefix)\n<tr>\n<$list filter=\"[[$prefix$$(shortcutName)$]]\" variable=\"shortcutTitle\">\n<<shortcut-list-item \"$caption$\">>\n</$list>\n</tr>\n\\end\n\n\\define shortcut-editor()\n<<shortcut-list \"All\" \"$:/config/shortcuts/\">>\n<<shortcut-list \"Mac\" \"$:/config/shortcuts-mac/\">>\n<<shortcut-list \"NonMac\" \"$:/config/shortcuts-not-mac/\">>\n<<shortcut-list \"Linux\" \"$:/config/shortcuts-linux/\">>\n<<shortcut-list \"NonLinux\" \"$:/config/shortcuts-not-linux/\">>\n<<shortcut-list \"Windows\" \"$:/config/shortcuts-windows/\">>\n<<shortcut-list \"NonWindows\" \"$:/config/shortcuts-not-windows/\">>\n\\end\n\n\\define shortcut-preview()\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{$(shortcutPrefix)$$(shortcutName)$}} prefix=\"<kbd>\" separator=\"</kbd> <kbd>\" suffix=\"</kbd>\"/>\n\\end\n\n\\define shortcut-item-inner()\n<tr>\n<td>\n<$reveal type=\"nomatch\" state=<<dropdownStateTitle>> text=\"open\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield\n\t$tiddler=<<dropdownStateTitle>>\n\t$value=\"open\"\n/>\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<dropdownStateTitle>> text=\"open\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield\n\t$tiddler=<<dropdownStateTitle>>\n\t$value=\"close\"\n/>\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n''<$text text=<<shortcutName>>/>''\n</td>\n<td>\n<$transclude tiddler=\"$:/config/ShortcutInfo/$(shortcutName)$\"/>\n</td>\n<td>\n<$list filter=\"$:/config/shortcuts/ $:/config/shortcuts-mac/ $:/config/shortcuts-not-mac/ $:/config/shortcuts-linux/ $:/config/shortcuts-not-linux/ $:/config/shortcuts-windows/ $:/config/shortcuts-not-windows/\" variable=\"shortcutPrefix\">\n<<shortcut-preview>>\n</$list>\n</td>\n</tr>\n<$set name=\"dropdownState\" value={{$(dropdownStateTitle)$}}>\n<$list filter=\"[<dropdownState>match[open]]\" variable=\"listItem\">\n<<shortcut-editor>>\n</$list>\n</$set>\n\\end\n\n\\define shortcut-item()\n<$set name=\"dropdownStateTitle\" value=<<qualify \"$:/state/dropdown/keyboardshortcut/$(shortcutName)$\">>>\n<<shortcut-item-inner>>\n</$set>\n\\end\n\n<table>\n<tbody>\n<$list filter=\"[all[shadows+tiddlers]removeprefix[$:/config/ShortcutInfo/]]\" variable=\"shortcutName\">\n<<shortcut-item>>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ControlPanel/LoadedModules": {
"title": "$:/core/ui/ControlPanel/LoadedModules",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/LoadedModules/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n<<lingo LoadedModules/Hint>>\n\n{{$:/snippets/modules}}\n"
},
"$:/core/ui/ControlPanel/Modals/AddPlugins": {
"title": "$:/core/ui/ControlPanel/Modals/AddPlugins",
"subtitle": "{{$:/core/images/download-button}} {{$:/language/ControlPanel/Plugins/Add/Caption}}",
"text": "\\define install-plugin-actions()\n<$action-sendmessage $message=\"tm-load-plugin-from-library\" url={{!!url}} title={{$(assetInfo)$!!original-title}}/>\n<$set name=\"url\" value={{!!url}}>\n<$set name=\"currentTiddler\" value=<<assetInfo>>>\n<$list filter=\"[enlist{!!dependents}] [{!!parent-plugin}] +[sort[name]]\" variable=\"dependency\">\n<$action-sendmessage $message=\"tm-load-plugin-from-library\" url=<<url>> title=<<dependency>>/>\n</$list>\n</$set>\n</$set>\n\\end\n\n\\define install-plugin-button()\n<div>\n<$set name=\"libraryVersion\" value={{{ [<assetInfo>get[version]] }}}>\n<$set name=\"installedVersion\" value={{{ [<assetInfo>get[original-title]get[version]] }}}>\n<$set name=\"reinstall-type\" value={{{ [<libraryVersion>compare:version:eq<installedVersion>then[tc-reinstall]] [<libraryVersion>compare:version:gt<installedVersion>then[tc-reinstall-upgrade]] [<libraryVersion>compare:version:lt<installedVersion>then[tc-reinstall-downgrade]] }}}>\n<$button actions=<<install-plugin-actions>> class={{{ [<assetInfo>get[original-title]has[version]then<reinstall-type>] tc-btn-invisible tc-install-plugin +[join[ ]] }}}>\n{{$:/core/images/download-button}}\n<$list filter=\"[<assetInfo>get[original-title]get[version]]\" variable=\"ignore\" emptyMessage=\"{{$:/language/ControlPanel/Plugins/Install/Caption}}\">\n<$list filter=\"[<libraryVersion>compare:version:gt<installedVersion>]\" variable=\"ignore\" emptyMessage=\"\"\"\n<$list filter=\"[<libraryVersion>compare:version:lt<installedVersion>]\" variable=\"ignore\" emptyMessage=\"{{$:/language/ControlPanel/Plugins/Reinstall/Caption}}\">\n{{$:/language/ControlPanel/Plugins/Downgrade/Caption}}\n</$list>\n\"\"\">\n{{$:/language/ControlPanel/Plugins/Update/Caption}}\n</$list>\n</$list>\n</$button>\n<div>\n</div>\n<$reveal stateTitle=<<assetInfo>> stateField=\"requires-reload\" type=\"match\" text=\"yes\">{{$:/language/ControlPanel/Plugins/PluginWillRequireReload}}</$reveal>\n</$set>\n</$set>\n</$set>\n</div>\n\\end\n\n\\define popup-state-macro()\n$:/state/add-plugin-info/$(connectionTiddler)$/$(assetInfo)$\n\\end\n\n\\define display-plugin-info(type)\n<$set name=\"popup-state\" value=<<popup-state-macro>>>\n<div class=\"tc-plugin-info\">\n<div class=\"tc-plugin-info-chunk tc-plugin-info-toggle\">\n<$reveal type=\"nomatch\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"yes\">\n{{$:/core/images/chevron-right}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"no\">\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-icon\">\n<$list filter=\"[<assetInfo>has[icon]]\" emptyMessage=\"\"\"<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\"\"\">\n<img src={{$(assetInfo)$!!icon}}/>\n</$list>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-description\">\n<h1><strong><$text text={{{ [<assetInfo>get[name]] ~[<assetInfo>get[original-title]split[/]last[1]] }}}/></strong>: <$view tiddler=<<assetInfo>> field=\"description\"/></h1>\n<h2><$view tiddler=<<assetInfo>> field=\"original-title\"/></h2>\n<div><em><$view tiddler=<<assetInfo>> field=\"version\"/></em></div>\n<$list filter=\"[<assetInfo>get[original-title]get[version]]\" variable=\"installedVersion\"><div><em>{{$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint}}</em></div></$list>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-buttons\">\n<<install-plugin-button>>\n</div>\n</div>\n<$set name=\"original-title\" value={{{ [<assetInfo>get[original-title]] }}}>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>>>\n<div class=\"tc-plugin-info-dropdown\">\n<$list filter=\"[enlist{!!dependents}] [<currentTiddler>get[parent-plugin]] +[limit[1]] ~[<assetInfo>get[original-title]!is[tiddler]]\" variable=\"ignore\">\n<div class=\"tc-plugin-info-dropdown-message\">\n<$list filter=\"[<assetInfo>get[original-title]!is[tiddler]]\">\n{{$:/language/ControlPanel/Plugins/NotInstalled/Hint}}\n</$list>\n<$set name=\"currentTiddler\" value=<<assetInfo>>>\n<$list filter=\"[enlist{!!dependents}] [<currentTiddler>get[parent-plugin]] +[limit[1]]\" variable=\"ignore\">\n<div>\n{{$:/language/ControlPanel/Plugins/AlsoRequires}}\n<$list filter=\"[enlist{!!dependents}] [{!!parent-plugin}] +[sort[name]]\" variable=\"dependency\">\n<$text text=<<dependency>>/>\n</$list>\n</div>\n</$list>\n</$set>\n</div>\n</$list>\n<div class=\"tc-plugin-info-dropdown-body\">\n<$transclude tiddler=<<assetInfo>> field=\"readme\" mode=\"block\"/>\n</div>\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>limit[1]]\" variable=\"ignore\">\n<div class=\"tc-plugin-info-sub-plugins\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>sort[name]]\" variable=\"assetInfo\">\n<<display-plugin-info \"$type$\">>\n</$list>\n</div>\n</$list>\n</div>\n</$reveal>\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>limit[1]]\" variable=\"ignore\">\n<$reveal type=\"nomatch\" text=\"yes\" state=<<popup-state>> tag=\"div\" class=\"tc-plugin-info-sub-plugin-indicator\">\n<$wikify name=\"count\" text=\"\"\"<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>]\"/>\"\"\">\n<$button class=\"tc-btn-invisible\" set=<<popup-state>> setTo=\"yes\">\n{{$:/language/ControlPanel/Plugins/SubPluginPrompt}}\n</$button>\n</$wikify>\n</$reveal>\n</$list>\n</$set>\n</$set>\n\\end\n\n\\define load-plugin-library-button()\n<$list filter=\"[<currentTiddler>get[enabled]else[yes]match[yes]]\" variable=\"ignore\">\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-load-plugin-library\" url={{!!url}} infoTitlePrefix=\"$:/temp/RemoteAssetInfo/\"/>\n{{$:/core/images/chevron-right}} {{$:/language/ControlPanel/Plugins/OpenPluginLibrary}}\n</$button>\n</$list>\n\\end\n\n\\define display-server-assets(type)\n{{$:/language/Search/Search}}: <$edit-text tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" default=\"\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n<div class=\"tc-plugin-library-listing\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]search:author,description,original-title,readme,title{$:/temp/RemoteAssetSearch/$(currentTiddler)$}sort[name]]\" variable=\"assetInfo\">\n<$list filter=\"[[$:/temp/RemoteAssetSearch/$(currentTiddler)$]has[text]] ~[<assetInfo>!has[parent-plugin]]\" variable=\"ignore\"><!-- Hide sub-plugins if we're not searching -->\n<<display-plugin-info \"$type$\">>\n</$list>\n</$list>\n</div>\n\\end\n\n\\define display-server-connection()\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/ServerConnection]suffix{!!url}]\" variable=\"connectionTiddler\" emptyMessage=<<load-plugin-library-button>>>\n\n<$set name=\"transclusion\" value=<<connectionTiddler>>>\n\n<<tabs \"[[$:/core/ui/ControlPanel/Plugins/Add/Updates]] [[$:/core/ui/ControlPanel/Plugins/Add/Plugins]] [[$:/core/ui/ControlPanel/Plugins/Add/Themes]] [[$:/core/ui/ControlPanel/Plugins/Add/Languages]]\" \"$:/core/ui/ControlPanel/Plugins/Add/Plugins\">>\n\n</$set>\n\n</$list>\n\\end\n\n\\define close-library-button()\n<$reveal type='nomatch' state='$:/temp/ServerConnection/$(PluginLibraryURL)$' text=''>\n<$button class='tc-btn-big-green'>\n<$action-sendmessage $message=\"tm-unload-plugin-library\" url={{!!url}}/>\n{{$:/core/images/chevron-left}} {{$:/language/ControlPanel/Plugins/ClosePluginLibrary}}\n<$action-deletetiddler $filter=\"[prefix[$:/temp/ServerConnection/$(PluginLibraryURL)$]][prefix[$:/temp/RemoteAssetInfo/$(PluginLibraryURL)$]]\"/>\n</$button>\n</$reveal>\n\\end\n\n\\define plugin-library-listing()\n<div class=\"tc-tab-set\">\n<$set name=\"defaultTab\" value={{{ [all[tiddlers+shadows]tag[$:/tags/PluginLibrary]] }}}>\n<div class=\"tc-tab-buttons\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/PluginLibrary]]\">\n<$button set=<<qualify \"$:/state/addplugins/tab\">> setTo=<<currentTiddler>> default=<<defaultTab>> selectedClass=\"tc-tab-selected\">\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude field=\"caption\"/>\n</$set>\n</$button>\n</$list>\n</div>\n<div class=\"tc-tab-divider\"/>\n<div class=\"tc-tab-content\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/PluginLibrary]]\">\n<$reveal type=\"match\" state=<<qualify \"$:/state/addplugins/tab\">> text=<<currentTiddler>> default=<<defaultTab>>>\n<h2><$link><$transclude field=\"caption\"><$view field=\"title\"/></$transclude></$link></h2>\n//<$view field=\"url\"/>//\n<$transclude mode=\"block\"/>\n<$set name=PluginLibraryURL value={{!!url}}>\n<<close-library-button>>\n</$set>\n<<display-server-connection>>\n</$reveal>\n</$list>\n</div>\n</$set>\n</div>\n\\end\n\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<div>\n<<plugin-library-listing>>\n</div>\n"
},
"$:/core/ui/ControlPanel/Palette": {
"title": "$:/core/ui/ControlPanel/Palette",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Palette/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Palette/\n\n{{$:/snippets/paletteswitcher}}\n\n<$reveal type=\"nomatch\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"yes\"><<lingo ShowEditor/Caption>></$button>\n\n</$reveal>\n\n<$reveal type=\"match\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"no\"><<lingo HideEditor/Caption>></$button>\n{{$:/PaletteManager}}\n\n</$reveal>\n\n"
},
"$:/core/ui/ControlPanel/Parsing": {
"title": "$:/core/ui/ControlPanel/Parsing",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/Parsing/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Parsing/\n\n\\define toggle(Type)\n<$checkbox\ntiddler=\"\"\"$:/config/WikiParserRules/$Type$/$(rule)$\"\"\"\nfield=\"text\"\nchecked=\"enable\"\nunchecked=\"disable\"\ndefault=\"enable\">\n<<rule>>\n</$checkbox>\n\\end\n\n\\define rules(type,Type)\n<$list filter=\"[wikiparserrules[$type$]]\" variable=\"rule\">\n<dd><<toggle $Type$>></dd>\n</$list>\n\\end\n\n<<lingo Hint>>\n\n<dl>\n<dt><<lingo Pragma/Caption>></dt>\n<<rules pragma Pragma>>\n<dt><<lingo Inline/Caption>></dt>\n<<rules inline Inline>>\n<dt><<lingo Block/Caption>></dt>\n<<rules block Block>>\n</dl>"
},
"$:/core/ui/ControlPanel/Plugins/Add/Languages": {
"title": "$:/core/ui/ControlPanel/Plugins/Add/Languages",
"caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[language]]\"/>)",
"text": "<<display-server-assets language>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Add/Plugins": {
"title": "$:/core/ui/ControlPanel/Plugins/Add/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[plugin]]\"/>)",
"text": "<<display-server-assets plugin>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Add/Themes": {
"title": "$:/core/ui/ControlPanel/Plugins/Add/Themes",
"caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[theme]]\"/>)",
"text": "<<display-server-assets theme>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Add/Updates": {
"title": "$:/core/ui/ControlPanel/Plugins/Add/Updates",
"caption": "<$importvariables filter=\"$:/core/ui/ControlPanel/Plugins/Add/Updates\">{{$:/language/ControlPanel/Plugins/Updates/Caption}} (<<update-count>>)</$importvariables>",
"text": "\\define each-updateable-plugin(body)\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}sort[title]]\" variable=\"assetInfo\">\n<$set name=\"libraryVersion\" value={{{ [<assetInfo>get[version]] }}}>\n<$list filter=\"[<assetInfo>get[original-title]has[version]!version<libraryVersion>]\" variable=\"ignore\">\n<$set name=\"installedVersion\" value={{{ [<assetInfo>get[original-title]get[version]] }}}>\n<$list filter=\"[<installedversion>!match<libraryVersion>]\" variable=\"ignore\">\n$body$\n</$list>\n</$set>\n</$list>\n</$set>\n</$list>\n\\end\n\n\\define update-all-actions()\n<$macrocall $name=\"each-updateable-plugin\" body=\"\"\"\n<<install-plugin-actions>>\n\"\"\"/>\n\\end\n\n\\define update-count()\n<$wikify name=\"count-filter\" text=<<each-updateable-plugin \"[[<$text text=<<assetInfo>>/>]]\">>><$count filter=<<count-filter>>/></$wikify>\n\\end\n\n<$button actions=<<update-all-actions>> class=\"tc-btn-invisible tc-install-plugin tc-reinstall-upgrade\">\n{{$:/core/images/download-button}} {{||$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption}}\n</$button>\n\n<div class=\"tc-plugin-library-listing\">\n<$macrocall $name=\"each-updateable-plugin\" body=\"\"\"\n<$macrocall $name=\"display-plugin-info\" type={{{ [<assetInfo>get[original-plugin-type]] }}}/>\n\"\"\"/>\n</div>\n"
},
"$:/core/ui/ControlPanel/Plugins/AddPlugins": {
"title": "$:/core/ui/ControlPanel/Plugins/AddPlugins",
"text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n<$button message=\"tm-modal\" param=\"$:/core/ui/ControlPanel/Modals/AddPlugins\" tooltip={{$:/language/ControlPanel/Plugins/Add/Hint}} class=\"tc-btn-big-green tc-primary-btn\">\n{{$:/core/images/download-button}} <<lingo Add/Caption>>\n</$button>\n"
},
"$:/core/ui/ControlPanel/Plugins/Installed/Languages": {
"title": "$:/core/ui/ControlPanel/Plugins/Installed/Languages",
"caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[language]]\"/>)",
"text": "<<plugin-table language>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Installed/Plugins": {
"title": "$:/core/ui/ControlPanel/Plugins/Installed/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[plugin]]\"/>)",
"text": "<<plugin-table plugin>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Installed/Themes": {
"title": "$:/core/ui/ControlPanel/Plugins/Installed/Themes",
"caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[theme]]\"/>)",
"text": "<<plugin-table theme>>\n"
},
"$:/core/ui/ControlPanel/Plugins": {
"title": "$:/core/ui/ControlPanel/Plugins",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Plugins/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define plugin-table(type)\n<$set name=\"plugin-type\" value=\"\"\"$type$\"\"\">\n<$set name=\"qualified-state\" value=<<qualify \"$:/state/plugin-info\">>>\n<$list filter=\"[!has[draft.of]plugin-type[$type$]sort[name]]\" emptyMessage=<<lingo \"Empty/Hint\">> template=\"$:/core/ui/Components/plugin-info\"/>\n</$set>\n</$set>\n\\end\n\n{{$:/core/ui/ControlPanel/Plugins/AddPlugins}}\n\n<<lingo Installed/Hint>>\n\n<$macrocall $name=\"tabs\" tabsList=\"[[$:/core/ui/ControlPanel/Plugins/Installed/Plugins]] [[$:/core/ui/ControlPanel/Plugins/Installed/Themes]] [[$:/core/ui/ControlPanel/Plugins/Installed/Languages]]\" default=\"$:/core/ui/ControlPanel/Plugins/Installed/Plugins\" explicitState=\"$:/state/tab--86143343\"/>\n"
},
"$:/core/ui/ControlPanel/Saving/DownloadSaver": {
"title": "$:/core/ui/ControlPanel/Saving/DownloadSaver",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/DownloadSaver/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/DownloadSaver/\n\n<<lingo Hint>>\n\n!! <$link to=\"$:/config/DownloadSaver/AutoSave\"><<lingo AutoSave/Hint>></$link>\n\n<$checkbox tiddler=\"$:/config/DownloadSaver/AutoSave\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <<lingo AutoSave/Description>> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Saving/General": {
"title": "$:/core/ui/ControlPanel/Saving/General",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/General/Caption}}",
"list-before": "",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n{{$:/language/ControlPanel/Saving/General/Hint}}\n\n!! <$link to=\"$:/config/AutoSave\"><<lingo AutoSave/Caption>></$link>\n\n<<lingo AutoSave/Hint>>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"yes\"> <<lingo AutoSave/Enabled/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"no\"> <<lingo AutoSave/Disabled/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Saving/GitHub": {
"title": "$:/core/ui/ControlPanel/Saving/GitHub",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/GitService/GitHub/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\n\\define service-name() ~GitHub\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/GitHub/Username\" default=\"\" tag=\"input\"/> |\n|<<lingo GitHub/Password>> |<$password name=\"github\"/> |\n|<<lingo Repo>> |<$edit-text tiddler=\"$:/GitHub/Repo\" default=\"\" tag=\"input\"/> |\n|<<lingo Branch>> |<$edit-text tiddler=\"$:/GitHub/Branch\" default=\"master\" tag=\"input\"/> |\n|<<lingo Path>> |<$edit-text tiddler=\"$:/GitHub/Path\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/GitHub/Filename\" default=\"\" tag=\"input\"/> |\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/GitHub/ServerURL\" default=\"https://api.github.com\" tag=\"input\"/> |"
},
"$:/core/ui/ControlPanel/Saving/GitLab": {
"title": "$:/core/ui/ControlPanel/Saving/GitLab",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/GitService/GitLab/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\n\\define service-name() ~GitLab\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/GitLab/Username\" default=\"\" tag=\"input\"/> |\n|<<lingo GitLab/Password>> |<$password name=\"gitlab\"/> |\n|<<lingo Repo>> |<$edit-text tiddler=\"$:/GitLab/Repo\" default=\"\" tag=\"input\"/> |\n|<<lingo Branch>> |<$edit-text tiddler=\"$:/GitLab/Branch\" default=\"master\" tag=\"input\"/> |\n|<<lingo Path>> |<$edit-text tiddler=\"$:/GitLab/Path\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/GitLab/Filename\" default=\"\" tag=\"input\"/> |\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/GitLab/ServerURL\" default=\"https://gitlab.com/api/v4\" tag=\"input\"/> |"
},
"$:/core/ui/ControlPanel/Saving/TiddlySpot": {
"title": "$:/core/ui/ControlPanel/Saving/TiddlySpot",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/TiddlySpot/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/TiddlySpot/\n\n\\define siteURL(path)\nhttp://$(userName)$.tiddlyspot.com/$path$/\n\\end\n\\define siteLink(path)\n<$reveal type=\"nomatch\" state=\"$:/UploadName\" text=\"\">\n<$set name=\"userName\" value={{$:/UploadName}}>\n<$reveal type=\"match\" state=\"$:/UploadURL\" text=\"\">\n<<siteURL $path$>>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/UploadURL\" text=\"\">\n<$macrocall $name=resolvePath source={{$:/UploadBackupDir}} root={{$:/UploadURL}}>>\n</$reveal>\n</$set>\n</$reveal>\n\\end\n\n<div class=\"tc-message-box\">\n\n<<lingo ReadOnly>>\n\n</div>\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/UploadName\" default=\"\" tag=\"input\"/> |\n|<<lingo Password>> |<$password name=\"upload\"/> |\n|<<lingo Backups>> |<<siteLink backup>> |\n|<<lingo ControlPanel>> |<<siteLink controlpanel>> |\n\n''<<lingo Advanced/Heading>>''\n\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/UploadURL\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/UploadFilename\" default=\"index.html\" tag=\"input\"/> |\n|<<lingo UploadDir>> |<$edit-text tiddler=\"$:/UploadDir\" default=\".\" tag=\"input\"/> |\n|<<lingo BackupDir>> |<$edit-text tiddler=\"$:/UploadBackupDir\" default=\".\" tag=\"input\"/> |\n\n<<lingo TiddlySpot/Hint>>\n"
},
"$:/core/ui/ControlPanel/Saving/Gitea": {
"title": "$:/core/ui/ControlPanel/Saving/Gitea",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/GitService/Gitea/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\n\\define service-name() ~Gitea\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/Gitea/Username\" default=\"\" tag=\"input\"/> |\n|<<lingo Gitea/Password>> |<$password name=\"Gitea\"/> |\n|<<lingo Repo>> |<$edit-text tiddler=\"$:/Gitea/Repo\" default=\"\" tag=\"input\"/> |\n|<<lingo Branch>> |<$edit-text tiddler=\"$:/Gitea/Branch\" default=\"master\" tag=\"input\"/> |\n|<<lingo Path>> |<$edit-text tiddler=\"$:/Gitea/Path\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/Gitea/Filename\" default=\"\" tag=\"input\"/> |\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/Gitea/ServerURL\" default=\"https://gitea/api/v1\" tag=\"input\"/> |\n"
},
"$:/core/ui/ControlPanel/Saving": {
"title": "$:/core/ui/ControlPanel/Saving",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Saving/Caption}}",
"text": "{{$:/language/ControlPanel/Saving/Hint}}\n\n<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Saving]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/Saving/General\" explicitState=\"$:/state/tab-2065006209\"/>\n</div>\n"
},
"$:/core/buttonstyles/Borderless": {
"title": "$:/core/buttonstyles/Borderless",
"tags": "$:/tags/ToolbarButtonStyle",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless}}",
"text": "tc-btn-invisible"
},
"$:/core/buttonstyles/Boxed": {
"title": "$:/core/buttonstyles/Boxed",
"tags": "$:/tags/ToolbarButtonStyle",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed}}",
"text": "tc-btn-boxed"
},
"$:/core/buttonstyles/Rounded": {
"title": "$:/core/buttonstyles/Rounded",
"tags": "$:/tags/ToolbarButtonStyle",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded}}",
"text": "tc-btn-rounded"
},
"$:/core/ui/ControlPanel/Settings/CamelCase": {
"title": "$:/core/ui/ControlPanel/Settings/CamelCase",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/CamelCase/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/CamelCase/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/WikiParserRules/Inline/wikilink\" field=\"text\" checked=\"enable\" unchecked=\"disable\" default=\"enable\"> <$link to=\"$:/config/WikiParserRules/Inline/wikilink\"><<lingo Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings/DefaultMoreSidebarTab": {
"title": "$:/core/ui/ControlPanel/Settings/DefaultMoreSidebarTab",
"caption": "{{$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption}}",
"tags": "$:/tags/ControlPanel/Settings",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/DefaultMoreSidebarTab/\n\n<$link to=\"$:/config/DefaultMoreSidebarTab\"><<lingo Hint>></$link>\n\n<$select tiddler=\"$:/config/DefaultMoreSidebarTab\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]\">\n<option value=<<currentTiddler>>><$transclude field=\"caption\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings/DefaultSidebarTab": {
"title": "$:/core/ui/ControlPanel/Settings/DefaultSidebarTab",
"caption": "{{$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption}}",
"tags": "$:/tags/ControlPanel/Settings",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/DefaultSidebarTab/\n\n<$link to=\"$:/config/DefaultSidebarTab\"><<lingo Hint>></$link>\n\n<$select tiddler=\"$:/config/DefaultSidebarTab\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\">\n<option value=<<currentTiddler>>><$transclude field=\"caption\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings/EditorToolbar": {
"title": "$:/core/ui/ControlPanel/Settings/EditorToolbar",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/EditorToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/EditorToolbar/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/TextEditor/EnableToolbar\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/TextEditor/EnableToolbar\"><<lingo Description>></$link> </$checkbox>\n\n"
},
"$:/core/ui/ControlPanel/Settings/InfoPanelMode": {
"title": "$:/core/ui/ControlPanel/Settings/InfoPanelMode",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/InfoPanelMode/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/InfoPanelMode/\n<$link to=\"$:/config/TiddlerInfo/Mode\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/TiddlerInfo/Mode\" value=\"popup\"> <<lingo Popup/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/TiddlerInfo/Mode\" value=\"sticky\"> <<lingo Sticky/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/LinkToBehaviour": {
"title": "$:/core/ui/ControlPanel/Settings/LinkToBehaviour",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/LinkToBehaviour/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/LinkToBehaviour/\n\n<$link to=\"$:/config/Navigation/openLinkFromInsideRiver\"><<lingo \"InsideRiver/Hint\">></$link>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromInsideRiver\">\n <option value=\"above\"><<lingo \"OpenAbove\">></option>\n <option value=\"below\"><<lingo \"OpenBelow\">></option>\n <option value=\"top\"><<lingo \"OpenAtTop\">></option>\n <option value=\"bottom\"><<lingo \"OpenAtBottom\">></option>\n</$select>\n\n<$link to=\"$:/config/Navigation/openLinkFromOutsideRiver\"><<lingo \"OutsideRiver/Hint\">></$link>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromOutsideRiver\">\n <option value=\"top\"><<lingo \"OpenAtTop\">></option>\n <option value=\"bottom\"><<lingo \"OpenAtBottom\">></option>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings/MissingLinks": {
"title": "$:/core/ui/ControlPanel/Settings/MissingLinks",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/MissingLinks/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/MissingLinks/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/MissingLinks\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/MissingLinks\"><<lingo Description>></$link> </$checkbox>\n\n"
},
"$:/core/ui/ControlPanel/Settings/NavigationAddressBar": {
"title": "$:/core/ui/ControlPanel/Settings/NavigationAddressBar",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/NavigationAddressBar/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationAddressBar/\n\n<$link to=\"$:/config/Navigation/UpdateAddressBar\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permaview\"> <<lingo Permaview/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permalink\"> <<lingo Permalink/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/NavigationHistory": {
"title": "$:/core/ui/ControlPanel/Settings/NavigationHistory",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/NavigationHistory/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationHistory/\n<$link to=\"$:/config/Navigation/UpdateHistory\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/NavigationPermalinkviewMode": {
"title": "$:/core/ui/ControlPanel/Settings/NavigationPermalinkviewMode",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationPermalinkviewMode/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Navigation/Permalinkview/CopyToClipboard\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Navigation/Permalinkview/CopyToClipboard\"><<lingo CopyToClipboard/Description>></$link> </$checkbox>\n\n<$checkbox tiddler=\"$:/config/Navigation/Permalinkview/UpdateAddressBar\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Navigation/Permalinkview/UpdateAddressBar\"><<lingo UpdateAddressBar/Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation": {
"title": "$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/PerformanceInstrumentation/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Performance/Instrumentation\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Performance/Instrumentation\"><<lingo Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings/TitleLinks": {
"title": "$:/core/ui/ControlPanel/Settings/TitleLinks",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/TitleLinks/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/TitleLinks/\n<$link to=\"$:/config/Tiddlers/TitleLinks\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle": {
"title": "$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtonStyle/\n<$link to=\"$:/config/Toolbar/ButtonClass\"><<lingo \"Hint\">></$link>\n\n<$select tiddler=\"$:/config/Toolbar/ButtonClass\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ToolbarButtonStyle]]\">\n<option value={{!!text}}>{{!!caption}}</option>\n</$list>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings/ToolbarButtons": {
"title": "$:/core/ui/ControlPanel/Settings/ToolbarButtons",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtons/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtons/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Icons\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Toolbar/Icons\"><<lingo Icons/Description>></$link> </$checkbox>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Text\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Toolbar/Text\"><<lingo Text/Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings": {
"title": "$:/core/ui/ControlPanel/Settings",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Settings/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n<<lingo Hint>>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Settings]]\">\n\n<div style=\"border-top:1px solid #eee;\">\n\n!! <$link><$transclude field=\"caption\"/></$link>\n\n<$transclude/>\n\n</div>\n\n</$list>\n"
},
"$:/core/ui/ControlPanel/StoryView": {
"title": "$:/core/ui/ControlPanel/StoryView",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/StoryView/Caption}}",
"text": "{{$:/snippets/viewswitcher}}\n"
},
"$:/core/ui/ControlPanel/Stylesheets": {
"title": "$:/core/ui/ControlPanel/Stylesheets",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/Stylesheets/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n\n<<lingo Stylesheets/Hint>>\n\n{{$:/snippets/peek-stylesheets}}\n"
},
"$:/core/ui/ControlPanel/Theme": {
"title": "$:/core/ui/ControlPanel/Theme",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Theme/Caption}}",
"text": "{{$:/snippets/themeswitcher}}\n"
},
"$:/core/ui/ControlPanel/TiddlerFields": {
"title": "$:/core/ui/ControlPanel/TiddlerFields",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/TiddlerFields/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n\n<<lingo TiddlerFields/Hint>>\n\n{{$:/snippets/allfields}}"
},
"$:/core/ui/ControlPanel/Toolbars/EditToolbar": {
"title": "$:/core/ui/ControlPanel/Toolbars/EditToolbar",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/EditToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/EditToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/EditToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/EditToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>"
},
"$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate": {
"title": "$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate",
"text": "\\define config-title()\n$(config-base)$$(currentTiddler)$\n\\end\n\n<$draggable tiddler=<<currentTiddler>>>\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <span class=\"tc-icon-wrapper\"><$transclude tiddler={{!!icon}}/></span> <$transclude field=\"caption\"/> -- <i class=\"tc-muted\"><$transclude field=\"description\"/></i>\n</$draggable>\n"
},
"$:/core/ui/ControlPanel/Toolbars/EditorToolbar": {
"title": "$:/core/ui/ControlPanel/Toolbars/EditorToolbar",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/EditorToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/EditorToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/EditorToolbar/Hint}}\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/EditorToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate\"/>\n"
},
"$:/core/ui/ControlPanel/Toolbars/ItemTemplate": {
"title": "$:/core/ui/ControlPanel/Toolbars/ItemTemplate",
"text": "\\define config-title()\n$(config-base)$$(currentTiddler)$\n\\end\n\n<$draggable tiddler=<<currentTiddler>>>\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <span class=\"tc-icon-wrapper\"> <$transclude field=\"caption\"/> <i class=\"tc-muted\">-- <$transclude field=\"description\"/></i></span>\n</$draggable>\n"
},
"$:/core/ui/ControlPanel/Toolbars/PageControls": {
"title": "$:/core/ui/ControlPanel/Toolbars/PageControls",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/PageControls/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/PageControlButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/PageControls/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/PageControls\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/ControlPanel/Toolbars/ViewToolbar": {
"title": "$:/core/ui/ControlPanel/Toolbars/ViewToolbar",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/ViewToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/ViewToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/ViewToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/ViewToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/ControlPanel/Toolbars": {
"title": "$:/core/ui/ControlPanel/Toolbars",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Toolbars/Caption}}",
"text": "{{$:/language/ControlPanel/Toolbars/Hint}}\n\n<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Toolbars]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/Toolbars/ViewToolbar\" class=\"tc-vertical\" explicitState=\"$:/state/tabs/controlpanel/toolbars-1345989671\"/>\n</div>\n"
},
"$:/ControlPanel": {
"title": "$:/ControlPanel",
"icon": "$:/core/images/options-button",
"color": "#bbb",
"text": "<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/Info\" explicitState=\"$:/state/tab-1749438307\"/>\n</div>\n"
},
"$:/core/ui/DefaultSearchResultList": {
"title": "$:/core/ui/DefaultSearchResultList",
"tags": "$:/tags/SearchResults",
"caption": "{{$:/language/Search/DefaultResults/Caption}}",
"first-search-filter": "[!is[system]search:title<userInput>sort[title]limit[250]]",
"second-search-filter": "[!is[system]search<userInput>sort[title]limit[250]]",
"text": "\\define searchResultList()\n//<small>{{$:/language/Search/Matches/Title}}</small>//\n\n<$list filter=\"[<userInput>minlength[1]]\" variable=\"ignore\">\n<$list filter={{{ [<configTiddler>get[first-search-filter]] }}}>\n<span class={{{[<currentTiddler>addsuffix[-primaryList]] -[<searchListState>get[text]] +[then[]else[tc-list-item-selected]] }}}>\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</span>\n</$list>\n</$list>\n\n//<small>{{$:/language/Search/Matches/All}}</small>//\n\n<$list filter=\"[<userInput>minlength[1]]\" variable=\"ignore\">\n<$list filter={{{ [<configTiddler>get[second-search-filter]] }}}>\n<span class={{{[<currentTiddler>addsuffix[-secondaryList]] -[<searchListState>get[text]] +[then[]else[tc-list-item-selected]] }}}>\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</span>\n</$list>\n</$list>\n\n\\end\n<<searchResultList>>\n"
},
"$:/core/ui/EditTemplate/body/preview/diffs-current": {
"title": "$:/core/ui/EditTemplate/body/preview/diffs-current",
"tags": "$:/tags/EditPreview",
"caption": "differences from current",
"list-after": "$:/core/ui/EditTemplate/body/preview/output",
"text": "<$list filter=\"[<currentTiddler>!is[image]]\" emptyMessage={{$:/core/ui/EditTemplate/body/preview/output}}>\n\n<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle={{!!draft.of}} destTiddlerTitle=<<currentTiddler>>/>\n\n</$list>\n\n"
},
"$:/core/ui/EditTemplate/body/preview/diffs-shadow": {
"title": "$:/core/ui/EditTemplate/body/preview/diffs-shadow",
"tags": "$:/tags/EditPreview",
"caption": "differences from shadow (if any)",
"list-after": "$:/core/ui/EditTemplate/body/preview/output",
"text": "<$list filter=\"[<currentTiddler>!is[image]]\" emptyMessage={{$:/core/ui/EditTemplate/body/preview/output}}>\n\n<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle={{{ [{!!draft.of}shadowsource[]] }}} sourceSubTiddlerTitle={{!!draft.of}} destTiddlerTitle=<<currentTiddler>>/>\n\n</$list>\n\n"
},
"$:/core/ui/EditTemplate/body/preview/output": {
"title": "$:/core/ui/EditTemplate/body/preview/output",
"tags": "$:/tags/EditPreview",
"caption": "{{$:/language/EditTemplate/Body/Preview/Type/Output}}",
"text": "\\import [all[shadows+tiddlers]tag[$:/tags/Macro/View]!has[draft.of]]\n<$set name=\"tv-tiddler-preview\" value=\"yes\">\n\n<$transclude />\n\n</$set>\n"
},
"$:/state/showeditpreview": {
"title": "$:/state/showeditpreview",
"text": "no"
},
"$:/core/ui/EditTemplate/body/editor": {
"title": "$:/core/ui/EditTemplate/body/editor",
"text": "<$edit\n\n field=\"text\"\n class=\"tc-edit-texteditor tc-edit-texteditor-body\"\n placeholder={{$:/language/EditTemplate/Body/Placeholder}}\n tabindex={{$:/config/EditTabIndex}}\n focus={{{ [{$:/config/AutoFocus}match[text]then[true]] ~[[false]] }}}\n cancelPopups=\"yes\"\n\n><$set\n\n name=\"targetTiddler\"\n value=<<currentTiddler>>\n\n><$list\n\n filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]]\"\n\n><$reveal\n\n type=\"nomatch\"\n state=<<config-visibility-title>>\n text=\"hide\"\n class=\"tc-text-editor-toolbar-item-wrapper\"\n\n><$transclude\n\n tiddler=\"$:/core/ui/EditTemplate/body/toolbar/button\"\n mode=\"inline\"\n\n/></$reveal></$list></$set></$edit>\n"
},
"$:/core/ui/EditTemplate/body/toolbar/button": {
"title": "$:/core/ui/EditTemplate/body/toolbar/button",
"text": "\\define toolbar-button-icon()\n<$list\n\n filter=\"[all[current]!has[custom-icon]]\"\n variable=\"no-custom-icon\"\n\n><$transclude\n\n tiddler={{!!icon}}\n\n/></$list>\n\\end\n\n\\define toolbar-button-tooltip()\n{{!!description}}<$macrocall $name=\"displayshortcuts\" $output=\"text/plain\" shortcuts={{!!shortcuts}} prefix=\"` - [\" separator=\"] [\" suffix=\"]`\"/>\n\\end\n\n\\define toolbar-button()\n<$list\n\n filter={{!!condition}}\n variable=\"list-condition\"\n\n><$wikify\n\n name=\"tooltip-text\"\n text=<<toolbar-button-tooltip>>\n mode=\"inline\"\n output=\"text\"\n\n><$list\n\n filter=\"[all[current]!has[dropdown]]\"\n variable=\"no-dropdown\"\n\n><$button\n\n class=\"tc-btn-invisible $(buttonClasses)$\"\n tooltip=<<tooltip-text>>\n actions={{!!actions}}\n\n><span\n\n data-tw-keyboard-shortcut={{!!shortcuts}}\n\n/><<toolbar-button-icon>><$transclude\n\n tiddler=<<currentTiddler>>\n field=\"text\"\n\n/></$button></$list><$list\n\n filter=\"[all[current]has[dropdown]]\"\n variable=\"dropdown\"\n\n><$set\n\n name=\"dropdown-state\"\n value=<<qualify \"$:/state/EditorToolbarDropdown\">>\n\n><$button\n\n popup=<<dropdown-state>>\n class=\"tc-popup-keep tc-btn-invisible $(buttonClasses)$\"\n selectedClass=\"tc-selected\"\n tooltip=<<tooltip-text>>\n actions={{!!actions}}\n\n><span\n\n data-tw-keyboard-shortcut={{!!shortcuts}}\n\n/><<toolbar-button-icon>><$transclude\n\n tiddler=<<currentTiddler>>\n field=\"text\"\n\n/></$button><$reveal\n\n state=<<dropdown-state>>\n type=\"popup\"\n position=\"below\"\n animate=\"yes\"\n tag=\"span\"\n\n><div\n\n class=\"tc-drop-down tc-popup-keep\"\n\n><$transclude\n\n tiddler={{!!dropdown}}\n mode=\"block\"\n\n/></div></$reveal></$set></$list></$wikify></$list>\n\\end\n\n\\define toolbar-button-outer()\n<$set\n\n name=\"buttonClasses\"\n value={{!!button-classes}}\n\n><<toolbar-button>></$set>\n\\end\n\n<<toolbar-button-outer>>"
},
"$:/core/ui/EditTemplate/body": {
"title": "$:/core/ui/EditTemplate/body",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/Body/\n\\define config-visibility-title()\n$:/config/EditorToolbarButtons/Visibility/$(currentTiddler)$\n\\end\n<$list filter=\"[all[current]has[_canonical_uri]]\">\n\n<div class=\"tc-message-box\">\n\n<<lingo External/Hint>>\n\n<a href={{!!_canonical_uri}}><$text text={{!!_canonical_uri}}/></a>\n\n<$edit-text field=\"_canonical_uri\" class=\"tc-edit-fields\" tabindex={{$:/config/EditTabIndex}} cancelPopups=\"yes\"></$edit-text>\n\n</div>\n\n</$list>\n\n<$list filter=\"[all[current]!has[_canonical_uri]]\">\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\">\n\n<div class=\"tc-tiddler-preview\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n\n<div class=\"tc-tiddler-preview-preview\">\n\n<$transclude tiddler={{$:/state/editpreviewtype}} mode=\"inline\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/preview/output\" mode=\"inline\"/>\n\n</$transclude>\n\n</div>\n\n</div>\n\n</$reveal>\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n\n</$reveal>\n\n</$list>\n"
},
"$:/core/ui/EditTemplate/controls": {
"title": "$:/core/ui/EditTemplate/controls",
"tags": "$:/tags/EditTemplate",
"text": "\\define config-title()\n$:/config/EditToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title tc-tiddler-edit-title\">\n<$view field=\"title\"/>\n<span class=\"tc-tiddler-controls tc-titlebar\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$transclude tiddler=<<listItem>>/></$reveal></$list></span>\n<div style=\"clear: both;\"></div>\n</div>\n"
},
"$:/core/ui/EditTemplate/fields": {
"title": "$:/core/ui/EditTemplate/fields",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n\\define config-title()\n$:/config/EditTemplateFields/Visibility/$(currentField)$\n\\end\n\n\\define config-filter()\n[[hide]] -[title{$(config-title)$}]\n\\end\n\n\\define current-tiddler-new-field-selector()\n[data-tiddler-title=\"$(currentTiddlerCSSescaped)$\"] .tc-edit-field-add-name-wrapper input\n\\end\n\n\\define new-field-actions()\n<$action-sendmessage $message=\"tm-add-field\" $name={{{ [<newFieldNameTiddler>get[text]] }}} $value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<$action-deletetiddler $filter=\"[<newFieldNameTiddler>] [<newFieldValueTiddler>] [<storeTitle>] [<searchListState>]\"/>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=<<current-tiddler-new-field-selector>>/>\n\\end\n\n\\define delete-state-tiddlers() <$action-deletetiddler $filter=\"[<newFieldNameTiddler>] [<storeTitle>] [<searchListState>]\"/>\n\n\\define cancel-search-actions-inner()\n<$list filter=\"[<storeTitle>has[text]] [<newFieldNameTiddler>has[text]]\" variable=\"ignore\" emptyMessage=\"\"\"<<cancel-delete-tiddler-actions \"cancel\">>\"\"\">\n<<delete-state-tiddlers>>\n</$list>\n\\end\n\n\\define cancel-search-actions()\n<$set name=\"userInput\" value={{{ [<storeTitle>get[text]] }}}>\n<$list filter=\"[<newFieldNameTiddler>get[text]!match<userInput>]\" emptyMessage=\"\"\"<<cancel-search-actions-inner>>\"\"\">\n<$action-setfield $tiddler=<<newFieldNameTiddler>> text=<<userInput>>/><$action-setfield $tiddler=<<refreshTitle>> text=\"yes\"/>\n</$list>\n</$set>\n\\end\n\n\\define new-field()\n<$vars name={{{ [<newFieldNameTiddler>get[text]] }}}>\n<$reveal type=\"nomatch\" text=\"\" default=<<name>>>\n<$button tooltip=<<lingo Fields/Add/Button/Hint>>>\n<$action-sendmessage $message=\"tm-add-field\"\n$name=<<name>>\n$value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<$action-deletetiddler $filter=\"[<newFieldNameTiddler>] [<newFieldValueTiddler>] [<storeTitle>] [<searchListState>]\"/>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" text=\"\" default=<<name>>>\n<$button>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n</$vars>\n\\end\n\\whitespace trim\n\n<div class=\"tc-edit-fields\">\n<table class={{{ [all[current]fields[]] :filter[lookup[$:/config/EditTemplateFields/Visibility/]!match[hide]] +[count[]!match[0]] +[then[tc-edit-fields]] ~[[tc-edit-fields tc-edit-fields-small]] }}}>\n<tbody>\n<$list filter=\"[all[current]fields[]] +[sort[title]]\" variable=\"currentField\" storyview=\"pop\">\n<$list filter=<<config-filter>> variable=\"temp\">\n<tr class=\"tc-edit-field\">\n<td class=\"tc-edit-field-name\">\n<$text text=<<currentField>>/>:</td>\n<td class=\"tc-edit-field-value\">\n<$keyboard key=\"((delete-field))\" actions=\"\"\"<$action-deletefield $field=<<currentField>>/><$set name=\"currentTiddlerCSSescaped\" value={{{ [<currentTiddler>escapecss[]] }}}><$action-sendmessage $message=\"tm-focus-selector\" $param=<<current-tiddler-new-field-selector>>/></$set>\"\"\">\n<$edit-text tiddler=<<currentTiddler>> field=<<currentField>> placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} tabindex={{$:/config/EditTabIndex}} cancelPopups=\"yes\"/>\n</$keyboard>\n</td>\n<td class=\"tc-edit-field-remove\">\n<$button class=\"tc-btn-invisible\" tooltip={{$:/language/EditTemplate/Field/Remove/Hint}} aria-label={{$:/language/EditTemplate/Field/Remove/Caption}}>\n<$action-deletefield $field=<<currentField>>/><$set name=\"currentTiddlerCSSescaped\" value={{{ [<currentTiddler>escapecss[]] }}}><$action-sendmessage $message=\"tm-focus-selector\" $param=<<current-tiddler-new-field-selector>>/></$set>\n{{$:/core/images/delete-button}}\n</$button>\n</td>\n</tr>\n</$list>\n</$list>\n</tbody>\n</table>\n</div>\n\n<$fieldmangler>\n<div class=\"tc-edit-field-add\">\n<em class=\"tc-edit tc-big-gap-right\">\n<<lingo Fields/Add/Prompt>>\n</em>\n<$vars refreshTitle=<<qualify \"$:/temp/fieldname/refresh\">> storeTitle=<<newFieldNameInputTiddler>> searchListState=<<newFieldNameSelectionTiddler>>>\n<div class=\"tc-edit-field-add-name-wrapper\">\n<$macrocall $name=\"keyboard-driven-input\" tiddler=<<newFieldNameTiddler>> storeTitle=<<storeTitle>> refreshTitle=<<refreshTitle>>\n\t\tselectionStateTitle=<<searchListState>> tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Name/Placeholder}}\n\t\tfocusPopup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-edit-texteditor tc-popup-handle\" tabindex={{$:/config/EditTabIndex}}\n\t\tfocus={{{ [{$:/config/AutoFocus}match[fields]then[true]] ~[[false]] }}} cancelPopups=\"yes\"\n\t\tconfigTiddlerFilter=\"[[$:/config/EditMode/fieldname-filter]]\" inputCancelActions=<<cancel-search-actions>> />\n<$button popup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown tc-small-gap\" tooltip={{$:/language/EditTemplate/Field/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Field/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button>\n<$reveal state=<<qualify \"$:/state/popup/field-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$linkcatcher to=<<newFieldNameTiddler>>>\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/User>>\n</div>\n<$set name=\"newFieldName\" value={{{ [<storeTitle>get[text]] }}}>\n<$list filter=\"[!is[shadow]!is[system]fields[]search:title<newFieldName>sort[]] -created -creator -draft.of -draft.title -modified -modifier -tags -text -title -type\" variable=\"currentField\">\n<$list filter=\"[<currentField>addsuffix[-primaryList]] -[<searchListState>get[text]]\" emptyMessage=\"\"\"<$link to=<<currentField>> class=\"tc-list-item-selected\"><$text text=<<currentField>>/></$link>\"\"\">\n<$link to=<<currentField>>>\n<$text text=<<currentField>>/>\n</$link>\n</$list>\n</$list>\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/System>>\n</div>\n<$list filter=\"[fields[]search:title<newFieldName>sort[]] -[!is[shadow]!is[system]fields[]]\" variable=\"currentField\">\n<$list filter=\"[<currentField>addsuffix[-secondaryList]] -[<searchListState>get[text]]\" emptyMessage=\"\"\"<$link to=<<currentField>> class=\"tc-list-item-selected\"><$text text=<<currentField>>/></$link>\"\"\">\n<$link to=<<currentField>>>\n<$text text=<<currentField>>/>\n</$link>\n</$list>\n</$list>\n</$set>\n</$linkcatcher>\n</$set>\n</div>\n</$reveal>\n</div>\n<span class=\"tc-edit-field-add-value tc-small-gap-right\">\n<$set name=\"currentTiddlerCSSescaped\" value={{{ [<currentTiddler>escapecss[]] }}}>\n<$keyboard key=\"((add-field))\" actions=<<new-field-actions>>>\n<$edit-text tiddler=<<newFieldValueTiddler>> tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} class=\"tc-edit-texteditor\" tabindex={{$:/config/EditTabIndex}} cancelPopups=\"yes\"/>\n</$keyboard>\n</$set>\n</span>\n<span class=\"tc-edit-field-add-button\">\n<$macrocall $name=\"new-field\"/>\n</span>\n</$vars>\n</div>\n</$fieldmangler>\n"
},
"$:/core/ui/EditTemplate/shadow": {
"title": "$:/core/ui/EditTemplate/shadow",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/Shadow/\n\\define pluginLinkBody()\n<$link to=\"\"\"$(pluginTitle)$\"\"\">\n<$text text=\"\"\"$(pluginTitle)$\"\"\"/>\n</$link>\n\\end\n<$list filter=\"[all[current]get[draft.of]is[shadow]!is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<<pluginLinkBody>>>\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n</div>\n</$set>\n</$list>\n\n</$list>\n\n<$list filter=\"[all[current]get[draft.of]is[shadow]is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<<pluginLinkBody>>>\n<div class=\"tc-message-box\">\n\n<<lingo OverriddenWarning>>\n\n</div>\n</$set>\n</$list>\n\n</$list>"
},
"$:/core/ui/EditTemplate/tags": {
"title": "$:/core/ui/EditTemplate/tags",
"tags": "$:/tags/EditTemplate",
"text": "\\whitespace trim\n\n\\define lingo-base() $:/language/EditTemplate/\n\n\\define tag-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\n\\define tag-body-inner(colour,fallbackTarget,colourA,colourB,icon,tagField:\"tags\")\n\\whitespace trim\n<$vars foregroundColor=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">> backgroundColor=\"\"\"$colour$\"\"\">\n<span style=<<tag-styles>> class=\"tc-tag-label tc-tag-list-item\">\n<$transclude tiddler=\"\"\"$icon$\"\"\"/><$view field=\"title\" format=\"text\" />\n<$button class=\"tc-btn-invisible tc-remove-tag-button\"><$action-listops $tiddler=<<saveTiddler>> $field=<<__tagField__>> $subfilter=\"-[{!!title}]\"/>{{$:/core/images/close-button}}</$button>\n</span>\n</$vars>\n\\end\n\n\\define tag-body(colour,palette,icon,tagField:\"tags\")\n<$macrocall $name=\"tag-body-inner\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}} icon=\"\"\"$icon$\"\"\" tagField=<<__tagField__>>/>\n\\end\n\n\\define edit-tags-template(tagField:\"tags\")\n\\whitespace trim\n<div class=\"tc-edit-tags\">\n<$list filter=\"[list[!!$tagField$]sort[title]]\" storyview=\"pop\">\n<$macrocall $name=\"tag-body\" colour={{!!color}} palette={{$:/palette}} icon={{!!icon}} tagField=<<__tagField__>>/>\n</$list>\n<$vars tabIndex={{$:/config/EditTabIndex}} cancelPopups=\"yes\">\n<$macrocall $name=\"tag-picker\" tagField=<<__tagField__>>/>\n</$vars>\n</div>\n\\end\n<$set name=\"saveTiddler\" value=<<currentTiddler>>>\n<$macrocall $name=\"edit-tags-template\" tagField=<<tagField>>/>\n</$set>\n"
},
"$:/core/ui/EditTemplate/title": {
"title": "$:/core/ui/EditTemplate/title",
"tags": "$:/tags/EditTemplate",
"text": "<$edit-text field=\"draft.title\" class=\"tc-titlebar tc-edit-texteditor\" focus={{{ [{$:/config/AutoFocus}match[title]then[true]] ~[[false]] }}} tabindex={{$:/config/EditTabIndex}} cancelPopups=\"yes\"/>\n\n<$vars pattern=\"\"\"[\\|\\[\\]{}]\"\"\" bad-chars=\"\"\"`| [ ] { }`\"\"\">\n\n<$list filter=\"[all[current]regexp:draft.title<pattern>]\" variable=\"listItem\">\n\n<div class=\"tc-message-box\">\n\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/BadCharacterWarning}}\n\n</div>\n\n</$list>\n\n</$vars>\n\n<$reveal state=\"!!draft.title\" type=\"nomatch\" text={{!!draft.of}} tag=\"div\">\n\n<$list filter=\"[{!!draft.title}!is[missing]]\" variable=\"listItem\">\n\n<div class=\"tc-message-box\">\n\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/Exists/Prompt}}\n\n</div>\n\n</$list>\n\n<$list filter=\"[{!!draft.of}!is[missing]]\" variable=\"listItem\">\n\n<$vars fromTitle={{!!draft.of}} toTitle={{!!draft.title}}>\n\n<$checkbox tiddler=\"$:/config/RelinkOnRename\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> {{$:/language/EditTemplate/Title/Relink/Prompt}}</$checkbox>\n\n<$list filter=\"[title<fromTitle>backlinks[]limit[1]]\" variable=\"listItem\">\n\n<$vars stateTiddler=<<qualify \"$:/state/edit/references\">> >\n\n<$reveal type=\"nomatch\" state=<<stateTiddler>> text=\"show\">\n<$button set=<<stateTiddler>> setTo=\"show\" class=\"tc-btn-invisible\">{{$:/core/images/right-arrow}} \n<<lingo EditTemplate/Title/References/Prompt>></$button>\n</$reveal>\n<$reveal type=\"match\" state=<<stateTiddler>> text=\"show\">\n<$button set=<<stateTiddler>> setTo=\"hide\" class=\"tc-btn-invisible\">{{$:/core/images/down-arrow}} \n<<lingo EditTemplate/Title/References/Prompt>></$button>\n</$reveal>\n\n<$reveal type=\"match\" state=<<stateTiddler>> text=\"show\">\n<$tiddler tiddler=<<fromTitle>> >\n<$transclude tiddler=\"$:/core/ui/TiddlerInfo/References\"/>\n</$tiddler>\n</$reveal>\n\n</$vars>\n\n</$list>\n\n</$vars>\n\n</$list>\n\n</$reveal>\n"
},
"$:/core/ui/EditTemplate/type": {
"title": "$:/core/ui/EditTemplate/type",
"tags": "$:/tags/EditTemplate",
"first-search-filter": "[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]sort[description]sort[group-sort]removeprefix[$:/language/Docs/Types/]search<userInput>]",
"text": "\\define lingo-base() $:/language/EditTemplate/\n\\define input-cancel-actions() <$list filter=\"[<storeTitle>get[text]] [<currentTiddler>get[type]] +[limit[1]]\" emptyMessage=\"\"\"<<cancel-delete-tiddler-actions \"cancel\">>\"\"\"><$action-sendmessage $message=\"tm-remove-field\" $param=\"type\"/><$action-deletetiddler $filter=\"[<typeInputTiddler>] [<refreshTitle>] [<typeSelectionTiddler>]\"/></$list>\n\\whitespace trim\n<$set name=\"refreshTitle\" value=<<qualify \"$:/temp/type-search/refresh\">>>\n<div class=\"tc-edit-type-selector-wrapper\">\n<em class=\"tc-edit tc-big-gap-right\"><<lingo Type/Prompt>></em>\n<div class=\"tc-type-selector-dropdown-wrapper\">\n<div class=\"tc-type-selector\"><$fieldmangler>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=<<currentTiddler>> storeTitle=<<typeInputTiddler>> refreshTitle=<<refreshTitle>> selectionStateTitle=<<typeSelectionTiddler>> field=\"type\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Type/Placeholder}} focusPopup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-edit-typeeditor tc-edit-texteditor tc-popup-handle\" tabindex={{$:/config/EditTabIndex}} focus={{{ [{$:/config/AutoFocus}match[type]then[true]] ~[[false]] }}} cancelPopups=\"yes\" configTiddlerFilter=\"[[$:/core/ui/EditTemplate/type]]\" inputCancelActions=<<input-cancel-actions>>/><$button popup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown tc-small-gap\" tooltip={{$:/language/EditTemplate/Type/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Type/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button><$button message=\"tm-remove-field\" param=\"type\" class=\"tc-btn-invisible tc-btn-icon\" tooltip={{$:/language/EditTemplate/Type/Delete/Hint}} aria-label={{$:/language/EditTemplate/Type/Delete/Caption}}>{{$:/core/images/delete-button}}<$action-deletetiddler $filter=\"[<storeTitle>] [<refreshTitle>] [<selectionStateTitle>]\"/></$button>\n</$fieldmangler></div>\n\n<div class=\"tc-block-dropdown-wrapper\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$reveal state=<<qualify \"$:/state/popup/type-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$linkcatcher to=\"!!type\">\n<$list filter='[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]each[group]sort[group-sort]]'>\n<div class=\"tc-dropdown-item\">\n<$text text={{!!group}}/>\n</div>\n<$set name=\"userInput\" value={{{ [<typeInputTiddler>get[text]] }}}>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]group{!!group}] +[sort[description]] +[removeprefix[$:/language/Docs/Types/]] +[search<userInput>]\"><span class={{{ [<currentTiddler>addsuffix[-primaryList]] -[<typeSelectionTiddler>get[text]] +[then[]else[tc-list-item-selected]] }}}><$link to={{{ [<currentTiddler>addprefix[$:/language/Docs/Types/]get[name]] }}}><$view tiddler={{{ [<currentTiddler>addprefix[$:/language/Docs/Types/]] }}} field=\"description\"/> (<$view tiddler={{{ [<currentTiddler>addprefix[$:/language/Docs/Types/]] }}} field=\"name\"/>)</$link></span>\n</$list>\n</$set>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>\n</$set>\n</div>\n</div>\n</div>\n</$set>\n"
},
"$:/core/ui/EditTemplate": {
"title": "$:/core/ui/EditTemplate",
"text": "\\define delete-edittemplate-state-tiddlers() <$action-deletetiddler $filter=\"[<newFieldNameTiddler>] [<newFieldValueTiddler>] [<newFieldNameInputTiddler>] [<newFieldNameSelectionTiddler>] [<newTagNameTiddler>] [<newTagNameInputTiddler>] [<newTagNameSelectionTiddler>] [<typeInputTiddler>] [<typeSelectionTiddler>]\"/>\n\\define save-tiddler-actions()\n<$action-sendmessage $message=\"tm-add-tag\" $param={{{ [<newTagNameTiddler>get[text]] }}}/>\n<$action-sendmessage $message=\"tm-add-field\" $name={{{ [<newFieldNameTiddler>get[text]] }}} $value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<<delete-edittemplate-state-tiddlers>>\n<$action-sendmessage $message=\"tm-save-tiddler\"/>\n\\end\n\\define cancel-delete-tiddler-actions(message)\n<<delete-edittemplate-state-tiddlers>>\n<$action-sendmessage $message=\"tm-$message$-tiddler\"/>\n\\end\n<div data-tiddler-title=<<currentTiddler>> data-tags={{!!tags}} class={{{ tc-tiddler-frame tc-tiddler-edit-frame [<currentTiddler>is[tiddler]then[tc-tiddler-exists]] [<currentTiddler>is[missing]!is[shadow]then[tc-tiddler-missing]] [<currentTiddler>is[shadow]then[tc-tiddler-exists tc-tiddler-shadow]] [<currentTiddler>is[system]then[tc-tiddler-system]] [{!!class}] [<currentTiddler>tags[]encodeuricomponent[]addprefix[tc-tagged-]] +[join[ ]] }}}>\n<$fieldmangler>\n<$vars storyTiddler=<<currentTiddler>> newTagNameTiddler=<<qualify \"$:/temp/NewTagName\">> newFieldNameTiddler=<<qualify \"$:/temp/NewFieldName\">> newFieldValueTiddler=<<qualify \"$:/temp/NewFieldValue\">> newFieldNameInputTiddler=<<qualify \"$:/temp/NewFieldName/input\">> newFieldNameSelectionTiddler=<<qualify \"$:/temp/NewFieldName/selected-item\">> newTagNameInputTiddler=<<qualify \"$:/temp/NewTagName/input\">> newTagNameSelectionTiddler=<<qualify \"$:/temp/NewTagName/selected-item\">> typeInputTiddler=<<qualify \"$:/temp/Type/input\">> typeSelectionTiddler=<<qualify \"$:/temp/Type/selected-item\">>>\n<$keyboard key=\"((cancel-edit-tiddler))\" actions=<<cancel-delete-tiddler-actions \"cancel\">>>\n<$keyboard key=\"((save-tiddler))\" actions=<<save-tiddler-actions>>>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditTemplate]!has[draft.of]]\" variable=\"listItem\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<<listItem>>/>\n</$set>\n</$list>\n</$keyboard>\n</$keyboard>\n</$vars>\n</$fieldmangler>\n</div>\n"
},
"$:/core/ui/Buttons/cancel": {
"title": "$:/core/ui/Buttons/cancel",
"tags": "$:/tags/EditToolbar",
"caption": "{{$:/core/images/cancel-button}} {{$:/language/Buttons/Cancel/Caption}}",
"description": "{{$:/language/Buttons/Cancel/Hint}}",
"text": "\\whitespace trim\n<$button actions=<<cancel-delete-tiddler-actions \"cancel\">> tooltip={{$:/language/Buttons/Cancel/Hint}} aria-label={{$:/language/Buttons/Cancel/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/cancel-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Cancel/Caption}}/></span>\n</$list>\n</$button>\n"
},
"$:/core/ui/Buttons/delete": {
"title": "$:/core/ui/Buttons/delete",
"tags": "$:/tags/EditToolbar $:/tags/ViewToolbar",
"caption": "{{$:/core/images/delete-button}} {{$:/language/Buttons/Delete/Caption}}",
"description": "{{$:/language/Buttons/Delete/Hint}}",
"text": "\\whitespace trim\n<$button actions=<<cancel-delete-tiddler-actions \"delete\">> tooltip={{$:/language/Buttons/Delete/Hint}} aria-label={{$:/language/Buttons/Delete/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/delete-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Delete/Caption}}/></span>\n</$list>\n</$button>\n"
},
"$:/core/ui/Buttons/save": {
"title": "$:/core/ui/Buttons/save",
"tags": "$:/tags/EditToolbar",
"caption": "{{$:/core/images/done-button}} {{$:/language/Buttons/Save/Caption}}",
"description": "{{$:/language/Buttons/Save/Hint}}",
"text": "\\define save-tiddler-button()\n\\whitespace trim\n<$fieldmangler><$button tooltip={{$:/language/Buttons/Save/Hint}} aria-label={{$:/language/Buttons/Save/Caption}} class=<<tv-config-toolbar-class>>>\n<<save-tiddler-actions>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/done-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Save/Caption}}/></span>\n</$list>\n</$button></$fieldmangler>\n\\end\n<<save-tiddler-button>>\n"
},
"$:/core/ui/EditorToolbar/bold": {
"title": "$:/core/ui/EditorToolbar/bold",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/bold",
"caption": "{{$:/language/Buttons/Bold/Caption}}",
"description": "{{$:/language/Buttons/Bold/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((bold))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"''\"\n\tsuffix=\"''\"\n/>\n"
},
"$:/core/ui/EditorToolbar/clear-dropdown": {
"title": "$:/core/ui/EditorToolbar/clear-dropdown",
"text": "''{{$:/language/Buttons/Clear/Hint}}''\n\n<div class=\"tc-colour-chooser\">\n\n<$macrocall $name=\"colour-picker\" actions=\"\"\"\n\n<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"clear\"\n\tcolour=<<colour-picker-value>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n\n</div>\n"
},
"$:/core/ui/EditorToolbar/clear": {
"title": "$:/core/ui/EditorToolbar/clear",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/erase",
"caption": "{{$:/language/Buttons/Clear/Caption}}",
"description": "{{$:/language/Buttons/Clear/Hint}}",
"condition": "[<targetTiddler>is[image]] -[<targetTiddler>type[image/svg+xml]]",
"dropdown": "$:/core/ui/EditorToolbar/clear-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/editor-height-dropdown": {
"title": "$:/core/ui/EditorToolbar/editor-height-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/EditorHeight/\n''<<lingo Hint>>''\n\n<$radio tiddler=\"$:/config/TextEditor/EditorHeight/Mode\" value=\"auto\"> {{$:/core/images/auto-height}} <<lingo Caption/Auto>></$radio>\n\n<$radio tiddler=\"$:/config/TextEditor/EditorHeight/Mode\" value=\"fixed\"> {{$:/core/images/fixed-height}} <<lingo Caption/Fixed>> <$edit-text tag=\"input\" tiddler=\"$:/config/TextEditor/EditorHeight/Height\" default=\"100px\"/></$radio>\n"
},
"$:/core/ui/EditorToolbar/editor-height": {
"title": "$:/core/ui/EditorToolbar/editor-height",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/fixed-height",
"custom-icon": "yes",
"caption": "{{$:/language/Buttons/EditorHeight/Caption}}",
"description": "{{$:/language/Buttons/EditorHeight/Hint}}",
"condition": "[<targetTiddler>type[]] [<targetTiddler>get[type]prefix[text/]] [<targetTiddler>get[type]match[application/javascript]] [<targetTiddler>get[type]match[application/json]] [<targetTiddler>get[type]match[application/x-tiddler-dictionary]] [<targetTiddler>get[type]match[image/svg+xml]] +[first[]]",
"dropdown": "$:/core/ui/EditorToolbar/editor-height-dropdown",
"text": "<$reveal tag=\"span\" state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"fixed\">\n{{$:/core/images/fixed-height}}\n</$reveal>\n<$reveal tag=\"span\" state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"auto\">\n{{$:/core/images/auto-height}}\n</$reveal>\n"
},
"$:/core/ui/EditorToolbar/excise-dropdown": {
"title": "$:/core/ui/EditorToolbar/excise-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Excise/\n\n\\define body(config-title)\n''<<lingo Hint>>''\n\n<<lingo Caption/NewTitle>> <$edit-text tag=\"input\" tiddler=\"$config-title$/new-title\" default=\"\" focus=\"true\"/>\n\n<$set name=\"new-title\" value={{$config-title$/new-title}}>\n<$list filter=\"\"\"[<new-title>is[tiddler]]\"\"\">\n<div class=\"tc-error\">\n<<lingo Caption/TiddlerExists>>\n</div>\n</$list>\n</$set>\n\n<$checkbox tiddler=\"\"\"$config-title$/tagnew\"\"\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"false\"> <<lingo Caption/Tag>></$checkbox>\n\n<<lingo Caption/Replace>> <$select tiddler=\"\"\"$config-title$/type\"\"\" default=\"transclude\">\n<option value=\"link\"><<lingo Caption/Replace/Link>></option>\n<option value=\"transclude\"><<lingo Caption/Replace/Transclusion>></option>\n<option value=\"macro\"><<lingo Caption/Replace/Macro>></option>\n</$select>\n\n<$reveal state=\"\"\"$config-title$/type\"\"\" type=\"match\" text=\"macro\">\n<<lingo Caption/MacroName>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/macro-title\"\"\" default=\"translink\"/>\n</$reveal>\n\n<$button>\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"excise\"\n\ttitle={{$config-title$/new-title}}\n\ttype={{$config-title$/type}}\n\tmacro={{$config-title$/macro-title}}\n\ttagnew={{$config-title$/tagnew}}\n/>\n<$action-deletetiddler\n\t$tiddler=\"$config-title$/new-title\"\n/>\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n<<lingo Caption/Excise>>\n</$button>\n\\end\n\n<$macrocall $name=\"body\" config-title=<<qualify \"$:/state/Excise/\">>/>\n"
},
"$:/core/ui/EditorToolbar/excise": {
"title": "$:/core/ui/EditorToolbar/excise",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/excise",
"caption": "{{$:/language/Buttons/Excise/Caption}}",
"description": "{{$:/language/Buttons/Excise/Hint}}",
"condition": "[<targetTiddler>type[]] [<targetTiddler>type[text/vnd.tiddlywiki]] +[first[]]",
"shortcuts": "((excise))",
"dropdown": "$:/core/ui/EditorToolbar/excise-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/heading-1": {
"title": "$:/core/ui/EditorToolbar/heading-1",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-1",
"caption": "{{$:/language/Buttons/Heading1/Caption}}",
"description": "{{$:/language/Buttons/Heading1/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((heading-1))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"1\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-2": {
"title": "$:/core/ui/EditorToolbar/heading-2",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-2",
"caption": "{{$:/language/Buttons/Heading2/Caption}}",
"description": "{{$:/language/Buttons/Heading2/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-2))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"2\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-3": {
"title": "$:/core/ui/EditorToolbar/heading-3",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-3",
"caption": "{{$:/language/Buttons/Heading3/Caption}}",
"description": "{{$:/language/Buttons/Heading3/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-3))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"3\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-4": {
"title": "$:/core/ui/EditorToolbar/heading-4",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-4",
"caption": "{{$:/language/Buttons/Heading4/Caption}}",
"description": "{{$:/language/Buttons/Heading4/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-4))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"4\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-5": {
"title": "$:/core/ui/EditorToolbar/heading-5",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-5",
"caption": "{{$:/language/Buttons/Heading5/Caption}}",
"description": "{{$:/language/Buttons/Heading5/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-5))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"5\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-6": {
"title": "$:/core/ui/EditorToolbar/heading-6",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-6",
"caption": "{{$:/language/Buttons/Heading6/Caption}}",
"description": "{{$:/language/Buttons/Heading6/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-6))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"6\"\n/>\n"
},
"$:/core/ui/EditorToolbar/italic": {
"title": "$:/core/ui/EditorToolbar/italic",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/italic",
"caption": "{{$:/language/Buttons/Italic/Caption}}",
"description": "{{$:/language/Buttons/Italic/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((italic))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"//\"\n\tsuffix=\"//\"\n/>\n"
},
"$:/core/ui/EditorToolbar/line-width-dropdown": {
"title": "$:/core/ui/EditorToolbar/line-width-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/LineWidth/\n\n\\define toolbar-line-width-inner()\n<$button tag=\"a\" tooltip=\"\"\"$(line-width)$\"\"\">\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/LineWidth\"\n\t$value=\"$(line-width)$\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<div style=\"display: inline-block; margin: 4px calc(80px - $(line-width)$); background-color: #000; width: calc(100px + $(line-width)$ * 2); height: $(line-width)$; border-radius: 120px; vertical-align: middle;\"/>\n\n<span style=\"margin-left: 8px;\">\n\n<$text text=\"\"\"$(line-width)$\"\"\"/>\n\n<$reveal state=\"$:/config/BitmapEditor/LineWidth\" type=\"match\" text=\"\"\"$(line-width)$\"\"\" tag=\"span\">\n\n<$entity entity=\" \"/>\n\n<$entity entity=\"✓\"/>\n\n</$reveal>\n\n</span>\n\n</$button>\n\\end\n\n''<<lingo Hint>>''\n\n<$list filter={{$:/config/BitmapEditor/LineWidths}} variable=\"line-width\">\n\n<<toolbar-line-width-inner>>\n\n</$list>\n"
},
"$:/core/ui/EditorToolbar/line-width": {
"title": "$:/core/ui/EditorToolbar/line-width",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/line-width",
"caption": "{{$:/language/Buttons/LineWidth/Caption}}",
"description": "{{$:/language/Buttons/LineWidth/Hint}}",
"condition": "[<targetTiddler>is[image]] -[<targetTiddler>type[image/svg+xml]]",
"dropdown": "$:/core/ui/EditorToolbar/line-width-dropdown",
"text": "<$text text={{$:/config/BitmapEditor/LineWidth}}/>\n"
},
"$:/core/ui/EditorToolbar/link-dropdown": {
"title": "$:/core/ui/EditorToolbar/link-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Link/\n\n\\define add-link-actions()\n<$action-sendmessage $message=\"tm-edit-text-operation\" $param=\"make-link\" text={{$(linkTiddler)$}} />\n<$action-deletetiddler $filter=\"[<dropdown-state>] [<searchTiddler>] [<linkTiddler>] [<storeTitle>] [<searchListState>]\"/>\n\\end\n\n\\define get-focus-selector() [data-tiddler-title=\"$(cssEscapedTitle)$\"] .tc-create-wikitext-link input\n\n\\define cancel-search-actions-inner()\n<$set name=\"userInput\" value={{{ [<storeTitle>get[text]] }}}><$list filter=\"[<searchTiddler>get[text]!match<userInput>]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[<searchTiddler>] [<linkTiddler>] [<storeTitle>] [<searchListState>]\"/>\"\"\"><$action-setfield $tiddler=<<searchTiddler>> text=<<userInput>>/><$action-setfield $tiddler=<<refreshTitle>> text=\"yes\"/></$list></$set>\n\\end\n\n\\define cancel-search-actions() <$list filter=\"[<storeTitle>!has[text]] +[<searchTiddler>!has[text]]\" emptyMessage=\"\"\"<<cancel-search-actions-inner>>\"\"\"><$action-sendmessage $message=\"tm-edit-text-operation\" $param=\"wrap-selection\" prefix=\"\" suffix=\"\"/></$list>\n\n\\define external-link()\n<$button class=\"tc-btn-invisible\" style=\"width: auto; display: inline-block; background-colour: inherit;\" actions=<<add-link-actions>>>\n{{$:/core/images/chevron-right}}\n</$button>\n\\end\n\n\\define set-next-input-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab/search-results/sidebar\" tag=\"$:/tags/SearchResults\" beforeafter=\"$beforeafter$\" defaultState={{$:/config/SearchResults/Default}} actions=\"\"\"<$action-setfield $tiddler=\"$:/state/search/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define body(config-title)\n''<<lingo Hint>>''\n\n<$vars searchTiddler=\"\"\"$config-title$/search\"\"\" linkTiddler=\"\"\"$config-title$/link\"\"\" linktext=\"\" searchListState=<<qualify \"$:/temp/link-search/selected-item\">> refreshTitle=<<qualify \"$:/temp/link-search/refresh\">> storeTitle=<<qualify \"$:/temp/link-search/input\">>>\n\n<$vars linkTiddler=<<searchTiddler>>>\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">> class=\"tc-create-wikitext-link\">\n<$macrocall $name=\"keyboard-driven-input\" tiddler=<<searchTiddler>> storeTitle=<<storeTitle>>\n\t\tselectionStateTitle=<<searchListState>> refreshTitle=<<refreshTitle>> type=\"search\" filterMinLength=\"1\"\n\t\ttag=\"input\" focus=\"true\" class=\"tc-popup-handle\" inputCancelActions=<<cancel-search-actions>> \n\t\tinputAcceptActions=<<add-link-actions>> placeholder={{$:/language/Search/Search}} default=\"\" \n\t\tconfigTiddlerFilter=\"[[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}]\" />\n</$keyboard>\n</$keyboard>\n<$reveal tag=\"span\" state=<<storeTitle>> type=\"nomatch\" text=\"\">\n<<external-link>>\n<$button class=\"tc-btn-invisible\" style=\"width: auto; display: inline-block; background-colour: inherit;\">\n<<cancel-search-actions>><$set name=\"cssEscapedTitle\" value={{{ [<storyTiddler>escapecss[]] }}}><$action-sendmessage $message=\"tm-focus-selector\" $param=<<get-focus-selector>>/></$set>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</$vars>\n\n<$reveal tag=\"div\" state=<<storeTitle>> type=\"nomatch\" text=\"\">\n\n<$linkcatcher actions=<<add-link-actions>> to=<<linkTiddler>>>\n\n<$vars userInput={{{ [<storeTitle>get[text]] }}} configTiddler={{{ [[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}] }}}>\n\n{{$:/core/ui/SearchResults}}\n\n</$vars>\n\n</$linkcatcher>\n\n</$reveal>\n\n</$vars>\n\n\\end\n\n<$macrocall $name=\"body\" config-title=<<qualify \"$:/state/Link/\">>/>\n"
},
"$:/core/ui/EditorToolbar/link": {
"title": "$:/core/ui/EditorToolbar/link",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/link",
"caption": "{{$:/language/Buttons/Link/Caption}}",
"description": "{{$:/language/Buttons/Link/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((link))",
"dropdown": "$:/core/ui/EditorToolbar/link-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/linkify": {
"title": "$:/core/ui/EditorToolbar/linkify",
"caption": "{{$:/language/Buttons/Linkify/Caption}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"description": "{{$:/language/Buttons/Linkify/Hint}}",
"icon": "$:/core/images/linkify",
"list-before": "$:/core/ui/EditorToolbar/mono-block",
"shortcuts": "((linkify))",
"tags": "$:/tags/EditorToolbar",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"[[\"\n\tsuffix=\"]]\"\n/>\n"
},
"$:/core/ui/EditorToolbar/list-bullet": {
"title": "$:/core/ui/EditorToolbar/list-bullet",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/list-bullet",
"caption": "{{$:/language/Buttons/ListBullet/Caption}}",
"description": "{{$:/language/Buttons/ListBullet/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((list-bullet))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"*\"\n\tcount=\"1\"\n/>\n"
},
"$:/core/ui/EditorToolbar/list-number": {
"title": "$:/core/ui/EditorToolbar/list-number",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/list-number",
"caption": "{{$:/language/Buttons/ListNumber/Caption}}",
"description": "{{$:/language/Buttons/ListNumber/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((list-number))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"#\"\n\tcount=\"1\"\n/>\n"
},
"$:/core/ui/EditorToolbar/mono-block": {
"title": "$:/core/ui/EditorToolbar/mono-block",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/mono-block",
"caption": "{{$:/language/Buttons/MonoBlock/Caption}}",
"description": "{{$:/language/Buttons/MonoBlock/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((mono-block))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-lines\"\n\tprefix=\"\n```\"\n\tsuffix=\"```\"\n/>\n"
},
"$:/core/ui/EditorToolbar/mono-line": {
"title": "$:/core/ui/EditorToolbar/mono-line",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/mono-line",
"caption": "{{$:/language/Buttons/MonoLine/Caption}}",
"description": "{{$:/language/Buttons/MonoLine/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((mono-line))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"`\"\n\tsuffix=\"`\"\n/>\n"
},
"$:/core/ui/EditorToolbar/more-dropdown": {
"title": "$:/core/ui/EditorToolbar/more-dropdown",
"text": "\\define config-title()\n$:/config/EditorToolbarButtons/Visibility/$(toolbarItem)$\n\\end\n\n\\define conditional-button()\n<$list filter={{$(toolbarItem)$!!condition}} variable=\"condition\">\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/toolbar/button\" mode=\"inline\"/> <$transclude tiddler=<<toolbarItem>> field=\"description\"/>\n</$list>\n\\end\n\n<div class=\"tc-text-editor-toolbar-more\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]] -[[$:/core/ui/EditorToolbar/more]]\">\n<$reveal type=\"match\" state=<<config-visibility-title>> text=\"hide\" tag=\"div\">\n<<conditional-button>>\n</$reveal>\n</$list>\n</div>\n"
},
"$:/core/ui/EditorToolbar/more": {
"title": "$:/core/ui/EditorToolbar/more",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/down-arrow",
"caption": "{{$:/language/Buttons/More/Caption}}",
"description": "{{$:/language/Buttons/More/Hint}}",
"condition": "[<targetTiddler>]",
"dropdown": "$:/core/ui/EditorToolbar/more-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/opacity-dropdown": {
"title": "$:/core/ui/EditorToolbar/opacity-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Opacity/\n\n\\define toolbar-opacity-inner()\n<$button tag=\"a\" tooltip=\"\"\"$(opacity)$\"\"\">\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/Opacity\"\n\t$value=\"$(opacity)$\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<div style=\"display: inline-block; vertical-align: middle; background-color: $(current-paint-colour)$; opacity: $(opacity)$; width: 1em; height: 1em; border-radius: 50%;\"/>\n\n<span style=\"margin-left: 8px;\">\n\n<$text text=\"\"\"$(opacity)$\"\"\"/>\n\n<$reveal state=\"$:/config/BitmapEditor/Opacity\" type=\"match\" text=\"\"\"$(opacity)$\"\"\" tag=\"span\">\n\n<$entity entity=\" \"/>\n\n<$entity entity=\"✓\"/>\n\n</$reveal>\n\n</span>\n\n</$button>\n\\end\n\n\\define toolbar-opacity()\n''<<lingo Hint>>''\n\n<$list filter={{$:/config/BitmapEditor/Opacities}} variable=\"opacity\">\n\n<<toolbar-opacity-inner>>\n\n</$list>\n\\end\n\n<$set name=\"current-paint-colour\" value={{$:/config/BitmapEditor/Colour}}>\n\n<$set name=\"current-opacity\" value={{$:/config/BitmapEditor/Opacity}}>\n\n<<toolbar-opacity>>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/EditorToolbar/opacity": {
"title": "$:/core/ui/EditorToolbar/opacity",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/opacity",
"caption": "{{$:/language/Buttons/Opacity/Caption}}",
"description": "{{$:/language/Buttons/Opacity/Hint}}",
"condition": "[<targetTiddler>is[image]] -[<targetTiddler>type[image/svg+xml]]",
"dropdown": "$:/core/ui/EditorToolbar/opacity-dropdown",
"text": "<$text text={{$:/config/BitmapEditor/Opacity}}/>\n"
},
"$:/core/ui/EditorToolbar/paint-dropdown": {
"title": "$:/core/ui/EditorToolbar/paint-dropdown",
"text": "''{{$:/language/Buttons/Paint/Hint}}''\n\n<$macrocall $name=\"colour-picker\" actions=\"\"\"\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/Colour\"\n\t$value=<<colour-picker-value>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n"
},
"$:/core/ui/EditorToolbar/paint": {
"title": "$:/core/ui/EditorToolbar/paint",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/paint",
"caption": "{{$:/language/Buttons/Paint/Caption}}",
"description": "{{$:/language/Buttons/Paint/Hint}}",
"condition": "[<targetTiddler>is[image]] -[<targetTiddler>type[image/svg+xml]]",
"dropdown": "$:/core/ui/EditorToolbar/paint-dropdown",
"text": "\\define toolbar-paint()\n<div style=\"display: inline-block; vertical-align: middle; background-color: $(colour-picker-value)$; width: 1em; height: 1em; border-radius: 50%;\"/>\n\\end\n<$set name=\"colour-picker-value\" value={{$:/config/BitmapEditor/Colour}}>\n<<toolbar-paint>>\n</$set>\n"
},
"$:/core/ui/EditorToolbar/picture-dropdown": {
"title": "$:/core/ui/EditorToolbar/picture-dropdown",
"text": "\\define replacement-text()\n[img[$(imageTitle)$]]\n\\end\n\n''{{$:/language/Buttons/Picture/Hint}}''\n\n<$macrocall $name=\"image-picker\" actions=\"\"\"\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext=<<replacement-text>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n"
},
"$:/core/ui/EditorToolbar/picture": {
"title": "$:/core/ui/EditorToolbar/picture",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/picture",
"caption": "{{$:/language/Buttons/Picture/Caption}}",
"description": "{{$:/language/Buttons/Picture/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((picture))",
"dropdown": "$:/core/ui/EditorToolbar/picture-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/preview-type-dropdown": {
"title": "$:/core/ui/EditorToolbar/preview-type-dropdown",
"text": "\\define preview-type-button()\n<$button tag=\"a\">\n\n<$action-setfield $tiddler=\"$:/state/editpreviewtype\" $value=\"$(previewType)$\"/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$transclude tiddler=<<previewType>> field=\"caption\" mode=\"inline\">\n\n<$view tiddler=<<previewType>> field=\"title\" mode=\"inline\"/>\n\n</$transclude> \n\n<$reveal tag=\"span\" state=\"$:/state/editpreviewtype\" type=\"match\" text=<<previewType>> default=\"$:/core/ui/EditTemplate/body/preview/output\">\n\n<$entity entity=\" \"/>\n\n<$entity entity=\"✓\"/>\n\n</$reveal>\n\n</$button>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditPreview]!has[draft.of]]\" variable=\"previewType\">\n\n<<preview-type-button>>\n\n</$list>\n"
},
"$:/core/ui/EditorToolbar/preview-type": {
"title": "$:/core/ui/EditorToolbar/preview-type",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/chevron-down",
"caption": "{{$:/language/Buttons/PreviewType/Caption}}",
"description": "{{$:/language/Buttons/PreviewType/Hint}}",
"condition": "[all[shadows+tiddlers]tag[$:/tags/EditPreview]!has[draft.of]butfirst[]limit[1]]",
"button-classes": "tc-text-editor-toolbar-item-adjunct",
"dropdown": "$:/core/ui/EditorToolbar/preview-type-dropdown"
},
"$:/core/ui/EditorToolbar/preview": {
"title": "$:/core/ui/EditorToolbar/preview",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/preview-open",
"custom-icon": "yes",
"caption": "{{$:/language/Buttons/Preview/Caption}}",
"description": "{{$:/language/Buttons/Preview/Hint}}",
"condition": "[<targetTiddler>]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((preview))",
"text": "<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\" tag=\"span\">\n{{$:/core/images/preview-open}}\n<$action-setfield $tiddler=\"$:/state/showeditpreview\" $value=\"no\"/>\n</$reveal>\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\" tag=\"span\">\n{{$:/core/images/preview-closed}}\n<$action-setfield $tiddler=\"$:/state/showeditpreview\" $value=\"yes\"/>\n</$reveal>\n"
},
"$:/core/ui/EditorToolbar/quote": {
"title": "$:/core/ui/EditorToolbar/quote",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/quote",
"caption": "{{$:/language/Buttons/Quote/Caption}}",
"description": "{{$:/language/Buttons/Quote/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((quote))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-lines\"\n\tprefix=\"\n<<<\"\n\tsuffix=\"<<<\"\n/>\n"
},
"$:/core/ui/EditorToolbar/rotate-left": {
"title": "$:/core/ui/EditorToolbar/rotate-left",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/rotate-left",
"caption": "{{$:/language/Buttons/RotateLeft/Caption}}",
"description": "{{$:/language/Buttons/RotateLeft/Hint}}",
"condition": "[<targetTiddler>is[image]] -[<targetTiddler>type[image/svg+xml]]",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"rotate-left\"\n/>\n"
},
"$:/core/ui/EditorToolbar/size-dropdown": {
"title": "$:/core/ui/EditorToolbar/size-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Size/\n\n\\define toolbar-button-size-preset(config-title)\n<$set name=\"width\" filter=\"$(sizePair)$ +[first[]]\">\n\n<$set name=\"height\" filter=\"$(sizePair)$ +[last[]]\">\n\n<$button tag=\"a\">\n\n<$action-setfield\n\t$tiddler=\"\"\"$config-title$/new-width\"\"\"\n\t$value=<<width>>\n/>\n\n<$action-setfield\n\t$tiddler=\"\"\"$config-title$/new-height\"\"\"\n\t$value=<<height>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/presets-popup\"\"\"\n/>\n\n<$text text=<<width>>/> × <$text text=<<height>>/>\n\n</$button>\n\n</$set>\n\n</$set>\n\\end\n\n\\define toolbar-button-size(config-title)\n''{{$:/language/Buttons/Size/Hint}}''\n\n<<lingo Caption/Width>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/new-width\"\"\" default=<<tv-bitmap-editor-width>> focus=\"true\" size=\"8\"/> <<lingo Caption/Height>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/new-height\"\"\" default=<<tv-bitmap-editor-height>> size=\"8\"/> <$button popup=\"\"\"$config-title$/presets-popup\"\"\" class=\"tc-btn-invisible tc-popup-keep\" style=\"width: auto; display: inline-block; background-colour: inherit;\" selectedClass=\"tc-selected\">\n{{$:/core/images/down-arrow}}\n</$button>\n\n<$reveal tag=\"span\" state=\"\"\"$config-title$/presets-popup\"\"\" type=\"popup\" position=\"belowleft\" animate=\"yes\">\n\n<div class=\"tc-drop-down tc-popup-keep\">\n\n<$list filter={{$:/config/BitmapEditor/ImageSizes}} variable=\"sizePair\">\n\n<$macrocall $name=\"toolbar-button-size-preset\" config-title=\"$config-title$\"/>\n\n</$list>\n\n</div>\n\n</$reveal>\n\n<$button>\n<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"resize\"\n\twidth={{$config-title$/new-width}}\n\theight={{$config-title$/new-height}}\n/>\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/new-width\"\"\"\n/>\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/new-height\"\"\"\n/>\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n<<lingo Caption/Resize>>\n</$button>\n\\end\n\n<$macrocall $name=\"toolbar-button-size\" config-title=<<qualify \"$:/state/Size/\">>/>\n"
},
"$:/core/ui/EditorToolbar/size": {
"title": "$:/core/ui/EditorToolbar/size",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/size",
"caption": "{{$:/language/Buttons/Size/Caption}}",
"description": "{{$:/language/Buttons/Size/Hint}}",
"condition": "[<targetTiddler>is[image]] -[<targetTiddler>type[image/svg+xml]]",
"dropdown": "$:/core/ui/EditorToolbar/size-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/stamp-dropdown": {
"title": "$:/core/ui/EditorToolbar/stamp-dropdown",
"text": "\\define toolbar-button-stamp-inner()\n<$button tag=\"a\">\n\n<$list filter=\"[[$(snippetTitle)$]addsuffix[/prefix]is[missing]removesuffix[/prefix]addsuffix[/suffix]is[missing]]\">\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext={{$(snippetTitle)$}}\n/>\n\n</$list>\n\n\n<$list filter=\"[[$(snippetTitle)$]addsuffix[/prefix]is[missing]removesuffix[/prefix]addsuffix[/suffix]!is[missing]] [[$(snippetTitle)$]addsuffix[/prefix]!is[missing]removesuffix[/prefix]addsuffix[/suffix]is[missing]] [[$(snippetTitle)$]addsuffix[/prefix]!is[missing]removesuffix[/prefix]addsuffix[/suffix]!is[missing]]\">\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix={{{ [[$(snippetTitle)$]addsuffix[/prefix]get[text]] }}}\nsuffix={{{ [[$(snippetTitle)$]addsuffix[/suffix]get[text]] }}}\n/>\n\n</$list>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$transclude tiddler=<<snippetTitle>> field=\"caption\" mode=\"inline\">\n\n<$view tiddler=<<snippetTitle>> field=\"title\" />\n\n</$transclude>\n\n</$button>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TextEditor/Snippet]!has[draft.of]sort[caption]]\" variable=\"snippetTitle\">\n\n<<toolbar-button-stamp-inner>>\n\n</$list>\n\n----\n\n<$button tag=\"a\">\n\n<$action-sendmessage\n\t$message=\"tm-new-tiddler\"\n\ttags=\"$:/tags/TextEditor/Snippet\"\n\tcaption={{$:/language/Buttons/Stamp/New/Title}}\n\ttext={{$:/language/Buttons/Stamp/New/Text}}\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<em>\n\n<$text text={{$:/language/Buttons/Stamp/Caption/New}}/>\n\n</em>\n\n</$button>\n"
},
"$:/core/ui/EditorToolbar/stamp": {
"title": "$:/core/ui/EditorToolbar/stamp",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/stamp",
"caption": "{{$:/language/Buttons/Stamp/Caption}}",
"description": "{{$:/language/Buttons/Stamp/Hint}}",
"condition": "[<targetTiddler>type[]] [<targetTiddler>get[type]prefix[text/]] [<targetTiddler>get[type]match[application/javascript]] [<targetTiddler>get[type]match[application/json]] [<targetTiddler>get[type]match[application/x-tiddler-dictionary]] [<targetTiddler>get[type]match[image/svg+xml]] +[first[]]",
"shortcuts": "((stamp))",
"dropdown": "$:/core/ui/EditorToolbar/stamp-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/strikethrough": {
"title": "$:/core/ui/EditorToolbar/strikethrough",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/strikethrough",
"caption": "{{$:/language/Buttons/Strikethrough/Caption}}",
"description": "{{$:/language/Buttons/Strikethrough/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((strikethrough))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"~~\"\n\tsuffix=\"~~\"\n/>\n"
},
"$:/core/ui/EditorToolbar/subscript": {
"title": "$:/core/ui/EditorToolbar/subscript",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/subscript",
"caption": "{{$:/language/Buttons/Subscript/Caption}}",
"description": "{{$:/language/Buttons/Subscript/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((subscript))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\",,\"\n\tsuffix=\",,\"\n/>\n"
},
"$:/core/ui/EditorToolbar/superscript": {
"title": "$:/core/ui/EditorToolbar/superscript",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/superscript",
"caption": "{{$:/language/Buttons/Superscript/Caption}}",
"description": "{{$:/language/Buttons/Superscript/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((superscript))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"^^\"\n\tsuffix=\"^^\"\n/>\n"
},
"$:/core/ui/EditorToolbar/transcludify": {
"title": "$:/core/ui/EditorToolbar/transcludify",
"caption": "{{$:/language/Buttons/Transcludify/Caption}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"description": "{{$:/language/Buttons/Transcludify/Hint}}",
"icon": "$:/core/images/transcludify",
"list-before": "$:/core/ui/EditorToolbar/mono-block",
"shortcuts": "((transcludify))",
"tags": "$:/tags/EditorToolbar",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"{{\"\n\tsuffix=\"}}\"\n/>\n"
},
"$:/core/ui/EditorToolbar/underline": {
"title": "$:/core/ui/EditorToolbar/underline",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/underline",
"caption": "{{$:/language/Buttons/Underline/Caption}}",
"description": "{{$:/language/Buttons/Underline/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((underline))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"__\"\n\tsuffix=\"__\"\n/>\n"
},
"$:/core/Filters/AllTags": {
"title": "$:/core/Filters/AllTags",
"tags": "$:/tags/Filter",
"filter": "[tags[]!is[system]sort[title]]",
"description": "{{$:/language/Filters/AllTags}}",
"text": ""
},
"$:/core/Filters/AllTiddlers": {
"title": "$:/core/Filters/AllTiddlers",
"tags": "$:/tags/Filter",
"filter": "[!is[system]sort[title]]",
"description": "{{$:/language/Filters/AllTiddlers}}",
"text": ""
},
"$:/core/Filters/Drafts": {
"title": "$:/core/Filters/Drafts",
"tags": "$:/tags/Filter",
"filter": "[has[draft.of]sort[title]]",
"description": "{{$:/language/Filters/Drafts}}",
"text": ""
},
"$:/core/Filters/Missing": {
"title": "$:/core/Filters/Missing",
"tags": "$:/tags/Filter",
"filter": "[all[missing]sort[title]]",
"description": "{{$:/language/Filters/Missing}}",
"text": ""
},
"$:/core/Filters/Orphans": {
"title": "$:/core/Filters/Orphans",
"tags": "$:/tags/Filter",
"filter": "[all[orphans]sort[title]]",
"description": "{{$:/language/Filters/Orphans}}",
"text": ""
},
"$:/core/Filters/OverriddenShadowTiddlers": {
"title": "$:/core/Filters/OverriddenShadowTiddlers",
"tags": "$:/tags/Filter",
"filter": "[is[shadow]]",
"description": "{{$:/language/Filters/OverriddenShadowTiddlers}}",
"text": ""
},
"$:/core/Filters/RecentSystemTiddlers": {
"title": "$:/core/Filters/RecentSystemTiddlers",
"tags": "$:/tags/Filter",
"filter": "[has[modified]!sort[modified]limit[50]]",
"description": "{{$:/language/Filters/RecentSystemTiddlers}}",
"text": ""
},
"$:/core/Filters/RecentTiddlers": {
"title": "$:/core/Filters/RecentTiddlers",
"tags": "$:/tags/Filter",
"filter": "[!is[system]has[modified]!sort[modified]limit[50]]",
"description": "{{$:/language/Filters/RecentTiddlers}}",
"text": ""
},
"$:/core/Filters/SessionTiddlers": {
"title": "$:/core/Filters/SessionTiddlers",
"tags": "$:/tags/Filter",
"filter": "[haschanged[]]",
"description": "{{$:/language/Filters/SessionTiddlers}}",
"text": ""
},
"$:/core/Filters/ShadowTiddlers": {
"title": "$:/core/Filters/ShadowTiddlers",
"tags": "$:/tags/Filter",
"filter": "[all[shadows]sort[title]]",
"description": "{{$:/language/Filters/ShadowTiddlers}}",
"text": ""
},
"$:/core/Filters/StoryList": {
"title": "$:/core/Filters/StoryList",
"tags": "$:/tags/Filter",
"filter": "[list[$:/StoryList]] -$:/AdvancedSearch",
"description": "{{$:/language/Filters/StoryList}}",
"text": ""
},
"$:/core/Filters/SystemTags": {
"title": "$:/core/Filters/SystemTags",
"tags": "$:/tags/Filter",
"filter": "[all[shadows+tiddlers]tags[]is[system]sort[title]]",
"description": "{{$:/language/Filters/SystemTags}}",
"text": ""
},
"$:/core/Filters/SystemTiddlers": {
"title": "$:/core/Filters/SystemTiddlers",
"tags": "$:/tags/Filter",
"filter": "[is[system]sort[title]]",
"description": "{{$:/language/Filters/SystemTiddlers}}",
"text": ""
},
"$:/core/Filters/TypedTiddlers": {
"title": "$:/core/Filters/TypedTiddlers",
"tags": "$:/tags/Filter",
"filter": "[!is[system]has[type]each[type]sort[type]] -[type[text/vnd.tiddlywiki]]",
"description": "{{$:/language/Filters/TypedTiddlers}}",
"text": ""
},
"$:/core/ui/ImportListing": {
"title": "$:/core/ui/ImportListing",
"text": "\\define lingo-base() $:/language/Import/\n\n\\define messageField() message-$(payloadTiddler)$\n\n\\define payloadTitleFilter() [<currentTiddler>get<renameField>minlength[1]else<payloadTiddler>]\n\n\\define overWriteWarning()\n<$list filter=\"[<currentTiddler>!has<suppressedField>]\">\n<$text text={{{[subfilter<payloadTitleFilter>!is[tiddler]then[]] ~[<lingo-base>addsuffix[Listing/Rename/OverwriteWarning]get[text]]}}}/>\n</$list>\n\\end\n\n\\define selectionField() selection-$(payloadTiddler)$\n\n\\define renameField() rename-$(payloadTiddler)$\n\n\\define suppressedField() suppressed-$(payloadTiddler)$\n\n\\define newImportTitleTiddler() $:/temp/NewImportTitle-$(payloadTiddler)$\n\n\\define previewPopupState() $(currentTiddler)$!!popup-$(payloadTiddler)$\n\n\\define renameFieldState() $(currentTiddler)$!!state-rename-$(payloadTiddler)$\n\n\\define select-all-actions()\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" variable=\"payloadTiddler\">\n<$action-setfield $field={{{ [<payloadTiddler>addprefix[selection-]] }}} $value={{$:/state/import/select-all}}/>\n</$list>\n\\end\n\n<table class=\"tc-import-table\">\n<tbody>\n<tr>\n<th align=\"left\">\n<$checkbox tiddler=\"$:/state/import/select-all\" field=\"text\" checked=\"checked\" unchecked=\"unchecked\" default=\"checked\" actions=<<select-all-actions>>>\n<<lingo Listing/Select/Caption>>\n</$checkbox>\n</th>\n<th>\n<<lingo Listing/Title/Caption>>\n</th>\n<th>\n<<lingo Listing/Status/Caption>>\n</th>\n</tr>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" variable=\"payloadTiddler\">\n<tr class={{{[<currentTiddler>has<suppressedField>then[tc-row-disabled]] ~[subfilter<payloadTitleFilter>is[tiddler]then[tc-row-warning]] }}}>\n<td>\n<$checkbox field=<<selectionField>> checked=\"checked\" unchecked=\"unchecked\" default=\"checked\" disabled={{{[<currentTiddler>has<suppressedField>then[yes]else[no]]}}}/>\n</td>\n<td>\n<$reveal type=\"nomatch\" state=<<renameFieldState>> text=\"yes\" tag=\"div\">\n<$reveal type=\"nomatch\" state=<<previewPopupState>> text=\"yes\" tag=\"div\" class=\"tc-flex\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown tc-flex-grow-1 tc-word-break\" set=<<previewPopupState>> setTo=\"yes\" disabled={{{[<currentTiddler>has<suppressedField>then[yes]else[no]]}}}>\n<span class=\"tc-small-gap-right\">{{$:/core/images/right-arrow}}</span><$text text={{{[subfilter<payloadTitleFilter>]}}}/>\n</$button>\n<$list filter=\"[<currentTiddler>!has<suppressedField>]\"><$button class=\"tc-btn-invisible\" set=<<renameFieldState>> setTo=\"yes\" tooltip={{{[<lingo-base>addsuffix[Listing/Rename/Tooltip]get[text]]}}}>{{$:/core/images/edit-button}}</$button></$list>\n</$reveal>\n<$reveal type=\"match\" state=<<previewPopupState>> text=\"yes\" tag=\"div\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<previewPopupState>> setTo=\"no\">\n<span class=\"tc-small-gap-right\">{{$:/core/images/down-arrow}}</span><$text text={{{[subfilter<payloadTitleFilter>]}}}/>\n</$button>\n</$reveal>\n</$reveal>\n<$reveal type=\"match\" state=<<renameFieldState>> text=\"yes\" tag=\"div\">\n<$text text={{{[<lingo-base>addsuffix[Listing/Rename/Prompt]get[text]]}}}/>\n</$reveal>\n</td>\n<td>\n<$view field=<<messageField>>/>\n<<overWriteWarning>>\n</td>\n</tr>\n<$reveal type=\"match\" state=<<renameFieldState>> text=\"yes\" tag=\"tr\">\n<td colspan=\"3\">\n<div class=\"tc-flex\">\n<$edit-text tiddler=<<newImportTitleTiddler>> default={{{[subfilter<payloadTitleFilter>]}}} tag=\"input\" class=\"tc-import-rename tc-flex-grow-1\"/><span class=\"tc-small-gap-left\"><$button class=\"tc-btn-invisible\" set=<<renameFieldState>> setTo=\"no\" tooltip={{{[<lingo-base>addsuffix[Listing/Rename/CancelRename]get[text]]}}}>{{$:/core/images/close-button}}<$action-deletetiddler $tiddler=<<newImportTitleTiddler>>/></$button><span class=\"tc-small-gap-right\"/></span><$button class=\"tc-btn-invisible\" set=<<renameFieldState>> setTo=\"no\" tooltip={{{[<lingo-base>addsuffix[Listing/Rename/ConfirmRename]get[text]]}}}>{{$:/core/images/done-button}}<$action-setfield $field=<<renameField>> $value={{{[<newImportTitleTiddler>get[text]minlength[1]else<payloadTiddler>]}}} /><$action-deletetiddler $tiddler=<<newImportTitleTiddler>>/></$button>\n</div>\n</td>\n</$reveal>\n<tr>\n<td colspan=\"3\">\n<$reveal type=\"match\" text=\"yes\" state=<<previewPopupState>> tag=\"div\">\n<$list filter=\"[{$:/state/importpreviewtype}has[text]]\" variable=\"listItem\" emptyMessage={{$:/core/ui/ImportPreviews/Text}}>\n<$transclude tiddler={{$:/state/importpreviewtype}}/>\n</$list>\n</$reveal>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ImportPreviews/Diff": {
"title": "$:/core/ui/ImportPreviews/Diff",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/Diff}}",
"text": "<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle=<<payloadTiddler>> destTiddlerTitle=<<currentTiddler>> destSubTiddlerTitle=<<payloadTiddler>>/>\n"
},
"$:/core/ui/ImportPreviews/DiffFields": {
"title": "$:/core/ui/ImportPreviews/DiffFields",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/DiffFields}}",
"text": "<$macrocall $name=\"compareTiddlers\" sourceTiddlerTitle=<<payloadTiddler>> destTiddlerTitle=<<currentTiddler>> destSubTiddlerTitle=<<payloadTiddler>> exclude=\"text\"/>\n"
},
"$:/core/ui/ImportPreviews/Fields": {
"title": "$:/core/ui/ImportPreviews/Fields",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/Fields}}",
"text": "<table class=\"tc-view-field-table\">\n<tbody>\n<$list filter=\"[<payloadTiddler>subtiddlerfields<currentTiddler>sort[]] -text\" variable=\"fieldName\">\n<tr class=\"tc-view-field\">\n<td class=\"tc-view-field-name\">\n<$text text=<<fieldName>>/>\n</td>\n<td class=\"tc-view-field-value\">\n<$view field=<<fieldName>> tiddler=<<currentTiddler>> subtiddler=<<payloadTiddler>>/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ImportPreviews/Text": {
"title": "$:/core/ui/ImportPreviews/Text",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/Text}}",
"text": "<$transclude tiddler=<<currentTiddler>> subtiddler=<<payloadTiddler>> mode=\"block\"/>\n"
},
"$:/core/ui/ImportPreviews/TextRaw": {
"title": "$:/core/ui/ImportPreviews/TextRaw",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/TextRaw}}",
"text": "<pre><code><$view tiddler=<<currentTiddler>> subtiddler=<<payloadTiddler>> /></code></pre>"
},
"$:/core/ui/KeyboardShortcuts/advanced-search": {
"title": "$:/core/ui/KeyboardShortcuts/advanced-search",
"tags": "$:/tags/KeyboardShortcut",
"key": "((advanced-search))",
"text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\">\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\"[data-tiddler-title=\"$:/AdvancedSearch\"] .tc-search input\"\"\" preventScroll=\"true\"/>\n</$navigator>\n"
},
"$:/core/ui/KeyboardShortcuts/change-sidebar-layout": {
"title": "$:/core/ui/KeyboardShortcuts/change-sidebar-layout",
"tags": "$:/tags/KeyboardShortcut",
"key": "((change-sidebar-layout))",
"text": "<$list filter=\"[{$:/themes/tiddlywiki/vanilla/options/sidebarlayout}match[fixed-fluid]]\" \nemptyMessage=\"\"\"<$action-setfield $tiddler=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\" text=\"fixed-fluid\"/>\"\"\">\n<$action-setfield $tiddler=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\" text=\"fluid-fixed\"/>\n</$list>\n"
},
"$:/core/ui/KeyboardShortcuts/new-image": {
"title": "$:/core/ui/KeyboardShortcuts/new-image",
"tags": "$:/tags/KeyboardShortcut",
"key": "((new-image))",
"text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-image}}\n</$navigator>\n"
},
"$:/core/ui/KeyboardShortcuts/new-journal": {
"title": "$:/core/ui/KeyboardShortcuts/new-journal",
"tags": "$:/tags/KeyboardShortcut",
"key": "((new-journal))",
"text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-journal}}\n</$navigator>\n"
},
"$:/core/ui/KeyboardShortcuts/new-tiddler": {
"title": "$:/core/ui/KeyboardShortcuts/new-tiddler",
"tags": "$:/tags/KeyboardShortcut",
"key": "((new-tiddler))",
"text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-tiddler}}\n</$navigator>\n"
},
"$:/core/ui/KeyboardShortcuts/save-wiki": {
"title": "$:/core/ui/KeyboardShortcuts/save-wiki",
"tags": "$:/tags/KeyboardShortcut",
"key": "((save-wiki))",
"text": "<$wikify name=\"site-title\" text={{$:/config/SaveWikiButton/Filename}}>\n<$action-sendmessage $message=\"tm-save-wiki\" $param={{$:/config/SaveWikiButton/Template}} filename=<<site-title>>/>\n</$wikify>\n"
},
"$:/core/ui/KeyboardShortcuts/sidebar-search": {
"title": "$:/core/ui/KeyboardShortcuts/sidebar-search",
"tags": "$:/tags/KeyboardShortcut",
"key": "((sidebar-search))",
"text": "<$action-sendmessage $message=\"tm-focus-selector\" $param=\".tc-search input\"/>\n"
},
"$:/core/ui/KeyboardShortcuts/switcher": {
"title": "$:/core/ui/KeyboardShortcuts/switcher",
"tags": "$:/tags/KeyboardShortcut",
"key": "((layout-switcher))",
"text": "<$action-sendmessage $message=\"tm-show-switcher\" switch=\"layout\"/>"
},
"$:/core/ui/KeyboardShortcuts/toggle-sidebar": {
"title": "$:/core/ui/KeyboardShortcuts/toggle-sidebar",
"tags": "$:/tags/KeyboardShortcut",
"key": "((toggle-sidebar))",
"text": "<$list filter=\"[[$:/state/sidebar]is[missing]] [{$:/state/sidebar}removeprefix[yes]]\" emptyMessage=\"\"\"\n<$action-setfield $tiddler=\"$:/state/sidebar\" text=\"yes\"/>\n\"\"\">\n<$action-setfield $tiddler=\"$:/state/sidebar\" text=\"no\"/>\n</$list>\n"
},
"$:/snippets/LayoutSwitcher": {
"title": "$:/snippets/LayoutSwitcher",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/LayoutSwitcher/Caption}}",
"text": "<$linkcatcher to=\"$:/layout\">\n<div class=\"tc-chooser\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/Layout]] [[$:/core/ui/PageTemplate]] +[!is[draft]sort[name]]\">\n<$list filter=\"[{$:/layout}!has[text]]\" variable=\"ignore\" emptyMessage=\"\"\"\n<$set name=\"cls\" filter=\"[all[current]field:title{$:/layout}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>><$link to={{!!title}}>''<$transclude field=\"name\"/>'' - <$transclude field=\"description\"/></$link></div>\n</$set>\n\"\"\">\n<$set name=\"cls\" filter=\"[all[current]field:title[$:/core/ui/PageTemplate]]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>><$link to={{!!title}}>''<$transclude field=\"name\"/>'' - <$transclude field=\"description\"/></$link></div>\n</$set>\n</$list>\n</$list>\n</div>\n</$linkcatcher>\n"
},
"$:/core/ui/ListItemTemplate": {
"title": "$:/core/ui/ListItemTemplate",
"text": "<div class=\"tc-menu-list-item\">\n<$link />\n</div>"
},
"$:/Manager/ItemMain/Fields": {
"title": "$:/Manager/ItemMain/Fields",
"tags": "$:/tags/Manager/ItemMain",
"caption": "{{$:/language/Manager/Item/Fields}}",
"text": "<table>\n<tbody>\n<$list filter=\"[all[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n</tbody>\n</table>\n"
},
"$:/Manager/ItemMain/RawText": {
"title": "$:/Manager/ItemMain/RawText",
"tags": "$:/tags/Manager/ItemMain",
"caption": "{{$:/language/Manager/Item/RawText}}",
"text": "<pre><code><$view/></code></pre>\n"
},
"$:/Manager/ItemMain/WikifiedText": {
"title": "$:/Manager/ItemMain/WikifiedText",
"tags": "$:/tags/Manager/ItemMain",
"caption": "{{$:/language/Manager/Item/WikifiedText}}",
"text": "<$transclude mode=\"block\"/>\n"
},
"$:/Manager/ItemSidebar/Colour": {
"title": "$:/Manager/ItemSidebar/Colour",
"tags": "$:/tags/Manager/ItemSidebar",
"caption": "{{$:/language/Manager/Item/Colour}}",
"text": "\\define swatch-styles()\nheight: 1em;\nbackground-color: $(colour)$\n\\end\n\n<$vars colour={{!!color}}>\n<p style=<<swatch-styles>>/>\n</$vars>\n<p>\n<$edit-text field=\"color\" tag=\"input\" type=\"color\"/> / <$edit-text field=\"color\" tag=\"input\" type=\"text\" size=\"9\"/>\n</p>\n"
},
"$:/Manager/ItemSidebar/Icon": {
"title": "$:/Manager/ItemSidebar/Icon",
"tags": "$:/tags/Manager/ItemSidebar",
"caption": "{{$:/language/Manager/Item/Icon}}",
"text": "<p>\n<div class=\"tc-manager-icon-editor\">\n<$button popup=<<qualify \"$:/state/popup/image-picker\">> class=\"tc-btn-invisible\">\n<$transclude tiddler={{!!icon}}>\n{{$:/language/Manager/Item/Icon/None}}\n</$transclude>\n</$button>\n<div class=\"tc-block-dropdown-wrapper\" style=\"position: static;\">\n<$reveal state=<<qualify \"$:/state/popup/image-picker\">> type=\"nomatch\" text=\"\" default=\"\" tag=\"div\" class=\"tc-popup\">\n<div class=\"tc-block-dropdown tc-popup-keep\" style=\"width: 80%; left: 10%; right: 10%; padding: 0.5em;\">\n<$macrocall $name=\"image-picker-include-tagged-images\" actions=\"\"\"\n<$action-setfield $field=\"icon\" $value=<<imageTitle>>/>\n<$action-deletetiddler $tiddler=<<qualify \"$:/state/popup/image-picker\">>/>\n\"\"\"/>\n</div>\n</$reveal>\n</div>\n</div>\n</p>\n"
},
"$:/Manager/ItemSidebar/Tags": {
"title": "$:/Manager/ItemSidebar/Tags",
"tags": "$:/tags/Manager/ItemSidebar",
"caption": "{{$:/language/Manager/Item/Tags}}",
"text": "\\whitespace trim\n\\define tag-checkbox-actions()\n<$action-listops\n\t$tiddler=\"$:/config/Manager/RecentTags\"\n\t$subfilter=\"[<tag>] [list[$:/config/Manager/RecentTags]] +[limit[12]]\"\n/>\n\\end\n\n\\define tag-picker-actions()\n<<tag-checkbox-actions>>\n\\end\n\n<p>\n<$list filter=\"[all[current]tags[]] [list[$:/config/Manager/RecentTags]] +[sort[title]] \" variable=\"tag\" storyview=\"pop\">\n<div>\n<$checkbox tiddler=<<currentTiddler>> tag=<<tag>> actions=<<tag-checkbox-actions>>>\n<$macrocall $name=\"tag-pill\" tag=<<tag>>/>\n</$checkbox>\n</div>\n</$list>\n</p>\n<p>\n<$fieldmangler>\n<$macrocall $name=\"tag-picker\" actions=<<tag-picker-actions>>/>\n</$fieldmangler>\n</p>\n"
},
"$:/Manager/ItemSidebar/Tools": {
"title": "$:/Manager/ItemSidebar/Tools",
"tags": "$:/tags/Manager/ItemSidebar",
"caption": "{{$:/language/Manager/Item/Tools}}",
"text": "<p>\n<$button to=<<currentTiddler>>>{{$:/core/images/link}} open</$button>\n</p>\n<p>\n<$button message=\"tm-edit-tiddler\" param=<<currentTiddler>>>{{$:/core/images/edit-button}} edit</$button>\n</p>\n"
},
"$:/Manager": {
"title": "$:/Manager",
"icon": "$:/core/images/list",
"color": "#bbb",
"text": "\\define lingo-base() $:/language/Manager/\n\n\\define list-item-content-item()\n<div class=\"tc-manager-list-item-content-item\">\n\t<$vars state-title=\"\"\"$:/state/popup/manager/item/$(listItem)$\"\"\">\n\t\t<$reveal state=<<state-title>> type=\"match\" text=\"show\" default=\"show\" tag=\"div\">\n\t\t\t<$button set=<<state-title>> setTo=\"hide\" class=\"tc-btn-invisible tc-manager-list-item-content-item-heading\">\n\t\t\t\t{{$:/core/images/down-arrow}} <$transclude tiddler=<<listItem>> field=\"caption\"/>\n\t\t\t</$button>\n\t\t</$reveal>\n\t\t<$reveal state=<<state-title>> type=\"nomatch\" text=\"show\" default=\"show\" tag=\"div\">\n\t\t\t<$button set=<<state-title>> setTo=\"show\" class=\"tc-btn-invisible tc-manager-list-item-content-item-heading\">\n\t\t\t\t{{$:/core/images/right-arrow}} <$transclude tiddler=<<listItem>> field=\"caption\"/>\n\t\t\t</$button>\n\t\t</$reveal>\n\t\t<$reveal state=<<state-title>> type=\"match\" text=\"show\" default=\"show\" tag=\"div\" class=\"tc-manager-list-item-content-item-body\">\n\t\t\t<$transclude tiddler=<<listItem>>/>\n\t\t</$reveal>\n\t</$vars>\n</div>\n\\end\n\n<div class=\"tc-manager-wrapper\">\n\t<div class=\"tc-manager-controls\">\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Show/Prompt>> <$select tiddler=\"$:/config/Manager/Show\" default=\"tiddlers\">\n\t\t\t\t<option value=\"tiddlers\"><<lingo Controls/Show/Option/Tiddlers>></option>\n\t\t\t\t<option value=\"tags\"><<lingo Controls/Show/Option/Tags>></option>\n\t\t\t</$select>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Search/Prompt>> <$edit-text tiddler=\"$:/config/Manager/Filter\" tag=\"input\" default=\"\" placeholder={{$:/language/Manager/Controls/Search/Placeholder}}/>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/FilterByTag/Prompt>> <$select tiddler=\"$:/config/Manager/Tag\" default=\"\">\n\t\t\t\t<option value=\"\"><<lingo Controls/FilterByTag/None>></option>\n\t\t\t\t<$list filter=\"[!is{$:/config/Manager/System}tags[]!is[system]sort[title]]\" variable=\"tag\">\n\t\t\t\t\t<option value=<<tag>>><$text text=<<tag>>/></option>\n\t\t\t\t</$list>\n\t\t\t</$select>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Sort/Prompt>> <$select tiddler=\"$:/config/Manager/Sort\" default=\"title\">\n\t\t\t\t<optgroup label=\"Common\">\n\t\t\t\t\t<$list filter=\"title modified modifier created creator created\" variable=\"field\">\n\t\t\t\t\t\t<option value=<<field>>><$text text=<<field>>/></option>\n\t\t\t\t\t</$list>\n\t\t\t\t</optgroup>\n\t\t\t\t<optgroup label=\"All\">\n\t\t\t\t\t<$list filter=\"[all{$:/config/Manager/Show}!is{$:/config/Manager/System}fields[]sort[title]] -title -modified -modifier -created -creator -created\" variable=\"field\">\n\t\t\t\t\t\t<option value=<<field>>><$text text=<<field>>/></option>\n\t\t\t\t\t</$list>\n\t\t\t\t</optgroup>\n\t\t\t</$select>\n\t\t\t<$checkbox tiddler=\"$:/config/Manager/Order\" field=\"text\" checked=\"reverse\" unchecked=\"forward\" default=\"forward\">\n\t\t\t\t<<lingo Controls/Order/Prompt>>\n\t\t\t</$checkbox>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<$checkbox tiddler=\"$:/config/Manager/System\" field=\"text\" checked=\"\" unchecked=\"system\" default=\"system\">\n\t\t\t\t{{$:/language/SystemTiddlers/Include/Prompt}}\n\t\t\t</$checkbox>\n\t\t</div>\n\t</div>\n\t<div class=\"tc-manager-list\">\n\t\t<$list filter=\"[all{$:/config/Manager/Show}!is{$:/config/Manager/System}search{$:/config/Manager/Filter}tag:strict{$:/config/Manager/Tag}sort{$:/config/Manager/Sort}order{$:/config/Manager/Order}]\">\n\t\t\t<$vars transclusion=<<currentTiddler>>>\n\t\t\t\t<div style=\"tc-manager-list-item\">\n\t\t\t\t\t<$button popup=<<qualify \"$:/state/manager/popup\">> class=\"tc-btn-invisible tc-manager-list-item-heading\" selectedClass=\"tc-manager-list-item-heading-selected\">\n\t\t\t\t\t\t<$text text=<<currentTiddler>>/>\n\t\t\t\t\t</$button>\n\t\t\t\t\t<$reveal state=<<qualify \"$:/state/manager/popup\">> type=\"nomatch\" text=\"\" default=\"\" tag=\"div\" class=\"tc-manager-list-item-content tc-popup-handle\">\n\t\t\t\t\t\t<div class=\"tc-manager-list-item-content-tiddler\">\n\t\t\t\t\t\t\t<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Manager/ItemMain]!has[draft.of]]\" variable=\"listItem\">\n\t\t\t\t\t\t\t\t<<list-item-content-item>>\n\t\t\t\t\t\t\t</$list>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"tc-manager-list-item-content-sidebar\">\n\t\t\t\t\t\t\t<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Manager/ItemSidebar]!has[draft.of]]\" variable=\"listItem\">\n\t\t\t\t\t\t\t\t<<list-item-content-item>>\n\t\t\t\t\t\t\t</$list>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</$reveal>\n\t\t\t\t</div>\n\t\t\t</$vars>\n\t\t</$list>\n\t</div>\n</div>\n"
},
"$:/core/ui/MissingTemplate": {
"title": "$:/core/ui/MissingTemplate",
"text": "<div class=\"tc-tiddler-missing\">\n<$button popup=<<qualify \"$:/state/popup/missing\">> class=\"tc-btn-invisible tc-missing-tiddler-label\">\n<$view field=\"title\" format=\"text\" />\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/missing\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n<hr>\n<$list filter=\"[all[current]backlinks[]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n</div>\n"
},
"$:/core/ui/MoreSideBar/All": {
"title": "$:/core/ui/MoreSideBar/All",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/All/Caption}}",
"text": "<$list filter={{$:/core/Filters/AllTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Drafts": {
"title": "$:/core/ui/MoreSideBar/Drafts",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Drafts/Caption}}",
"text": "<$list filter={{$:/core/Filters/Drafts!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Explorer": {
"title": "$:/core/ui/MoreSideBar/Explorer",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Explorer/Caption}}",
"text": "<<tree \"$:/\">>\n"
},
"$:/core/ui/MoreSideBar/Missing": {
"title": "$:/core/ui/MoreSideBar/Missing",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Missing/Caption}}",
"text": "<$list filter={{$:/core/Filters/Missing!!filter}} template=\"$:/core/ui/MissingTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Orphans": {
"title": "$:/core/ui/MoreSideBar/Orphans",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Orphans/Caption}}",
"text": "<$list filter={{$:/core/Filters/Orphans!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Plugins": {
"title": "$:/core/ui/MoreSideBar/Plugins",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/ControlPanel/Plugins/Caption}}",
"text": "\n{{$:/language/ControlPanel/Plugins/Installed/Hint}}\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar/Plugins]!has[draft.of]]\" default=\"$:/core/ui/MoreSideBar/Plugins/Plugins\" explicitState=\"$:/state/tab-1163638994\"/>\n"
},
"$:/core/ui/MoreSideBar/Recent": {
"title": "$:/core/ui/MoreSideBar/Recent",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Recent/Caption}}",
"text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n"
},
"$:/core/ui/MoreSideBar/Shadows": {
"title": "$:/core/ui/MoreSideBar/Shadows",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Shadows/Caption}}",
"text": "<$list filter={{$:/core/Filters/ShadowTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/System": {
"title": "$:/core/ui/MoreSideBar/System",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/System/Caption}}",
"text": "<$list filter={{$:/core/Filters/SystemTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Tags": {
"title": "$:/core/ui/MoreSideBar/Tags",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Tags/Caption}}",
"text": "<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n{{$:/core/ui/Buttons/tag-manager}}\n\n</$set>\n\n</$set>\n\n</$set>\n\n<$list filter={{$:/core/Filters/AllTags!!filter}}>\n\n<$transclude tiddler=\"$:/core/ui/TagTemplate\"/>\n\n</$list>\n\n<hr class=\"tc-untagged-separator\">\n\n{{$:/core/ui/UntaggedTemplate}}\n"
},
"$:/core/ui/MoreSideBar/Types": {
"title": "$:/core/ui/MoreSideBar/Types",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Types/Caption}}",
"text": "<$list filter={{$:/core/Filters/TypedTiddlers!!filter}}>\n<div class=\"tc-menu-list-item\">\n<$view field=\"type\"/>\n<$list filter=\"[type{!!type}!is[system]sort[title]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link to={{!!title}}><$view field=\"title\"/></$link>\n</div>\n</$list>\n</div>\n</$list>\n"
},
"$:/core/ui/MoreSideBar/Plugins/Languages": {
"title": "$:/core/ui/MoreSideBar/Plugins/Languages",
"tags": "$:/tags/MoreSideBar/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}}",
"text": "<$list filter=\"[!has[draft.of]plugin-type[language]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}/>\n"
},
"$:/core/ui/MoreSideBar/Plugins/Plugins": {
"title": "$:/core/ui/MoreSideBar/Plugins/Plugins",
"tags": "$:/tags/MoreSideBar/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}}",
"text": "<$list filter=\"[!has[draft.of]plugin-type[plugin]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}>>/>\n"
},
"$:/core/ui/MoreSideBar/Plugins/Theme": {
"title": "$:/core/ui/MoreSideBar/Plugins/Theme",
"tags": "$:/tags/MoreSideBar/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}}",
"text": "<$list filter=\"[!has[draft.of]plugin-type[theme]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}/>\n"
},
"$:/core/ui/Buttons/advanced-search": {
"title": "$:/core/ui/Buttons/advanced-search",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/advanced-search-button}} {{$:/language/Buttons/AdvancedSearch/Caption}}",
"description": "{{$:/language/Buttons/AdvancedSearch/Hint}}",
"text": "\\whitespace trim\n\\define advanced-search-button(class)\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/advanced-search-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/AdvancedSearch/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/AdvancedSearch]]\" emptyMessage=<<advanced-search-button>>>\n<<advanced-search-button \"tc-selected\">>\n</$list>\n"
},
"$:/core/ui/Buttons/close-all": {
"title": "$:/core/ui/Buttons/close-all",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/close-all-button}} {{$:/language/Buttons/CloseAll/Caption}}",
"description": "{{$:/language/Buttons/CloseAll/Hint}}",
"text": "<$button message=\"tm-close-all-tiddlers\" tooltip={{$:/language/Buttons/CloseAll/Hint}} aria-label={{$:/language/Buttons/CloseAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/close-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/CloseAll/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/control-panel": {
"title": "$:/core/ui/Buttons/control-panel",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/options-button}} {{$:/language/Buttons/ControlPanel/Caption}}",
"description": "{{$:/language/Buttons/ControlPanel/Hint}}",
"text": "\\whitespace trim\n\\define control-panel-button(class)\n<$button to=\"$:/ControlPanel\" tooltip={{$:/language/Buttons/ControlPanel/Hint}} aria-label={{$:/language/Buttons/ControlPanel/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/options-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/ControlPanel/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/ControlPanel]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
},
"$:/core/ui/Buttons/encryption": {
"title": "$:/core/ui/Buttons/encryption",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/locked-padlock}} {{$:/language/Buttons/Encryption/Caption}}",
"description": "{{$:/language/Buttons/Encryption/Hint}}",
"text": "\\whitespace trim\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-clear-password\" tooltip={{$:/language/Buttons/Encryption/ClearPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/ClearPassword/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/locked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Encryption/ClearPassword/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-set-password\" tooltip={{$:/language/Buttons/Encryption/SetPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/SetPassword/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/unlocked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Encryption/SetPassword/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n"
},
"$:/core/ui/Buttons/export-page": {
"title": "$:/core/ui/Buttons/export-page",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportPage/Caption}}",
"description": "{{$:/language/Buttons/ExportPage/Hint}}",
"text": "<$macrocall $name=\"exportButton\" exportFilter=\"[!is[system]sort[title]]\" lingoBase=\"$:/language/Buttons/ExportPage/\"/>"
},
"$:/core/ui/Buttons/fold-all": {
"title": "$:/core/ui/Buttons/fold-all",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/fold-all-button}} {{$:/language/Buttons/FoldAll/Caption}}",
"description": "{{$:/language/Buttons/FoldAll/Hint}}",
"text": "<$button tooltip={{$:/language/Buttons/FoldAll/Hint}} aria-label={{$:/language/Buttons/FoldAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-all-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FoldAll/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/full-screen": {
"title": "$:/core/ui/Buttons/full-screen",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/full-screen-button}} {{$:/language/Buttons/FullScreen/Caption}}",
"description": "{{$:/language/Buttons/FullScreen/Hint}}",
"text": "<$button message=\"tm-full-screen\" tooltip={{$:/language/Buttons/FullScreen/Hint}} aria-label={{$:/language/Buttons/FullScreen/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/full-screen-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FullScreen/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/home": {
"title": "$:/core/ui/Buttons/home",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/home-button}} {{$:/language/Buttons/Home/Caption}}",
"description": "{{$:/language/Buttons/Home/Hint}}",
"text": "<$button message=\"tm-home\" tooltip={{$:/language/Buttons/Home/Hint}} aria-label={{$:/language/Buttons/Home/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/home-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Home/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/import": {
"title": "$:/core/ui/Buttons/import",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/import-button}} {{$:/language/Buttons/Import/Caption}}",
"description": "{{$:/language/Buttons/Import/Hint}}",
"text": "<div class=\"tc-file-input-wrapper\">\n<$button tooltip={{$:/language/Buttons/Import/Hint}} aria-label={{$:/language/Buttons/Import/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/import-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Import/Caption}}/></span>\n</$list>\n</$button>\n<$browse tooltip={{$:/language/Buttons/Import/Hint}}/>\n</div>"
},
"$:/core/ui/Buttons/language": {
"title": "$:/core/ui/Buttons/language",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/globe}} {{$:/language/Buttons/Language/Caption}}",
"description": "{{$:/language/Buttons/Language/Hint}}",
"text": "\\whitespace trim\n\\define flag-title()\n$(languagePluginTitle)$/icon\n\\end\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/language\">> tooltip={{$:/language/Buttons/Language/Hint}} aria-label={{$:/language/Buttons/Language/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n<span class=\"tc-image-button\">\n<$set name=\"languagePluginTitle\" value={{$:/language}}>\n<$image source=<<flag-title>>/>\n</$set>\n</span>\n</$list>\n<$text text=\" \"/>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Language/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/language\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n{{$:/snippets/languageswitcher}}\n</div>\n</$reveal>\n"
},
"$:/core/ui/Buttons/manager": {
"title": "$:/core/ui/Buttons/manager",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/list}} {{$:/language/Buttons/Manager/Caption}}",
"description": "{{$:/language/Buttons/Manager/Hint}}",
"text": "\\whitespace trim\n\\define manager-button(class)\n<$button to=\"$:/Manager\" tooltip={{$:/language/Buttons/Manager/Hint}} aria-label={{$:/language/Buttons/Manager/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/list}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Manager/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/Manager]]\" emptyMessage=<<manager-button>>>\n<<manager-button \"tc-selected\">>\n</$list>\n"
},
"$:/core/ui/Buttons/more-page-actions": {
"title": "$:/core/ui/Buttons/more-page-actions",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}",
"description": "{{$:/language/Buttons/More/Hint}}",
"text": "\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<<qualify \"$:/state/popup/more\">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/More/Caption}}/></span>\n</$list>\n</$button><$reveal state=<<qualify \"$:/state/popup/more\">> type=\"popup\" position=\"below\" animate=\"yes\">\n\n<div class=\"tc-drop-down\">\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]] -[[$:/core/ui/Buttons/more-page-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$set>\n\n</$reveal>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</div>\n\n</$reveal>"
},
"$:/core/ui/Buttons/new-image": {
"title": "$:/core/ui/Buttons/new-image",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/new-image-button}} {{$:/language/Buttons/NewImage/Caption}}",
"description": "{{$:/language/Buttons/NewImage/Hint}}",
"text": "\\whitespace trim\n<$button tooltip={{$:/language/Buttons/NewImage/Hint}} aria-label={{$:/language/Buttons/NewImage/Caption}} class=<<tv-config-toolbar-class>> actions={{$:/core/ui/Actions/new-image}}>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-image-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewImage/Caption}}/></span>\n</$list>\n</$button>\n"
},
"$:/core/ui/Buttons/new-journal": {
"title": "$:/core/ui/Buttons/new-journal",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournal/Caption}}",
"description": "{{$:/language/Buttons/NewJournal/Hint}}",
"text": "\\whitespace trim\n\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournal/Hint}} aria-label={{$:/language/Buttons/NewJournal/Caption}} class=<<tv-config-toolbar-class>> actions={{$:/core/ui/Actions/new-journal}}>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewJournal/Caption}}/></span>\n</$list>\n</$button>\n\\end\n<<journalButton>>\n"
},
"$:/core/ui/Buttons/new-tiddler": {
"title": "$:/core/ui/Buttons/new-tiddler",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/new-button}} {{$:/language/Buttons/NewTiddler/Caption}}",
"description": "{{$:/language/Buttons/NewTiddler/Hint}}",
"text": "\\whitespace trim\n<$button actions={{$:/core/ui/Actions/new-tiddler}} tooltip={{$:/language/Buttons/NewTiddler/Hint}} aria-label={{$:/language/Buttons/NewTiddler/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewTiddler/Caption}}/></span>\n</$list>\n</$button>\n"
},
"$:/core/ui/Buttons/palette": {
"title": "$:/core/ui/Buttons/palette",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/palette}} {{$:/language/Buttons/Palette/Caption}}",
"description": "{{$:/language/Buttons/Palette/Hint}}",
"text": "\\whitespace trim\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/palette\">> tooltip={{$:/language/Buttons/Palette/Hint}} aria-label={{$:/language/Buttons/Palette/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/palette}}\n</$list>\n<$text text=\" \"/>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Palette/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/palette\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\" style=\"font-size:0.7em;\">\n{{$:/snippets/paletteswitcher}}\n</div>\n</$reveal>\n"
},
"$:/core/ui/Buttons/print": {
"title": "$:/core/ui/Buttons/print",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/print-button}} {{$:/language/Buttons/Print/Caption}}",
"description": "{{$:/language/Buttons/Print/Hint}}",
"text": "<$button message=\"tm-print\" tooltip={{$:/language/Buttons/Print/Hint}} aria-label={{$:/language/Buttons/Print/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/print-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Print/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/refresh": {
"title": "$:/core/ui/Buttons/refresh",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/refresh-button}} {{$:/language/Buttons/Refresh/Caption}}",
"description": "{{$:/language/Buttons/Refresh/Hint}}",
"text": "<$button message=\"tm-browser-refresh\" tooltip={{$:/language/Buttons/Refresh/Hint}} aria-label={{$:/language/Buttons/Refresh/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/refresh-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Refresh/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/save-wiki": {
"title": "$:/core/ui/Buttons/save-wiki",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/save-button}} {{$:/language/Buttons/SaveWiki/Caption}}",
"description": "{{$:/language/Buttons/SaveWiki/Hint}}",
"text": "<$button tooltip={{$:/language/Buttons/SaveWiki/Hint}} aria-label={{$:/language/Buttons/SaveWiki/Caption}} class=<<tv-config-toolbar-class>>>\n<$wikify name=\"site-title\" text={{$:/config/SaveWikiButton/Filename}}>\n<$action-sendmessage $message=\"tm-save-wiki\" $param={{$:/config/SaveWikiButton/Template}} filename=<<site-title>>/>\n</$wikify>\n<span class=\"tc-dirty-indicator\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/save-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/SaveWiki/Caption}}/></span>\n</$list>\n</span>\n</$button>"
},
"$:/core/ui/Buttons/storyview": {
"title": "$:/core/ui/Buttons/storyview",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/storyview-classic}} {{$:/language/Buttons/StoryView/Caption}}",
"description": "{{$:/language/Buttons/StoryView/Hint}}",
"text": "\\whitespace trim\n\\define icon()\n$:/core/images/storyview-$(storyview)$\n\\end\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/storyview\">> tooltip={{$:/language/Buttons/StoryView/Hint}} aria-label={{$:/language/Buttons/StoryView/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n<$set name=\"storyview\" value={{$:/view}}>\n<$transclude tiddler=<<icon>>/>\n</$set>\n</$list>\n<$text text=\" \"/>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/StoryView/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/storyview\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n{{$:/snippets/viewswitcher}}\n</div>\n</$reveal>\n"
},
"$:/core/ui/Buttons/tag-manager": {
"title": "$:/core/ui/Buttons/tag-manager",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/tag-button}} {{$:/language/Buttons/TagManager/Caption}}",
"description": "{{$:/language/Buttons/TagManager/Hint}}",
"text": "\\whitespace trim\n\\define control-panel-button(class)\n<$button to=\"$:/TagManager\" tooltip={{$:/language/Buttons/TagManager/Hint}} aria-label={{$:/language/Buttons/TagManager/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/tag-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/TagManager/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/TagManager]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
},
"$:/core/ui/Buttons/theme": {
"title": "$:/core/ui/Buttons/theme",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/theme-button}} {{$:/language/Buttons/Theme/Caption}}",
"description": "{{$:/language/Buttons/Theme/Hint}}",
"text": "\\whitespace trim\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/theme\">> tooltip={{$:/language/Buttons/Theme/Hint}} aria-label={{$:/language/Buttons/Theme/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/theme-button}}\n</$list>\n<$text text=\" \"/>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Theme/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/theme\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$linkcatcher to=\"$:/theme\">\n{{$:/snippets/themeswitcher}}\n</$linkcatcher>\n</div>\n</$reveal>\n"
},
"$:/core/ui/Buttons/timestamp": {
"title": "$:/core/ui/Buttons/timestamp",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/timestamp-on}} {{$:/language/Buttons/Timestamp/Caption}}",
"description": "{{$:/language/Buttons/Timestamp/Hint}}",
"text": "\\whitespace trim\n<$reveal type=\"nomatch\" state=\"$:/config/TimestampDisable\" text=\"yes\">\n<$button tooltip={{$:/language/Buttons/Timestamp/On/Hint}} aria-label={{$:/language/Buttons/Timestamp/On/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-setfield $tiddler=\"$:/config/TimestampDisable\" $value=\"yes\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/timestamp-on}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Timestamp/On/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=\"$:/config/TimestampDisable\" text=\"yes\">\n<$button tooltip={{$:/language/Buttons/Timestamp/Off/Hint}} aria-label={{$:/language/Buttons/Timestamp/Off/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-setfield $tiddler=\"$:/config/TimestampDisable\" $value=\"no\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/timestamp-off}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Timestamp/Off/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n"
},
"$:/core/ui/Buttons/unfold-all": {
"title": "$:/core/ui/Buttons/unfold-all",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/unfold-all-button}} {{$:/language/Buttons/UnfoldAll/Caption}}",
"description": "{{$:/language/Buttons/UnfoldAll/Hint}}",
"text": "<$button tooltip={{$:/language/Buttons/UnfoldAll/Hint}} aria-label={{$:/language/Buttons/UnfoldAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-unfold-all-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/UnfoldAll/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/PageTemplate/pagecontrols": {
"title": "$:/core/ui/PageTemplate/pagecontrols",
"text": "\\whitespace trim\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-page-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n<$set name=\"hidden\" value=<<config-title>>>\n<$list filter=\"[<hidden>!text[hide]]\" storyview=\"pop\" variable=\"ignore\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n</$set>\n</$list>\n</$set>\n</$list>\n</div>\n"
},
"$:/core/ui/PageStylesheet": {
"title": "$:/core/ui/PageStylesheet",
"text": "\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$set name=\"currentTiddler\" value={{$:/language}}>\n\n<$set name=\"languageTitle\" value={{!!name}}>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n</$list>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/PageTemplate/alerts": {
"title": "$:/core/ui/PageTemplate/alerts",
"tags": "$:/tags/PageTemplate",
"text": "<div class=\"tc-alerts\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Alert]!has[draft.of]]\" template=\"$:/core/ui/AlertTemplate\" storyview=\"pop\"/>\n\n</div>\n"
},
"$:/core/ui/PageTemplate/drafts": {
"title": "$:/core/ui/PageTemplate/drafts",
"tags": "$:/tags/PageTemplate",
"text": "\\whitespace trim\n<$reveal state=\"$:/status/IsReadOnly\" type=\"nomatch\" text=\"yes\" tag=\"div\" class=\"tc-drafts-list\">\n<$list filter=\"[has[draft.of]!sort[modified]] -[list[$:/StoryList]]\">\n<$link>\n{{$:/core/images/edit-button}} <$text text=<<currentTiddler>>/>\n</$link>\n</$list>\n</$reveal>\n"
},
"$:/core/ui/PageTemplate/pluginreloadwarning": {
"title": "$:/core/ui/PageTemplate/pluginreloadwarning",
"tags": "$:/tags/PageTemplate",
"text": "\\define lingo-base() $:/language/\n\n<$list filter=\"[{$:/status/RequireReloadDueToPluginChange}match[yes]]\">\n\n<$reveal type=\"nomatch\" state=\"$:/temp/HidePluginWarning\" text=\"yes\">\n\n<div class=\"tc-plugin-reload-warning\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<<lingo PluginReloadWarning>> <$button set=\"$:/temp/HidePluginWarning\" setTo=\"yes\" class=\"tc-btn-invisible\">{{$:/core/images/close-button}}</$button>\n\n</$set>\n\n</div>\n\n</$reveal>\n\n</$list>\n"
},
"$:/core/ui/PageTemplate/sidebar": {
"title": "$:/core/ui/PageTemplate/sidebar",
"tags": "$:/tags/PageTemplate",
"text": "\\whitespace trim\n\\define config-title()\n$:/config/SideBarSegments/Visibility/$(listItem)$\n\\end\n\n<$scrollable fallthrough=\"no\" class=\"tc-sidebar-scrollable\">\n\n<div class=\"tc-sidebar-header\">\n\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SideBarSegment]!has[draft.of]]\" variable=\"listItem\">\n\n<$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\" tag=\"div\">\n\n<$transclude tiddler=<<listItem>> mode=\"block\"/>\n\n</$reveal>\n\n</$list>\n\n</$reveal>\n\n</div>\n\n</$scrollable>\n"
},
"$:/core/ui/PageTemplate/story": {
"title": "$:/core/ui/PageTemplate/story",
"tags": "$:/tags/PageTemplate",
"text": "\\whitespace trim\n<section class=\"tc-story-river\">\n\n<section class=\"story-backdrop\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/AboveStory]!has[draft.of]]\">\n\n<$transclude/>\n\n</$list>\n\n</section>\n\n<$list filter=\"[list[$:/StoryList]]\" history=\"$:/HistoryList\" template={{$:/config/ui/ViewTemplate}} editTemplate={{$:/config/ui/EditTemplate}} storyview={{$:/view}} emptyMessage={{$:/config/EmptyStoryMessage}}/>\n\n<section class=\"story-frontdrop\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/BelowStory]!has[draft.of]]\">\n\n<$transclude/>\n\n</$list>\n\n</section>\n\n</section>\n"
},
"$:/core/ui/PageTemplate/topleftbar": {
"title": "$:/core/ui/PageTemplate/topleftbar",
"tags": "$:/tags/PageTemplate",
"text": "<span class=\"tc-topbar tc-topbar-left\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopLeftBar]!has[draft.of]]\" variable=\"listItem\" storyview=\"pop\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
},
"$:/core/ui/PageTemplate/toprightbar": {
"title": "$:/core/ui/PageTemplate/toprightbar",
"tags": "$:/tags/PageTemplate",
"text": "<span class=\"tc-topbar tc-topbar-right\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopRightBar]!has[draft.of]]\" variable=\"listItem\" storyview=\"pop\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
},
"$:/core/ui/PageTemplate": {
"title": "$:/core/ui/PageTemplate",
"name": "{{$:/language/PageTemplate/Name}}",
"description": "{{$:/language/PageTemplate/Description}}",
"text": "\\whitespace trim\n\\define containerClasses()\ntc-page-container tc-page-view-$(storyviewTitle)$ tc-language-$(languageTitle)$\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$vars\n\ttv-config-toolbar-icons={{$:/config/Toolbar/Icons}}\n\ttv-config-toolbar-text={{$:/config/Toolbar/Text}}\n\ttv-config-toolbar-class={{$:/config/Toolbar/ButtonClass}}\n\ttv-enable-drag-and-drop={{$:/config/DragAndDrop/Enable}}\n\ttv-show-missing-links={{$:/config/MissingLinks}}\n\tstoryviewTitle={{$:/view}}\n\tlanguageTitle={{{ [{$:/language}get[name]] }}}>\n\n<div class=<<containerClasses>>>\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n\n<$dropzone enable=<<tv-enable-drag-and-drop>>>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageTemplate]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>>/>\n\n</$list>\n\n</$dropzone>\n\n</$navigator>\n\n</div>\n\n</$vars>\n"
},
"$:/PaletteManager": {
"title": "$:/PaletteManager",
"text": "\\define lingo-base() $:/language/ControlPanel/Palette/Editor/\n\\define describePaletteColour(colour)\n<$transclude tiddler=\"$:/language/Docs/PaletteColours/$colour$\"><$text text=\"$colour$\"/></$transclude>\n\\end\n\\define edit-colour-placeholder()\n edit $(colourName)$\n\\end\n\\define colour-tooltip(showhide) $showhide$ editor for $(newColourName)$ \n\\define resolve-colour(macrocall)\n\\import $:/core/macros/utils\n\\whitespace trim\n<$wikify name=\"name\" text=\"\"\"$macrocall$\"\"\">\n<<name>>\n</$wikify>\n\\end\n\\define delete-colour-index-actions() <$action-setfield $index=<<colourName>>/>\n\\define palette-manager-colour-row-segment()\n\\whitespace trim\n<$edit-text index=<<colourName>> tag=\"input\" placeholder=<<edit-colour-placeholder>> default=\"\"/>\n<br>\n<$edit-text index=<<colourName>> type=\"color\" tag=\"input\" class=\"tc-palette-manager-colour-input\"/>\n<$list filter=\"[<currentTiddler>getindex<colourName>removeprefix[<<]removesuffix[>>]] [<currentTiddler>getindex<colourName>removeprefix[<$]removesuffix[/>]]\" variable=\"ignore\">\n<$set name=\"state\" value={{{ [[$:/state/palettemanager/]addsuffix<currentTiddler>addsuffix[/]addsuffix<colourName>] }}}>\n<$wikify name=\"newColourName\" text=\"\"\"<$macrocall $name=\"resolve-colour\" macrocall={{{ [<currentTiddler>getindex<colourName>] }}}/>\"\"\">\n<$reveal state=<<state>> type=\"nomatch\" text=\"show\">\n<$button tooltip=<<colour-tooltip show>> aria-label=<<colour-tooltip show>> class=\"tc-btn-invisible\" set=<<state>> setTo=\"show\">{{$:/core/images/down-arrow}}<$text text=<<newColourName>> class=\"tc-small-gap-left\"/></$button><br>\n</$reveal>\n<$reveal state=<<state>> type=\"match\" text=\"show\">\n<$button tooltip=<<colour-tooltip hide>> aria-label=<<colour-tooltip show>> class=\"tc-btn-invisible\" actions=\"\"\"<$action-deletetiddler $tiddler=<<state>>/>\"\"\">{{$:/core/images/up-arrow}}<$text text=<<newColourName>> class=\"tc-small-gap-left\"/></$button><br>\n</$reveal>\n<$reveal state=<<state>> type=\"match\" text=\"show\">\n<$set name=\"colourName\" value=<<newColourName>>>\n<br>\n<<palette-manager-colour-row-segment>>\n<br><br>\n</$set>\n</$reveal>\n</$wikify>\n</$set>\n</$list>\n\\end\n\\define palette-manager-colour-row()\n\\whitespace trim\n<tr>\n<td>\n<span style=\"float:right;\">\n<$button tooltip={{$:/language/ControlPanel/Palette/Editor/Delete/Hint}} aria-label=<<lingo Delete/Hint>> class=\"tc-btn-invisible\" actions=<<delete-colour-index-actions>>>\n{{$:/core/images/delete-button}}</$button>\n</span>\n''<$macrocall $name=\"describePaletteColour\" colour=<<colourName>>/>''<br/>\n<$macrocall $name=\"colourName\" $output=\"text/plain\"/>\n</td>\n<td>\n<<palette-manager-colour-row-segment>>\n</td>\n</tr>\n\\end\n\\define palette-manager-table()\n\\whitespace trim\n<table>\n<tbody>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Palette]indexes[]]\" variable=\"colourName\">\n<$list filter=\"[<currentTiddler>indexes[]removeprefix<colourName>suffix[]]\" variable=\"ignore\" emptyMessage=\"\"\"\n<$list filter=\"[{$:/state/palettemanager/showexternal}removeprefix[yes]suffix[]]\" variable=\"ignore\">\n<<palette-manager-colour-row>>\n</$list>\n\"\"\">\n<<palette-manager-colour-row>>\n</$list>\n</$list>\n</tbody>\n</table>\n\\end\n<$set name=\"currentTiddler\" value={{$:/palette}}>\n\n<<lingo Prompt>> <$link to={{$:/palette}}><$macrocall $name=\"currentTiddler\" $output=\"text/plain\"/></$link>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\" variable=\"listItem\">\n<<lingo Prompt/Modified>>\n<$button message=\"tm-delete-tiddler\" param={{$:/palette}}><<lingo Reset/Caption>></$button>\n</$list>\n\n<$list filter=\"[all[current]is[shadow]!is[tiddler]]\" variable=\"listItem\">\n<<lingo Clone/Prompt>>\n</$list>\n\n<$button message=\"tm-new-tiddler\" param={{$:/palette}}><<lingo Clone/Caption>></$button>\n\n<$checkbox tiddler=\"$:/state/palettemanager/showexternal\" field=\"text\" checked=\"yes\" unchecked=\"no\"><span class=\"tc-small-gap-left\"><<lingo Names/External/Show>></span></$checkbox>\n\n<<palette-manager-table>>\n"
},
"$:/core/ui/PluginInfo": {
"title": "$:/core/ui/PluginInfo",
"text": "\\define localised-info-tiddler-title()\n$(currentTiddler)$/$(languageTitle)$/$(currentTab)$\n\\end\n\\define info-tiddler-title()\n$(currentTiddler)$/$(currentTab)$\n\\end\n\\define default-tiddler-title()\n$:/core/ui/PluginInfo/Default/$(currentTab)$\n\\end\n<$transclude tiddler=<<localised-info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<localised-info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<default-tiddler-title>> mode=\"block\">\n{{$:/language/ControlPanel/Plugin/NoInfoFound/Hint}}\n</$transclude>\n</$transclude>\n</$transclude>\n</$transclude>\n"
},
"$:/core/ui/PluginInfo/Default/contents": {
"title": "$:/core/ui/PluginInfo/Default/contents",
"text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\n<<lingo Hint>>\n<ul>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" emptyMessage=<<lingo Empty/Hint>>>\n<li>\n<$link />\n</li>\n</$list>\n</ul>\n"
},
"$:/core/ui/PluginListItemTemplate": {
"title": "$:/core/ui/PluginListItemTemplate",
"text": "<div class=\"tc-menu-list-item\">\n<$link to={{!!title}}><$view field=\"description\"><$view field=\"title\"/></$view></$link>\n</div>"
},
"$:/core/ui/RootTemplate": {
"title": "$:/core/ui/RootTemplate",
"text": "<$transclude tiddler={{{ [{$:/layout}has[text]] ~[[$:/core/ui/PageTemplate]] }}} mode=\"inline\"/>\n\n"
},
"$:/core/ui/SearchResults": {
"title": "$:/core/ui/SearchResults",
"text": "<div class=\"tc-search-results\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n</$list>\n\"\"\">\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}} actions=\"\"\"<$action-setfield $tiddler=\"$:/state/search/currentTab\" text=<<currentTab>>/>\"\"\" explicitState=\"$:/state/tab/search-results/sidebar\"/>\n\n</$list>\n\n</div>\n"
},
"$:/core/ui/SideBar/More": {
"title": "$:/core/ui/SideBar/More",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/More/Caption}}",
"text": "<div class=\"tc-more-sidebar\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]\" default={{$:/config/DefaultMoreSidebarTab}} state=\"$:/state/tab/moresidebar\" class=\"tc-vertical tc-sidebar-tabs-more\" explicitState=\"$:/state/tab/moresidebar-1850697562\"/>\n</div>\n"
},
"$:/core/ui/SideBar/Open": {
"title": "$:/core/ui/SideBar/Open",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Open/Caption}}",
"text": "\\whitespace trim\n\\define lingo-base() $:/language/CloseAll/\n\n\\define drop-actions()\n<$action-listops $tiddler=<<tv-story-list>> $subfilter=\"+[insertbefore:currentTiddler<actionTiddler>]\"/>\n\\end\n\n\\define placeholder()\n<div class=\"tc-droppable-placeholder\"/>\n\\end\n\n\\define droppable-item(button)\n\\whitespace trim\n<$droppable actions=<<drop-actions>> enable=<<tv-allow-drag-and-drop>>>\n<<placeholder>>\n<div>\n$button$\n</div>\n</$droppable>\n\\end\n\n<div class=\"tc-sidebar-tab-open\">\n<$list filter=\"[list<tv-story-list>]\" history=<<tv-history-list>> storyview=\"pop\">\n<div class=\"tc-sidebar-tab-open-item\">\n<$macrocall $name=\"droppable-item\" button=\"\"\"<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=\"tc-btn-invisible tc-btn-mini tc-small-gap-right\">{{$:/core/images/close-button}}</$button><$link to={{!!title}}><$view field=\"title\"/></$link>\"\"\"/>\n</div>\n</$list>\n<$tiddler tiddler=\"\">\n<div>\n<$macrocall $name=\"droppable-item\" button=\"\"\"<$button message=\"tm-close-all-tiddlers\" class=\"tc-btn-invisible tc-btn-mini\"><<lingo Button>></$button>\"\"\"/>\n</div>\n</$tiddler>\n</div>\n"
},
"$:/core/ui/SideBar/Recent": {
"title": "$:/core/ui/SideBar/Recent",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Recent/Caption}}",
"text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n"
},
"$:/core/ui/SideBar/Tools": {
"title": "$:/core/ui/SideBar/Tools",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Tools/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n\n<<lingo Basics/Version/Prompt>> <<version>>\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n\n<div style=\"position:relative;\" class={{{ [<listItem>encodeuricomponent[]addprefix[tc-btn-]] }}}>\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</div>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/SideBarLists": {
"title": "$:/core/ui/SideBarLists",
"text": "<$transclude tiddler=\"$:/core/ui/SideBarSegments/search\"/>\n\n<$transclude tiddler=\"$:/core/ui/SideBarSegments/tabs\"/>\n\n"
},
"$:/core/ui/SideBarSegments/page-controls": {
"title": "$:/core/ui/SideBarSegments/page-controls",
"tags": "$:/tags/SideBarSegment",
"text": "{{||$:/core/ui/PageTemplate/pagecontrols}}\n"
},
"$:/core/ui/SideBarSegments/search": {
"title": "$:/core/ui/SideBarSegments/search",
"tags": "$:/tags/SideBarSegment",
"text": "\\whitespace trim\n\n\\define count-popup-button()\n\\whitespace trim\n<$button popup=<<qualify \"$:/state/popup/search-dropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n<$list filter=\"[{$(searchTiddler)$}minlength{$:/config/Search/MinLength}limit[1]]\" variable=\"listItem\">\n<$vars userInput={{{ [<searchTiddler>get[text]] }}} configTiddler={{{ [[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}] }}} replaceRegexp=\"limit\\[\\d+\\]\">\n<$vars primaryListFilter={{{ [<configTiddler>get[first-search-filter]search-replace:g:regexp<replaceRegexp>,[]] }}} secondaryListFilter={{{ [<configTiddler>get[second-search-filter]search-replace:g:regexp<replaceRegexp>,[]] }}}>\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[subfilter<primaryListFilter>] [subfilter<secondaryListFilter>]\"/>\"\"\">\n{{$:/language/Search/Matches}}\n</$set>\n</$vars>\n</$vars>\n</$list>\n</$button>\n\\end\n\n\\define search-results-list()\n\\whitespace trim\n<$vars userInput={{$(searchTiddler)$}} configTiddler={{{ [[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}] }}}>\n<$list filter=\"[<userInput>minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n<$tiddler tiddler=<<configTiddler>>>\n\n{{$:/core/ui/SearchResults}}\n\n</$tiddler>\n\n</$list>\n</$vars>\n\\end\n\n\\define cancel-search-actions() <$list filter=\"[<searchTiddler>get[text]!match{$:/temp/search}]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[[$:/temp/search]] [<searchTiddler>] [<searchListState>]\"/>\"\"\"><$action-setfield $tiddler=\"$:/temp/search\" text={{{ [<searchTiddler>get[text]] }}}/><$action-setfield $tiddler=\"$:/temp/search/refresh\" text=\"yes\"/></$list>\n\n\\define input-accept-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\"\"\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\n\n\\define input-accept-variant-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\"\"\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>\n\n\\define set-next-input-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab/search-results/sidebar\" tag=\"$:/tags/SearchResults\" beforeafter=\"$beforeafter$\" defaultState={{$:/config/SearchResults/Default}} actions=\"\"\"<$action-setfield $tiddler=\"$:/state/search/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define advanced-search-actions() <$action-setfield $tiddler=\"$:/temp/advancedsearch\" text={{$:/temp/search/input}}/><$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" text={{$:/temp/search/input}}/><<delete-state-tiddlers>><$action-navigate $to=\"$:/AdvancedSearch\"/><$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/><$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\"[data-tiddler-title=\"$:/AdvancedSearch\"] .tc-search input\"\"\" preventScroll=\"true\"/><$action-deletetiddler $filter=\"$:/temp/search $:/temp/search/input $:/temp/search/refresh [<searchListState>]\"/>\n\n<div class=\"tc-sidebar-lists tc-sidebar-search\">\n\n<$vars editTiddler=\"$:/temp/search\" searchTiddler=\"$:/temp/search/input\" searchListState=<<qualify \"$:/state/search-list/selected-item\">>>\n<div class=\"tc-search\">\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">>>\n<$keyboard key=\"((advanced-search-sidebar))\" actions=<<advanced-search-actions>>>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=<<editTiddler>> storeTitle=<<searchTiddler>> \n\t\tselectionStateTitle=<<searchListState>> refreshTitle=\"$:/temp/search/refresh\" type=\"search\" \n\t\ttag=\"input\" focus={{$:/config/Search/AutoFocus}} focusPopup=<<qualify \"$:/state/popup/search-dropdown\">> \n\t\tclass=\"tc-popup-handle\" filterMinLength={{$:/config/Search/MinLength}} inputCancelActions=<<cancel-search-actions>> \n\t\tinputAcceptActions=<<input-accept-actions>> inputAcceptVariantActions=<<input-accept-variant-actions>> cancelPopups=\"yes\" \n\t\tconfigTiddlerFilter=\"[[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}]\"/>\n</$keyboard>\n</$keyboard>\n</$keyboard>\n<$reveal state=<<searchTiddler>> type=\"nomatch\" text=\"\">\n<$button tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n<<advanced-search-actions>>\n{{$:/core/images/advanced-search-button}}\n</$button>\n<$button class=\"tc-btn-invisible\">\n<<cancel-search-actions>><$action-sendmessage $message=\"tm-focus-selector\" $param=\".tc-search input\"/>\n{{$:/core/images/close-button}}\n</$button>\n<<count-popup-button>>\n</$reveal>\n<$reveal state=<<searchTiddler>> type=\"match\" text=\"\">\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n{{$:/core/images/advanced-search-button}}\n</$button>\n</$reveal>\n</div>\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown-wrapper\" state=<<searchTiddler>> type=\"nomatch\" text=\"\">\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown tc-search-drop-down tc-popup-handle\" state=<<qualify \"$:/state/popup/search-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n\n<<search-results-list>>\n\n</$reveal>\n\n</$reveal>\n\n</$vars>\n\n</div>\n"
},
"$:/core/ui/SideBarSegments/site-subtitle": {
"title": "$:/core/ui/SideBarSegments/site-subtitle",
"tags": "$:/tags/SideBarSegment",
"text": "<div class=\"tc-site-subtitle\">\n\n<$transclude tiddler=\"$:/SiteSubtitle\" mode=\"inline\"/>\n\n</div>\n"
},
"$:/core/ui/SideBarSegments/site-title": {
"title": "$:/core/ui/SideBarSegments/site-title",
"tags": "$:/tags/SideBarSegment",
"text": "<h1 class=\"tc-site-title\">\n\n<$transclude tiddler=\"$:/SiteTitle\" mode=\"inline\"/>\n\n</h1>\n"
},
"$:/core/ui/SideBarSegments/tabs": {
"title": "$:/core/ui/SideBarSegments/tabs",
"tags": "$:/tags/SideBarSegment",
"text": "<div class=\"tc-sidebar-lists tc-sidebar-tabs\">\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\" default={{$:/config/DefaultSidebarTab}} state=\"$:/state/tab/sidebar\" class=\"tc-sidebar-tabs-main\" explicitState=\"$:/state/tab/sidebar--595412856\"/>\n\n</div>\n"
},
"$:/core/ui/SwitcherModal": {
"title": "$:/core/ui/SwitcherModal",
"subtitle": "<$text text={{{[<switch>lookup[$:/language/Switcher/Subtitle/]]}}}/>",
"class": "tc-modal-centered",
"text": "<$tiddler tiddler={{{[<switch>lookup[$:/config/SwitcherTargets/]]}}}>\n\n\n<$transclude/>\n\n\n</$tiddler>"
},
"$:/TagManager": {
"title": "$:/TagManager",
"icon": "$:/core/images/tag-button",
"color": "#bbb",
"text": "\\define lingo-base() $:/language/TagManager/\n\\define iconEditorTab(type)\n\\whitespace trim\n<$link to=\"\"><<lingo Icons/None>></$link>\n<$list filter=\"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[sort[title]] +[$type$is[system]]\">\n<$link to={{!!title}}>\n<$transclude/> <$view field=\"title\"/>\n</$link>\n</$list>\n\\end\n\\define iconEditor(title)\n\\whitespace trim\n<div class=\"tc-drop-down-wrapper\">\n<$button popupTitle={{{ [[$:/state/popup/icon/]addsuffix<__title__>] }}} class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n<$reveal stateTitle={{{ [[$:/state/popup/icon/]addsuffix<__title__>] }}} type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n<div class=\"tc-drop-down\">\n<$linkcatcher actions=\"\"\"<$action-setfield $tiddler=<<__title__>> icon=<<navigateTo>>/>\"\"\">\n<<iconEditorTab type:\"!\">>\n<hr/>\n<<iconEditorTab type:\"\">>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>\n\\end\n\\define toggleButton(state)\n\\whitespace trim\n<$reveal stateTitle=<<__state__>> type=\"match\" text=\"closed\" default=\"closed\">\n<$button setTitle=<<__state__>> setTo=\"open\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n<$reveal stateTitle=<<__state__>> type=\"match\" text=\"open\" default=\"closed\">\n<$button setTitle=<<__state__>> setTo=\"closed\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n\\end\n\\whitespace trim\n<table class=\"tc-tag-manager-table\">\n<tbody>\n<tr>\n<th><<lingo Colour/Heading>></th>\n<th class=\"tc-tag-manager-tag\"><<lingo Tag/Heading>></th>\n<th><<lingo Count/Heading>></th>\n<th><<lingo Icon/Heading>></th>\n<th><<lingo Info/Heading>></th>\n</tr>\n<$list filter=\"[tags[]!is[system]sort[title]]\">\n<tr>\n<td><$edit-text field=\"color\" tag=\"input\" type=\"color\"/></td>\n<td>{{||$:/core/ui/TagTemplate}}</td>\n<td><$count filter=\"[all[current]tagging[]]\"/></td>\n<td>\n<$macrocall $name=\"iconEditor\" title={{!!title}}/>\n</td>\n<td>\n<$macrocall $name=\"toggleButton\" state={{{ [[$:/state/tag-manager/]addsuffix<currentTiddler>] }}} /> \n</td>\n</tr>\n<tr>\n<td></td>\n<td colspan=\"4\">\n<$reveal stateTitle={{{ [[$:/state/tag-manager/]addsuffix<currentTiddler>] }}} type=\"match\" text=\"open\" default=\"\">\n<table>\n<tbody>\n<tr><td><<lingo Colour/Heading>></td><td><$edit-text field=\"color\" tag=\"input\" type=\"text\" size=\"9\"/></td></tr>\n<tr><td><<lingo Icon/Heading>></td><td><$edit-text field=\"icon\" tag=\"input\" size=\"45\"/></td></tr>\n</tbody>\n</table>\n</$reveal>\n</td>\n</tr>\n</$list>\n<tr>\n<td></td>\n<td style=\"position:relative;\">\n{{$:/core/ui/UntaggedTemplate}}\n</td>\n<td>\n<small class=\"tc-menu-list-count\"><$count filter=\"[untagged[]!is[system]] -[tags[]]\"/></small>\n</td>\n<td></td>\n<td></td>\n</tr>\n</tbody>\n</table>\n"
},
"$:/core/ui/TagPickerTagTemplate": {
"title": "$:/core/ui/TagPickerTagTemplate",
"text": "\\whitespace trim\n<$button class=<<button-classes>> tag=\"a\" tooltip={{$:/language/EditTemplate/Tags/Add/Button/Hint}}>\n<$list filter=\"[<saveTiddler>minlength[1]]\">\n<$action-listops $tiddler=<<saveTiddler>> $field=<<tagField>> $subfilter=\"[<tag>]\"/>\n</$list>\n<$set name=\"currentTiddlerCSSEscaped\" value={{{ [<saveTiddler>escapecss[]] }}}>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=<<get-tagpicker-focus-selector>> preventScroll=\"true\"/>\n</$set>\n<<delete-tag-state-tiddlers>>\n<$list filter=\"[<refreshTitle>minlength[1]]\">\n<$action-setfield $tiddler=<<refreshTitle>> text=\"yes\"/>\n</$list>\n<<actions>>\n<$set name=\"backgroundColor\" value={{!!color}}>\n<$wikify name=\"foregroundColor\" text=\"\"\"<$macrocall $name=\"contrastcolour\" target={{!!color}} fallbackTarget=<<fallbackTarget>> colourA=<<colourA>> colourB=<<colourB>>/>\"\"\">\n<span class=\"tc-tag-label tc-btn-invisible\" style=<<tag-pill-styles>>>\n<$transclude tiddler={{!!icon}}/><$view field=\"title\" format=\"text\"/>\n</span>\n</$wikify>\n</$set>\n</$button>\n"
},
"$:/core/ui/TagTemplate": {
"title": "$:/core/ui/TagTemplate",
"text": "\\whitespace trim\n<span class=\"tc-tag-list-item\">\n<$set name=\"transclusion\" value=<<currentTiddler>>>\n<$macrocall $name=\"tag-pill-body\" tag=<<currentTiddler>> icon={{!!icon}} colour={{!!color}} palette={{$:/palette}} element-tag=\"\"\"$button\"\"\" element-attributes=\"\"\"popup=<<qualify \"$:/state/popup/tag\">> dragFilter='[all[current]tagging[]]' tag='span'\"\"\"/>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\" animate=\"yes\" class=\"tc-drop-down\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</$set>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TagDropdown]!has[draft.of]]\" variable=\"listItem\"> \n<$transclude tiddler=<<listItem>>/> \n</$list>\n<hr>\n<$macrocall $name=\"list-tagged-draggable\" tag=<<currentTiddler>>/>\n</$reveal>\n</$set>\n</span>\n"
},
"$:/core/ui/TiddlerFieldTemplate": {
"title": "$:/core/ui/TiddlerFieldTemplate",
"text": "<tr class=\"tc-view-field\">\n<td class=\"tc-view-field-name\">\n<$text text=<<listItem>>/>\n</td>\n<td class=\"tc-view-field-value\">\n<$view field=<<listItem>>/>\n</td>\n</tr>"
},
"$:/core/ui/TiddlerFields": {
"title": "$:/core/ui/TiddlerFields",
"text": "<table class=\"tc-view-field-table\">\n<tbody>\n<$list filter=\"[all[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n</tbody>\n</table>\n"
},
"$:/core/ui/TiddlerInfo/Advanced/PluginInfo": {
"title": "$:/core/ui/TiddlerInfo/Advanced/PluginInfo",
"tags": "$:/tags/TiddlerInfo/Advanced",
"text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\n<$list filter=\"[all[current]has[plugin-type]]\">\n\n! <<lingo Heading>>\n\n<<lingo Hint>>\n<ul>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" emptyMessage=<<lingo Empty/Hint>>>\n<li>\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</li>\n</$list>\n</ul>\n\n</$list>\n"
},
"$:/core/ui/TiddlerInfo/Advanced/ShadowInfo": {
"title": "$:/core/ui/TiddlerInfo/Advanced/ShadowInfo",
"tags": "$:/tags/TiddlerInfo/Advanced",
"text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/ShadowInfo/\n<$set name=\"infoTiddler\" value=<<currentTiddler>>>\n\n''<<lingo Heading>>''\n\n<$list filter=\"[all[current]!is[shadow]]\">\n\n<<lingo NotShadow/Hint>>\n\n</$list>\n\n<$list filter=\"[all[current]is[shadow]]\">\n\n<<lingo Shadow/Hint>>\n\n<$list filter=\"[all[current]shadowsource[]]\">\n\n<$set name=\"pluginTiddler\" value=<<currentTiddler>>>\n<<lingo Shadow/Source>>\n</$set>\n\n</$list>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\">\n\n<<lingo OverriddenShadow/Hint>>\n\n</$list>\n\n\n</$list>\n</$set>\n"
},
"$:/core/ui/TiddlerInfo/Advanced": {
"title": "$:/core/ui/TiddlerInfo/Advanced",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Advanced/Caption}}",
"text": "<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo/Advanced]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>> mode=\"block\"/>\n</$list>\n"
},
"$:/core/ui/TiddlerInfo/Fields": {
"title": "$:/core/ui/TiddlerInfo/Fields",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Fields/Caption}}",
"text": "<$transclude tiddler=\"$:/core/ui/TiddlerFields\"/>\n"
},
"$:/core/ui/TiddlerInfo/List": {
"title": "$:/core/ui/TiddlerInfo/List",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/List/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[list{!!title}]\" emptyMessage=<<lingo List/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo/Listed": {
"title": "$:/core/ui/TiddlerInfo/Listed",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Listed/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]listed[]!is[system]]\" emptyMessage=<<lingo Listed/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo/References": {
"title": "$:/core/ui/TiddlerInfo/References",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/References/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]backlinks[]sort[title]]\" emptyMessage=<<lingo References/Empty>> template=\"$:/core/ui/ListItemTemplate\">\n</$list>"
},
"$:/core/ui/TiddlerInfo/Tagging": {
"title": "$:/core/ui/TiddlerInfo/Tagging",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Tagging/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]tagging[]]\" emptyMessage=<<lingo Tagging/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo/Tools": {
"title": "$:/core/ui/TiddlerInfo/Tools",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Tools/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/TiddlerInfo": {
"title": "$:/core/ui/TiddlerInfo",
"text": "<div style=\"position:relative;\">\n<div class=\"tc-tiddler-controls\" style=\"position:absolute;right:0;\">\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"sticky\">\n<$button set=<<tiddlerInfoState>> setTo=\"\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=\"tc-btn-invisible\">\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n</div>\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo]!has[draft.of]]\" default={{$:/config/TiddlerInfo/Default}}/>\n"
},
"$:/core/ui/TopBar/menu": {
"title": "$:/core/ui/TopBar/menu",
"tags": "$:/tags/TopRightBar",
"text": "<$list filter=\"[[$:/state/sidebar]get[text]] +[else[yes]!match[no]]\" variable=\"ignore\">\n<$button set=\"$:/state/sidebar\" setTo=\"no\" tooltip={{$:/language/Buttons/HideSideBar/Hint}} aria-label={{$:/language/Buttons/HideSideBar/Caption}} class=\"tc-btn-invisible tc-hide-sidebar-btn\">{{$:/core/images/chevron-right}}</$button>\n</$list>\n<$list filter=\"[[$:/state/sidebar]get[text]] +[else[yes]match[no]]\" variable=\"ignore\">\n<$button set=\"$:/state/sidebar\" setTo=\"yes\" tooltip={{$:/language/Buttons/ShowSideBar/Hint}} aria-label={{$:/language/Buttons/ShowSideBar/Caption}} class=\"tc-btn-invisible tc-show-sidebar-btn\">{{$:/core/images/chevron-left}}</$button>\n</$list>\n"
},
"$:/core/ui/UntaggedTemplate": {
"title": "$:/core/ui/UntaggedTemplate",
"text": "\\define lingo-base() $:/language/SideBar/\n<$button popup=<<qualify \"$:/state/popup/tag\">> class=\"tc-btn-invisible tc-untagged-label tc-tag-label\">\n<<lingo Tags/Untagged/Caption>>\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\">\n<div class=\"tc-drop-down\">\n<$list filter=\"[untagged[]!is[system]] -[tags[]] +[sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/body": {
"title": "$:/core/ui/ViewTemplate/body",
"tags": "$:/tags/ViewTemplate",
"text": "<$reveal tag=\"div\" class=\"tc-tiddler-body\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[current]!has[plugin-type]!field:hide-body[yes]]\">\n\n<$transclude>\n\n<$transclude tiddler=\"$:/language/MissingTiddler/Hint\"/>\n\n</$transclude>\n\n</$list>\n\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/classic": {
"title": "$:/core/ui/ViewTemplate/classic",
"tags": "$:/tags/ViewTemplate $:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/ClassicWarning/\n<$list filter=\"[all[current]type[text/x-tiddlywiki]]\">\n<div class=\"tc-message-box\">\n\n<<lingo Hint>>\n\n<$button set=\"!!type\" setTo=\"text/vnd.tiddlywiki\"><<lingo Upgrade/Caption>></$button>\n\n</div>\n</$list>\n"
},
"$:/core/ui/ViewTemplate/import": {
"title": "$:/core/ui/ViewTemplate/import",
"tags": "$:/tags/ViewTemplate",
"text": "\\define lingo-base() $:/language/Import/\n\n\\define buttons()\n<$button message=\"tm-delete-tiddler\" param=<<currentTiddler>>><<lingo Listing/Cancel/Caption>></$button>\n<$button message=\"tm-perform-import\" param=<<currentTiddler>>><<lingo Listing/Import/Caption>></$button>\n<<lingo Listing/Preview>> <$select tiddler=\"$:/state/importpreviewtype\" default=\"$:/core/ui/ImportPreviews/Text\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ImportPreview]!has[draft.of]]\">\n<option value=<<currentTiddler>>>{{!!caption}}</option>\n</$list>\n</$select>\n\\end\n\n<$list filter=\"[all[current]field:plugin-type[import]]\">\n\n<div class=\"tc-import\">\n\n<<lingo Listing/Hint>>\n\n<<buttons>>\n\n{{||$:/core/ui/ImportListing}}\n\n<<buttons>>\n\n</div>\n\n</$list>\n"
},
"$:/core/ui/ViewTemplate/plugin": {
"title": "$:/core/ui/ViewTemplate/plugin",
"tags": "$:/tags/ViewTemplate",
"text": "<$reveal tag=\"div\" class=\"tc-tiddler-plugin-info\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[current]has[plugin-type]] -[all[current]field:plugin-type[import]]\">\n<$set name=\"plugin-type\" value={{!!plugin-type}}>\n<$set name=\"default-popup-state\" value=\"yes\">\n<$set name=\"qualified-state\" value=<<qualify \"$:/state/plugin-info\">>>\n{{||$:/core/ui/Components/plugin-info}}\n</$set>\n</$set>\n</$set>\n</$list>\n</$reveal>"
},
"$:/core/ui/ViewTemplate/subtitle": {
"title": "$:/core/ui/ViewTemplate/subtitle",
"tags": "$:/tags/ViewTemplate",
"text": "\\whitespace trim\n<$reveal type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n<div class=\"tc-subtitle\">\n<$link to={{!!modifier}} />\n<$view field=\"modified\" format=\"date\" template={{$:/language/Tiddler/DateFormat}}/>\n</div>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/tags": {
"title": "$:/core/ui/ViewTemplate/tags",
"tags": "$:/tags/ViewTemplate",
"text": "<$reveal type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n<div class=\"tc-tags-wrapper\"><$list filter=\"[all[current]tags[]sort[title]]\" template=\"$:/core/ui/TagTemplate\" storyview=\"pop\"/></div>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/title": {
"title": "$:/core/ui/ViewTemplate/title",
"tags": "$:/tags/ViewTemplate",
"text": "\\whitespace trim\n\\define title-styles()\nfill:$(foregroundColor)$;\n\\end\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title\">\n<div class=\"tc-titlebar\">\n<span class=\"tc-tiddler-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\"><$transclude tiddler=<<listItem>>/></$set></$reveal></$list>\n</span>\n<$set name=\"tv-wikilinks\" value={{$:/config/Tiddlers/TitleLinks}}>\n<$link>\n<$set name=\"foregroundColor\" value={{!!color}}>\n<$list filter=\"[all[current]has[icon]]~[[$:/config/DefaultTiddlerIcon]has[text]]\">\n<span class=\"tc-tiddler-title-icon\" style=<<title-styles>>>\n<$transclude tiddler={{!!icon}}>\n<$transclude tiddler={{$:/config/DefaultTiddlerIcon}}/>\n</$transclude>\n</span>\n</$list>\n</$set>\n<$list filter=\"[all[current]removeprefix[$:/]]\">\n<h2 class=\"tc-title\" title={{$:/language/SystemTiddler/Tooltip}}>\n<span class=\"tc-system-title-prefix\">$:/</span><$text text=<<currentTiddler>>/>\n</h2>\n</$list>\n<$list filter=\"[all[current]!prefix[$:/]]\">\n<h2 class=\"tc-title\">\n<$view field=\"title\"/>\n</h2>\n</$list>\n</$link>\n</$set>\n</div>\n\n<$reveal type=\"nomatch\" text=\"\" default=\"\" state=<<tiddlerInfoState>> class=\"tc-tiddler-info tc-popup-handle\" animate=\"yes\" retain=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfoSegment]!has[draft.of]] [[$:/core/ui/TiddlerInfo]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>> mode=\"block\"/></$list>\n\n</$reveal>\n</div>"
},
"$:/core/ui/ViewTemplate/unfold": {
"title": "$:/core/ui/ViewTemplate/unfold",
"tags": "$:/tags/ViewTemplate",
"text": "<$reveal tag=\"div\" type=\"nomatch\" state=\"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar\" text=\"hide\">\n<$reveal tag=\"div\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=\"tc-fold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n{{$:/core/images/chevron-up}}\n</$button>\n</$reveal>\n<$reveal tag=\"div\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"show\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=\"tc-unfold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate": {
"title": "$:/core/ui/ViewTemplate",
"text": "\\define folded-state()\n$:/state/folded/$(currentTiddler)$\n\\end\n\\define cancel-delete-tiddler-actions(message) <$action-sendmessage $message=\"tm-$message$-tiddler\"/>\n\\import [all[shadows+tiddlers]tag[$:/tags/Macro/View]!has[draft.of]]\n<$vars storyTiddler=<<currentTiddler>> tiddlerInfoState=<<qualify \"$:/state/popup/tiddler-info\">>><div data-tiddler-title=<<currentTiddler>> data-tags={{!!tags}} class={{{ tc-tiddler-frame tc-tiddler-view-frame [<currentTiddler>is[tiddler]then[tc-tiddler-exists]] [<currentTiddler>is[missing]!is[shadow]then[tc-tiddler-missing]] [<currentTiddler>is[shadow]then[tc-tiddler-exists tc-tiddler-shadow]] [<currentTiddler>is[shadow]is[tiddler]then[tc-tiddler-overridden-shadow]] [<currentTiddler>is[system]then[tc-tiddler-system]] [{!!class}] [<currentTiddler>tags[]encodeuricomponent[]addprefix[tc-tagged-]] +[join[ ]] }}}><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewTemplate]!has[draft.of]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>>/></$list>\n</div>\n</$vars>\n"
},
"$:/core/ui/Buttons/clone": {
"title": "$:/core/ui/Buttons/clone",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/clone-button}} {{$:/language/Buttons/Clone/Caption}}",
"description": "{{$:/language/Buttons/Clone/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-new-tiddler\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Clone/Hint}} aria-label={{$:/language/Buttons/Clone/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/clone-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Clone/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/close-others": {
"title": "$:/core/ui/Buttons/close-others",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/close-others-button}} {{$:/language/Buttons/CloseOthers/Caption}}",
"description": "{{$:/language/Buttons/CloseOthers/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-close-other-tiddlers\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/CloseOthers/Hint}} aria-label={{$:/language/Buttons/CloseOthers/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/close-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/CloseOthers/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/close": {
"title": "$:/core/ui/Buttons/close",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/close-button}} {{$:/language/Buttons/Close/Caption}}",
"description": "{{$:/language/Buttons/Close/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/close-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Close/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/edit": {
"title": "$:/core/ui/Buttons/edit",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/edit-button}} {{$:/language/Buttons/Edit/Caption}}",
"description": "{{$:/language/Buttons/Edit/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-edit-tiddler\" tooltip={{$:/language/Buttons/Edit/Hint}} aria-label={{$:/language/Buttons/Edit/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/edit-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Edit/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/export-tiddler": {
"title": "$:/core/ui/Buttons/export-tiddler",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportTiddler/Caption}}",
"description": "{{$:/language/Buttons/ExportTiddler/Hint}}",
"text": "\\define makeExportFilter()\n[[$(currentTiddler)$]]\n\\end\n<$macrocall $name=\"exportButton\" exportFilter=<<makeExportFilter>> lingoBase=\"$:/language/Buttons/ExportTiddler/\" baseFilename=<<currentTiddler>>/>"
},
"$:/core/ui/Buttons/fold-bar": {
"title": "$:/core/ui/Buttons/fold-bar",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/chevron-up}} {{$:/language/Buttons/Fold/FoldBar/Caption}}",
"description": "{{$:/language/Buttons/Fold/FoldBar/Hint}}",
"text": "<!-- This dummy toolbar button is here to allow visibility of the fold-bar to be controlled as if it were a toolbar button -->"
},
"$:/core/ui/Buttons/fold-others": {
"title": "$:/core/ui/Buttons/fold-others",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/fold-others-button}} {{$:/language/Buttons/FoldOthers/Caption}}",
"description": "{{$:/language/Buttons/FoldOthers/Hint}}",
"text": "\\whitespace trim\n<$button tooltip={{$:/language/Buttons/FoldOthers/Hint}} aria-label={{$:/language/Buttons/FoldOthers/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-other-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/FoldOthers/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/fold": {
"title": "$:/core/ui/Buttons/fold",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/fold-button}} {{$:/language/Buttons/Fold/Caption}}",
"description": "{{$:/language/Buttons/Fold/Hint}}",
"text": "\\whitespace trim\n<$reveal type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" default=\"show\">\n<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Fold/Caption}}/>\n</span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"match\" stateTitle=<<folded-state>> text=\"hide\" default=\"show\">\n<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Unfold/Caption}}/>\n</span>\n</$list>\n</$button>\n</$reveal>\n"
},
"$:/core/ui/Buttons/info": {
"title": "$:/core/ui/Buttons/info",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/info-button}} {{$:/language/Buttons/Info/Caption}}",
"description": "{{$:/language/Buttons/Info/Hint}}",
"text": "\\whitespace trim\n\\define button-content()\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/info-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Info/Caption}}/>\n</span>\n</$list>\n\\end\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"popup\">\n<$button popup=<<tiddlerInfoState>> tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"sticky\">\n<$reveal state=<<tiddlerInfoState>> type=\"match\" text=\"\" default=\"\">\n<$button set=<<tiddlerInfoState>> setTo=\"yes\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n<$reveal state=<<tiddlerInfoState>> type=\"nomatch\" text=\"\" default=\"\">\n<$button set=<<tiddlerInfoState>> setTo=\"\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n</$reveal>"
},
"$:/core/ui/Buttons/more-tiddler-actions": {
"title": "$:/core/ui/Buttons/more-tiddler-actions",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}",
"description": "{{$:/language/Buttons/More/Hint}}",
"text": "\\whitespace trim\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<<qualify \"$:/state/popup/more\">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/More/Caption}}/>\n</span>\n</$list>\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/more\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n\n<div class=\"tc-drop-down\">\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]] -[[$:/core/ui/Buttons/more-tiddler-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$set>\n\n</$reveal>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</div>\n\n</$reveal>"
},
"$:/core/ui/Buttons/new-here": {
"title": "$:/core/ui/Buttons/new-here",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/new-here-button}} {{$:/language/Buttons/NewHere/Caption}}",
"description": "{{$:/language/Buttons/NewHere/Hint}}",
"text": "\\whitespace trim\n\\define newHereActions()\n<$set name=\"tags\" filter=\"[<currentTiddler>] [{$:/config/NewTiddler/Tags}]\">\n<$action-sendmessage $message=\"tm-new-tiddler\" tags=<<tags>>/>\n</$set>\n\\end\n\\define newHereButton()\n<$button actions=<<newHereActions>> tooltip={{$:/language/Buttons/NewHere/Hint}} aria-label={{$:/language/Buttons/NewHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-here-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/NewHere/Caption}}/>\n</span>\n</$list>\n</$button>\n\\end\n<<newHereButton>>\n"
},
"$:/core/ui/Buttons/new-journal-here": {
"title": "$:/core/ui/Buttons/new-journal-here",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournalHere/Caption}}",
"description": "{{$:/language/Buttons/NewJournalHere/Hint}}",
"text": "\\whitespace trim\n\\define journalButtonTags()\n[[$(currentTiddlerTag)$]] $(journalTags)$\n\\end\n\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournalHere/Hint}} aria-label={{$:/language/Buttons/NewJournalHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$wikify name=\"journalTitle\" text=\"\"\"<$macrocall $name=\"now\" format=<<journalTitleTemplate>>/>\"\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<journalTitle>> tags=<<journalButtonTags>>/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/NewJournalHere/Caption}}/>\n</span>\n</$list>\n</$wikify>\n</$button>\n\\end\n<$set name=\"journalTitleTemplate\" value={{$:/config/NewJournal/Title}}>\n<$set name=\"journalTags\" value={{$:/config/NewJournal/Tags}}>\n<$set name=\"currentTiddlerTag\" value=<<currentTiddler>>>\n<<journalButton>>\n</$set>\n</$set>\n</$set>\n"
},
"$:/core/ui/Buttons/open-window": {
"title": "$:/core/ui/Buttons/open-window",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/open-window}} {{$:/language/Buttons/OpenWindow/Caption}}",
"description": "{{$:/language/Buttons/OpenWindow/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-open-window\" tooltip={{$:/language/Buttons/OpenWindow/Hint}} aria-label={{$:/language/Buttons/OpenWindow/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/open-window}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/OpenWindow/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/permalink": {
"title": "$:/core/ui/Buttons/permalink",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/permalink-button}} {{$:/language/Buttons/Permalink/Caption}}",
"description": "{{$:/language/Buttons/Permalink/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-permalink\" tooltip={{$:/language/Buttons/Permalink/Hint}} aria-label={{$:/language/Buttons/Permalink/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/permalink-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Permalink/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/permaview": {
"title": "$:/core/ui/Buttons/permaview",
"tags": "$:/tags/ViewToolbar $:/tags/PageControls",
"caption": "{{$:/core/images/permaview-button}} {{$:/language/Buttons/Permaview/Caption}}",
"description": "{{$:/language/Buttons/Permaview/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-permaview\" tooltip={{$:/language/Buttons/Permaview/Hint}} aria-label={{$:/language/Buttons/Permaview/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/permaview-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Permaview/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/DefaultTiddlers": {
"title": "$:/DefaultTiddlers",
"text": "GettingStarted\n"
},
"$:/temp/advancedsearch": {
"title": "$:/temp/advancedsearch",
"text": ""
},
"$:/snippets/allfields": {
"title": "$:/snippets/allfields",
"text": "\\define renderfield(title)\n<tr class=\"tc-view-field\"><td class=\"tc-view-field-name\">''$title$'':</td><td class=\"tc-view-field-value\">//{{$:/language/Docs/Fields/$title$}}//</td></tr>\n\\end\n<table class=\"tc-view-field-table\"><tbody><$list filter=\"[fields[]sort[title]]\" variable=\"listItem\"><$macrocall $name=\"renderfield\" title=<<listItem>>/></$list>\n</tbody></table>\n"
},
"$:/config/AnimationDuration": {
"title": "$:/config/AnimationDuration",
"text": "400"
},
"$:/config/AutoFocus": {
"title": "$:/config/AutoFocus",
"text": "title"
},
"$:/config/AutoSave": {
"title": "$:/config/AutoSave",
"text": "yes"
},
"$:/config/BitmapEditor/Colour": {
"title": "$:/config/BitmapEditor/Colour",
"text": "#444"
},
"$:/config/BitmapEditor/ImageSizes": {
"title": "$:/config/BitmapEditor/ImageSizes",
"text": "[[62px 100px]] [[100px 62px]] [[124px 200px]] [[200px 124px]] [[248px 400px]] [[371px 600px]] [[400px 248px]] [[556px 900px]] [[600px 371px]] [[742px 1200px]] [[900px 556px]] [[1200px 742px]]"
},
"$:/config/BitmapEditor/LineWidth": {
"title": "$:/config/BitmapEditor/LineWidth",
"text": "3px"
},
"$:/config/BitmapEditor/LineWidths": {
"title": "$:/config/BitmapEditor/LineWidths",
"text": "0.25px 0.5px 1px 2px 3px 4px 6px 8px 10px 16px 20px 28px 40px 56px 80px"
},
"$:/config/BitmapEditor/Opacities": {
"title": "$:/config/BitmapEditor/Opacities",
"text": "0.01 0.025 0.05 0.075 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0"
},
"$:/config/BitmapEditor/Opacity": {
"title": "$:/config/BitmapEditor/Opacity",
"text": "1.0"
},
"$:/config/DefaultMoreSidebarTab": {
"title": "$:/config/DefaultMoreSidebarTab",
"text": "$:/core/ui/MoreSideBar/Tags"
},
"$:/config/DefaultSidebarTab": {
"title": "$:/config/DefaultSidebarTab",
"text": "$:/core/ui/SideBar/Open"
},
"$:/config/DownloadSaver/AutoSave": {
"title": "$:/config/DownloadSaver/AutoSave",
"text": "no"
},
"$:/config/Drafts/TypingTimeout": {
"title": "$:/config/Drafts/TypingTimeout",
"text": "400"
},
"$:/config/EditMode/fieldname-filter": {
"title": "$:/config/EditMode/fieldname-filter",
"first-search-filter": "[!is[shadow]!is[system]fields[]search:title<userInput>sort[]] -created -creator -draft.of -draft.title -modified -modifier -tags -text -title -type",
"second-search-filter": "[fields[]search:title<userInput>sort[]] -[!is[shadow]!is[system]fields[]]"
},
"$:/config/EditTabIndex": {
"title": "$:/config/EditTabIndex",
"text": "1\n"
},
"$:/config/EditTemplateFields/Visibility/title": {
"title": "$:/config/EditTemplateFields/Visibility/title",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/tags": {
"title": "$:/config/EditTemplateFields/Visibility/tags",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/text": {
"title": "$:/config/EditTemplateFields/Visibility/text",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/creator": {
"title": "$:/config/EditTemplateFields/Visibility/creator",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/created": {
"title": "$:/config/EditTemplateFields/Visibility/created",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/modified": {
"title": "$:/config/EditTemplateFields/Visibility/modified",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/modifier": {
"title": "$:/config/EditTemplateFields/Visibility/modifier",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/type": {
"title": "$:/config/EditTemplateFields/Visibility/type",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/draft.title": {
"title": "$:/config/EditTemplateFields/Visibility/draft.title",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/draft.of": {
"title": "$:/config/EditTemplateFields/Visibility/draft.of",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/revision": {
"title": "$:/config/EditTemplateFields/Visibility/revision",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/bag": {
"title": "$:/config/EditTemplateFields/Visibility/bag",
"text": "hide"
},
"$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4": {
"title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4",
"text": "hide"
},
"$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5": {
"title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5",
"text": "hide"
},
"$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6": {
"title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6",
"text": "hide"
},
"$:/config/EditorTypeMappings/image/gif": {
"title": "$:/config/EditorTypeMappings/image/gif",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/webp": {
"title": "$:/config/EditorTypeMappings/image/webp",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/heic": {
"title": "$:/config/EditorTypeMappings/image/heic",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/heif": {
"title": "$:/config/EditorTypeMappings/image/heif",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/jpeg": {
"title": "$:/config/EditorTypeMappings/image/jpeg",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/jpg": {
"title": "$:/config/EditorTypeMappings/image/jpg",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/png": {
"title": "$:/config/EditorTypeMappings/image/png",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/x-icon": {
"title": "$:/config/EditorTypeMappings/image/x-icon",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/text/vnd.tiddlywiki": {
"title": "$:/config/EditorTypeMappings/text/vnd.tiddlywiki",
"text": "text"
},
"$:/config/Manager/Show": {
"title": "$:/config/Manager/Show",
"text": "tiddlers"
},
"$:/config/Manager/Filter": {
"title": "$:/config/Manager/Filter",
"text": ""
},
"$:/config/Manager/Order": {
"title": "$:/config/Manager/Order",
"text": "forward"
},
"$:/config/Manager/Sort": {
"title": "$:/config/Manager/Sort",
"text": "title"
},
"$:/config/Manager/System": {
"title": "$:/config/Manager/System",
"text": "system"
},
"$:/config/Manager/Tag": {
"title": "$:/config/Manager/Tag",
"text": ""
},
"$:/state/popup/manager/item/$:/Manager/ItemMain/RawText": {
"title": "$:/state/popup/manager/item/$:/Manager/ItemMain/RawText",
"text": "hide"
},
"$:/config/MissingLinks": {
"title": "$:/config/MissingLinks",
"text": "yes"
},
"$:/config/Navigation/UpdateAddressBar": {
"title": "$:/config/Navigation/UpdateAddressBar",
"text": "no"
},
"$:/config/Navigation/UpdateHistory": {
"title": "$:/config/Navigation/UpdateHistory",
"text": "no"
},
"$:/config/NewImageType": {
"title": "$:/config/NewImageType",
"text": "jpeg"
},
"$:/config/OfficialPluginLibrary": {
"title": "$:/config/OfficialPluginLibrary",
"tags": "$:/tags/PluginLibrary",
"url": "https://tiddlywiki.com/library/v5.1.23/index.html",
"caption": "{{$:/language/OfficialPluginLibrary}}",
"text": "{{$:/language/OfficialPluginLibrary/Hint}}\n"
},
"$:/config/Navigation/openLinkFromInsideRiver": {
"title": "$:/config/Navigation/openLinkFromInsideRiver",
"text": "below"
},
"$:/config/Navigation/openLinkFromOutsideRiver": {
"title": "$:/config/Navigation/openLinkFromOutsideRiver",
"text": "top"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/manager": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/manager",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/print": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/print",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all",
"text": "hide"
},
"$:/config/Performance/Instrumentation": {
"title": "$:/config/Performance/Instrumentation",
"text": "no"
},
"$:/config/RegisterPluginType/plugin": {
"title": "$:/config/RegisterPluginType/plugin",
"text": "yes"
},
"$:/config/RegisterPluginType/theme": {
"title": "$:/config/RegisterPluginType/theme",
"text": "no"
},
"$:/config/RegisterPluginType/language": {
"title": "$:/config/RegisterPluginType/language",
"text": "no"
},
"$:/config/RegisterPluginType/info": {
"title": "$:/config/RegisterPluginType/info",
"text": "yes"
},
"$:/config/RegisterPluginType/import": {
"title": "$:/config/RegisterPluginType/import",
"text": "no"
},
"$:/config/SaveWikiButton/Template": {
"title": "$:/config/SaveWikiButton/Template",
"text": "$:/core/save/all"
},
"$:/config/SaverFilter": {
"title": "$:/config/SaverFilter",
"text": "[all[]] -[prefix[$:/HistoryList]] -[prefix[$:/StoryList]] -[status[pending]plugin-type[import]] -[[$:/isEncrypted]] -[[$:/UploadName]] -[prefix[$:/state/]] -[prefix[$:/temp/]]\n"
},
"$:/config/Search/AutoFocus": {
"title": "$:/config/Search/AutoFocus",
"text": "true"
},
"$:/config/Search/MinLength": {
"title": "$:/config/Search/MinLength",
"text": "3"
},
"$:/config/SearchResults/Default": {
"title": "$:/config/SearchResults/Default",
"text": "$:/core/ui/DefaultSearchResultList"
},
"$:/config/Server/ExternalFilters/[all[tiddlers]!is[system]sort[title]]": {
"title": "$:/config/Server/ExternalFilters/[all[tiddlers]!is[system]sort[title]]",
"text": "yes"
},
"$:/config/ShortcutInfo/add-field": {
"title": "$:/config/ShortcutInfo/add-field",
"text": "{{$:/language/EditTemplate/Fields/Add/Button/Hint}}"
},
"$:/config/ShortcutInfo/advanced-search": {
"title": "$:/config/ShortcutInfo/advanced-search",
"text": "{{$:/language/Buttons/AdvancedSearch/Hint}}"
},
"$:/config/ShortcutInfo/advanced-search-sidebar": {
"title": "$:/config/ShortcutInfo/advanced-search-sidebar",
"text": "{{$:/language/Shortcuts/Input/AdvancedSearch/Hint}}"
},
"$:/config/ShortcutInfo/bold": {
"title": "$:/config/ShortcutInfo/bold",
"text": "{{$:/language/Buttons/Bold/Hint}}"
},
"$:/config/ShortcutInfo/cancel-edit-tiddler": {
"title": "$:/config/ShortcutInfo/cancel-edit-tiddler",
"text": "{{$:/language/Buttons/Cancel/Hint}}"
},
"$:/config/ShortcutInfo/change-sidebar-layout": {
"title": "$:/config/ShortcutInfo/change-sidebar-layout",
"text": "{{$:/language/Shortcuts/SidebarLayout/Hint}}"
},
"$:/config/ShortcutInfo/delete-field": {
"title": "$:/config/ShortcutInfo/delete-field",
"text": "{{$:/language/EditTemplate/Field/Remove/Hint}}"
},
"$:/config/ShortcutInfo/excise": {
"title": "$:/config/ShortcutInfo/excise",
"text": "{{$:/language/Buttons/Excise/Hint}}"
},
"$:/config/ShortcutInfo/heading-1": {
"title": "$:/config/ShortcutInfo/heading-1",
"text": "{{$:/language/Buttons/Heading1/Hint}}"
},
"$:/config/ShortcutInfo/heading-2": {
"title": "$:/config/ShortcutInfo/heading-2",
"text": "{{$:/language/Buttons/Heading2/Hint}}"
},
"$:/config/ShortcutInfo/heading-3": {
"title": "$:/config/ShortcutInfo/heading-3",
"text": "{{$:/language/Buttons/Heading3/Hint}}"
},
"$:/config/ShortcutInfo/heading-4": {
"title": "$:/config/ShortcutInfo/heading-4",
"text": "{{$:/language/Buttons/Heading4/Hint}}"
},
"$:/config/ShortcutInfo/heading-5": {
"title": "$:/config/ShortcutInfo/heading-5",
"text": "{{$:/language/Buttons/Heading5/Hint}}"
},
"$:/config/ShortcutInfo/heading-6": {
"title": "$:/config/ShortcutInfo/heading-6",
"text": "{{$:/language/Buttons/Heading6/Hint}}"
},
"$:/config/ShortcutInfo/input-accept": {
"title": "$:/config/ShortcutInfo/input-accept",
"text": "{{$:/language/Shortcuts/Input/Accept/Hint}}"
},
"$:/config/ShortcutInfo/input-accept-variant": {
"title": "$:/config/ShortcutInfo/input-accept-variant",
"text": "{{$:/language/Shortcuts/Input/AcceptVariant/Hint}}"
},
"$:/config/ShortcutInfo/input-cancel": {
"title": "$:/config/ShortcutInfo/input-cancel",
"text": "{{$:/language/Shortcuts/Input/Cancel/Hint}}"
},
"$:/config/ShortcutInfo/input-down": {
"title": "$:/config/ShortcutInfo/input-down",
"text": "{{$:/language/Shortcuts/Input/Down/Hint}}"
},
"$:/config/ShortcutInfo/input-tab-left": {
"title": "$:/config/ShortcutInfo/input-tab-left",
"text": "{{$:/language/Shortcuts/Input/Tab-Left/Hint}}"
},
"$:/config/ShortcutInfo/input-tab-right": {
"title": "$:/config/ShortcutInfo/input-tab-right",
"text": "{{$:/language/Shortcuts/Input/Tab-Right/Hint}}"
},
"$:/config/ShortcutInfo/input-up": {
"title": "$:/config/ShortcutInfo/input-up",
"text": "{{$:/language/Shortcuts/Input/Up/Hint}}"
},
"$:/config/ShortcutInfo/italic": {
"title": "$:/config/ShortcutInfo/italic",
"text": "{{$:/language/Buttons/Italic/Hint}}"
},
"$:/config/ShortcutInfo/layout-switcher": {
"title": "$:/config/ShortcutInfo/layout-switcher",
"text": "{{$:/language/LayoutSwitcher/Description}}"
},
"$:/config/ShortcutInfo/link": {
"title": "$:/config/ShortcutInfo/link",
"text": "{{$:/language/Buttons/Link/Hint}}"
},
"$:/config/ShortcutInfo/linkify": {
"title": "$:/config/ShortcutInfo/linkify",
"text": "{{$:/language/Buttons/Linkify/Hint}}"
},
"$:/config/ShortcutInfo/list-bullet": {
"title": "$:/config/ShortcutInfo/list-bullet",
"text": "{{$:/language/Buttons/ListBullet/Hint}}"
},
"$:/config/ShortcutInfo/list-number": {
"title": "$:/config/ShortcutInfo/list-number",
"text": "{{$:/language/Buttons/ListNumber/Hint}}"
},
"$:/config/ShortcutInfo/mono-block": {
"title": "$:/config/ShortcutInfo/mono-block",
"text": "{{$:/language/Buttons/MonoBlock/Hint}}"
},
"$:/config/ShortcutInfo/mono-line": {
"title": "$:/config/ShortcutInfo/mono-line",
"text": "{{$:/language/Buttons/MonoLine/Hint}}"
},
"$:/config/ShortcutInfo/new-image": {
"title": "$:/config/ShortcutInfo/new-image",
"text": "{{$:/language/Buttons/NewImage/Hint}}"
},
"$:/config/ShortcutInfo/new-journal": {
"title": "$:/config/ShortcutInfo/new-journal",
"text": "{{$:/language/Buttons/NewJournal/Hint}}"
},
"$:/config/ShortcutInfo/new-tiddler": {
"title": "$:/config/ShortcutInfo/new-tiddler",
"text": "{{$:/language/Buttons/NewTiddler/Hint}}"
},
"$:/config/ShortcutInfo/picture": {
"title": "$:/config/ShortcutInfo/picture",
"text": "{{$:/language/Buttons/Picture/Hint}}"
},
"$:/config/ShortcutInfo/preview": {
"title": "$:/config/ShortcutInfo/preview",
"text": "{{$:/language/Buttons/Preview/Hint}}"
},
"$:/config/ShortcutInfo/quote": {
"title": "$:/config/ShortcutInfo/quote",
"text": "{{$:/language/Buttons/Quote/Hint}}"
},
"$:/config/ShortcutInfo/save-tiddler": {
"title": "$:/config/ShortcutInfo/save-tiddler",
"text": "{{$:/language/Buttons/Save/Hint}}"
},
"$:/config/ShortcutInfo/save-wiki": {
"title": "$:/config/ShortcutInfo/save-wiki",
"text": "{{$:/language/Buttons/SaveWiki/Hint}}"
},
"$:/config/ShortcutInfo/sidebar-search": {
"title": "$:/config/ShortcutInfo/sidebar-search",
"text": "{{$:/language/Buttons/SidebarSearch/Hint}}"
},
"$:/config/ShortcutInfo/stamp": {
"title": "$:/config/ShortcutInfo/stamp",
"text": "{{$:/language/Buttons/Stamp/Hint}}"
},
"$:/config/ShortcutInfo/strikethrough": {
"title": "$:/config/ShortcutInfo/strikethrough",
"text": "{{$:/language/Buttons/Strikethrough/Hint}}"
},
"$:/config/ShortcutInfo/subscript": {
"title": "$:/config/ShortcutInfo/subscript",
"text": "{{$:/language/Buttons/Subscript/Hint}}"
},
"$:/config/ShortcutInfo/superscript": {
"title": "$:/config/ShortcutInfo/superscript",
"text": "{{$:/language/Buttons/Superscript/Hint}}"
},
"$:/config/ShortcutInfo/toggle-sidebar": {
"title": "$:/config/ShortcutInfo/toggle-sidebar",
"text": "{{$:/language/Buttons/ToggleSidebar/Hint}}"
},
"$:/config/ShortcutInfo/transcludify": {
"title": "$:/config/ShortcutInfo/transcludify",
"text": "{{$:/language/Buttons/Transcludify/Hint}}"
},
"$:/config/ShortcutInfo/underline": {
"title": "$:/config/ShortcutInfo/underline",
"text": "{{$:/language/Buttons/Underline/Hint}}"
},
"$:/config/SwitcherTargets/layout": {
"title": "$:/config/SwitcherTargets/layout",
"text": "$:/snippets/LayoutSwitcher"
},
"$:/config/SwitcherTargets/language": {
"title": "$:/config/SwitcherTargets/language",
"text": "$:/snippets/languageswitcher"
},
"$:/config/SwitcherTargets/palette": {
"title": "$:/config/SwitcherTargets/palette",
"text": "$:/core/ui/ControlPanel/Palette"
},
"$:/config/SwitcherTargets/theme": {
"title": "$:/config/SwitcherTargets/theme",
"text": "$:/core/ui/ControlPanel/Theme"
},
"$:/config/SyncFilter": {
"title": "$:/config/SyncFilter",
"text": "[is[tiddler]] -[[$:/core]] -[[$:/library/sjcl.js]] -[prefix[$:/boot/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/isEncrypted]] -[prefix[$:/status/]] -[prefix[$:/state/]] -[prefix[$:/temp/]]\n"
},
"$:/config/SyncSystemTiddlersFromServer": {
"title": "$:/config/SyncSystemTiddlersFromServer",
"text": "no"
},
"$:/config/Tags/MinLength": {
"title": "$:/config/Tags/MinLength",
"text": "0"
},
"$:/config/TextEditor/EditorHeight/Height": {
"title": "$:/config/TextEditor/EditorHeight/Height",
"text": "400px"
},
"$:/config/TextEditor/EditorHeight/Mode": {
"title": "$:/config/TextEditor/EditorHeight/Mode",
"text": "auto"
},
"$:/config/TiddlerInfo/Default": {
"title": "$:/config/TiddlerInfo/Default",
"text": "$:/core/ui/TiddlerInfo/Fields"
},
"$:/config/TiddlerInfo/Mode": {
"title": "$:/config/TiddlerInfo/Mode",
"text": "popup"
},
"$:/config/Tiddlers/TitleLinks": {
"title": "$:/config/Tiddlers/TitleLinks",
"text": "no"
},
"$:/config/Toolbar/ButtonClass": {
"title": "$:/config/Toolbar/ButtonClass",
"text": "tc-btn-invisible"
},
"$:/config/Toolbar/Icons": {
"title": "$:/config/Toolbar/Icons",
"text": "yes"
},
"$:/config/Toolbar/Text": {
"title": "$:/config/Toolbar/Text",
"text": "no"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions",
"text": "show"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others",
"text": "hide"
},
"$:/config/shortcuts-mac/bold": {
"title": "$:/config/shortcuts-mac/bold",
"text": "meta-B"
},
"$:/config/shortcuts-mac/input-tab-left": {
"title": "$:/config/shortcuts-mac/input-tab-left",
"text": "ctrl-Left"
},
"$:/config/shortcuts-mac/input-tab-right": {
"title": "$:/config/shortcuts-mac/input-tab-right",
"text": "ctrl-Right"
},
"$:/config/shortcuts-mac/italic": {
"title": "$:/config/shortcuts-mac/italic",
"text": "meta-I"
},
"$:/config/shortcuts-mac/underline": {
"title": "$:/config/shortcuts-mac/underline",
"text": "meta-U"
},
"$:/config/shortcuts-mac/new-image": {
"title": "$:/config/shortcuts-mac/new-image",
"text": "ctrl-I"
},
"$:/config/shortcuts-mac/new-journal": {
"title": "$:/config/shortcuts-mac/new-journal",
"text": "ctrl-J"
},
"$:/config/shortcuts-mac/new-tiddler": {
"title": "$:/config/shortcuts-mac/new-tiddler",
"text": "ctrl-N"
},
"$:/config/shortcuts-mac/save-wiki": {
"title": "$:/config/shortcuts-mac/save-wiki",
"text": "meta-S"
},
"$:/config/shortcuts-not-mac/bold": {
"title": "$:/config/shortcuts-not-mac/bold",
"text": "ctrl-B"
},
"$:/config/shortcuts-not-mac/italic": {
"title": "$:/config/shortcuts-not-mac/italic",
"text": "ctrl-I"
},
"$:/config/shortcuts-not-mac/underline": {
"title": "$:/config/shortcuts-not-mac/underline",
"text": "ctrl-U"
},
"$:/config/shortcuts-not-mac/new-image": {
"title": "$:/config/shortcuts-not-mac/new-image",
"text": "alt-I"
},
"$:/config/shortcuts-not-mac/new-journal": {
"title": "$:/config/shortcuts-not-mac/new-journal",
"text": "alt-J"
},
"$:/config/shortcuts-not-mac/new-tiddler": {
"title": "$:/config/shortcuts-not-mac/new-tiddler",
"text": "alt-N"
},
"$:/config/shortcuts/add-field": {
"title": "$:/config/shortcuts/add-field",
"text": "enter"
},
"$:/config/shortcuts/advanced-search": {
"title": "$:/config/shortcuts/advanced-search",
"text": "ctrl-shift-A"
},
"$:/config/shortcuts/advanced-search-sidebar": {
"title": "$:/config/shortcuts/advanced-search-sidebar",
"text": "alt-Enter"
},
"$:/config/shortcuts/cancel-edit-tiddler": {
"title": "$:/config/shortcuts/cancel-edit-tiddler",
"text": "escape"
},
"$:/config/shortcuts/change-sidebar-layout": {
"title": "$:/config/shortcuts/change-sidebar-layout",
"text": "shift-alt-Down"
},
"$:/config/shortcuts/delete-field": {
"title": "$:/config/shortcuts/delete-field",
"text": "shift-alt-D"
},
"$:/config/shortcuts/excise": {
"title": "$:/config/shortcuts/excise",
"text": "ctrl-E"
},
"$:/config/shortcuts/sidebar-search": {
"title": "$:/config/shortcuts/sidebar-search",
"text": "ctrl-shift-F"
},
"$:/config/shortcuts/heading-1": {
"title": "$:/config/shortcuts/heading-1",
"text": "ctrl-1"
},
"$:/config/shortcuts/heading-2": {
"title": "$:/config/shortcuts/heading-2",
"text": "ctrl-2"
},
"$:/config/shortcuts/heading-3": {
"title": "$:/config/shortcuts/heading-3",
"text": "ctrl-3"
},
"$:/config/shortcuts/heading-4": {
"title": "$:/config/shortcuts/heading-4",
"text": "ctrl-4"
},
"$:/config/shortcuts/heading-5": {
"title": "$:/config/shortcuts/heading-5",
"text": "ctrl-5"
},
"$:/config/shortcuts/heading-6": {
"title": "$:/config/shortcuts/heading-6",
"text": "ctrl-6"
},
"$:/config/shortcuts/input-accept": {
"title": "$:/config/shortcuts/input-accept",
"text": "Enter"
},
"$:/config/shortcuts/input-accept-variant": {
"title": "$:/config/shortcuts/input-accept-variant",
"text": "ctrl-Enter"
},
"$:/config/shortcuts/input-cancel": {
"title": "$:/config/shortcuts/input-cancel",
"text": "Escape"
},
"$:/config/shortcuts/input-down": {
"title": "$:/config/shortcuts/input-down",
"text": "Down"
},
"$:/config/shortcuts/input-tab-left": {
"title": "$:/config/shortcuts/input-tab-left",
"text": "alt-Left"
},
"$:/config/shortcuts/input-tab-right": {
"title": "$:/config/shortcuts/input-tab-right",
"text": "alt-Right"
},
"$:/config/shortcuts/input-up": {
"title": "$:/config/shortcuts/input-up",
"text": "Up"
},
"$:/config/shortcuts/layout-switcher": {
"title": "$:/config/shortcuts/layout-switcher",
"text": "ctrl-shift-L"
},
"$:/config/shortcuts/link": {
"title": "$:/config/shortcuts/link",
"text": "ctrl-L"
},
"$:/config/shortcuts/linkify": {
"title": "$:/config/shortcuts/linkify",
"text": "alt-shift-L"
},
"$:/config/shortcuts/list-bullet": {
"title": "$:/config/shortcuts/list-bullet",
"text": "ctrl-shift-L"
},
"$:/config/shortcuts/list-number": {
"title": "$:/config/shortcuts/list-number",
"text": "ctrl-shift-N"
},
"$:/config/shortcuts/mono-block": {
"title": "$:/config/shortcuts/mono-block",
"text": "ctrl-shift-M"
},
"$:/config/shortcuts/mono-line": {
"title": "$:/config/shortcuts/mono-line",
"text": "ctrl-M"
},
"$:/config/shortcuts/picture": {
"title": "$:/config/shortcuts/picture",
"text": "ctrl-shift-I"
},
"$:/config/shortcuts/preview": {
"title": "$:/config/shortcuts/preview",
"text": "alt-P"
},
"$:/config/shortcuts/quote": {
"title": "$:/config/shortcuts/quote",
"text": "ctrl-Q"
},
"$:/config/shortcuts/save-tiddler": {
"title": "$:/config/shortcuts/save-tiddler",
"text": "ctrl+enter"
},
"$:/config/shortcuts/save-wiki": {
"title": "$:/config/shortcuts/save-wiki",
"text": "ctrl-S"
},
"$:/config/shortcuts/stamp": {
"title": "$:/config/shortcuts/stamp",
"text": "ctrl-S"
},
"$:/config/shortcuts/strikethrough": {
"title": "$:/config/shortcuts/strikethrough",
"text": "ctrl-T"
},
"$:/config/shortcuts/subscript": {
"title": "$:/config/shortcuts/subscript",
"text": "ctrl-shift-B"
},
"$:/config/shortcuts/superscript": {
"title": "$:/config/shortcuts/superscript",
"text": "ctrl-shift-P"
},
"$:/config/shortcuts/toggle-sidebar": {
"title": "$:/config/shortcuts/toggle-sidebar",
"text": "alt-shift-S"
},
"$:/config/shortcuts/transcludify": {
"title": "$:/config/shortcuts/transcludify",
"text": "alt-shift-T"
},
"$:/config/ui/EditTemplate": {
"title": "$:/config/ui/EditTemplate",
"text": "$:/core/ui/EditTemplate"
},
"$:/config/ui/ViewTemplate": {
"title": "$:/config/ui/ViewTemplate",
"text": "$:/core/ui/ViewTemplate"
},
"$:/config/WikiParserRules/Inline/wikilink": {
"title": "$:/config/WikiParserRules/Inline/wikilink",
"text": "enable"
},
"$:/snippets/currpalettepreview": {
"title": "$:/snippets/currpalettepreview",
"text": "\\define resolve-colour(macrocall)\n\\import $:/core/macros/utils\n\\whitespace trim\n<$wikify name=\"name\" text=\"\"\"$macrocall$\"\"\">\n<<name>>\n</$wikify>\n\\end\n\\define swatchStyle()\nbackground-color: $(swatchColour)$;\n\\end\n\\define swatch-inner()\n<$set name=\"swatchColour\" value={{##$(colourResolved)$}}>\n<$list filter=\"[<swatchColour>!prefix[<<colour ]!suffix[>>]]\" variable=\"ignore\">\n<div class=\"tc-swatch\" style=<<swatchStyle>> title=<<swatchTitle>>/>\n</$list>\n<$list filter=\"[<swatchColour>prefix[<<colour ]suffix[>>]]\" variable=\"ignore\">\n<$wikify name=\"colourResolved\" text=\"\"\"<$macrocall $name=\"resolve-colour\" macrocall=<<swatchColour>>/>\"\"\">\n<<swatch-inner>>\n</$wikify>\n</$list>\n</$set>\n\\end\n\\define swatch()\n<$set name=\"swatchColour\" value={{##$(colour)$}}>\n<$set name=\"swatchTitle\" value=<<colour>>>\n<$list filter=\"[<swatchColour>!prefix[<<colour ]!suffix[>>]]\" variable=\"ignore\">\n<div class=\"tc-swatch\" style=<<swatchStyle>> title=<<swatchTitle>>/>\n</$list>\n<$list filter=\"[<swatchColour>prefix[<<colour ]suffix[>>]]\" variable=\"ignore\">\n<$wikify name=\"colourResolved\" text=\"\"\"<$macrocall $name=\"resolve-colour\" macrocall=<<swatchColour>>/>\"\"\">\n<<swatch-inner>>\n</$wikify>\n</$list>\n</$set>\n</$set>\n\\end\n<div class=\"tc-swatches-horiz\"><$list filter=\"\nforeground\nbackground\nmuted-foreground\nprimary\npage-background\ntab-background\ntiddler-info-background\n\" variable=\"colour\"><<swatch>></$list></div>\n"
},
"$:/snippets/download-wiki-button": {
"title": "$:/snippets/download-wiki-button",
"text": "\\define lingo-base() $:/language/ControlPanel/Tools/Download/\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-download-file\" $param=\"$:/core/save/all\" filename=\"index.html\"/>\n<<lingo Full/Caption>> {{$:/core/images/save-button}}\n</$button>"
},
"$:/language": {
"title": "$:/language",
"text": "$:/languages/en-GB"
},
"$:/snippets/languageswitcher": {
"title": "$:/snippets/languageswitcher",
"text": "\\define flag-title()\n$(languagePluginTitle)$/icon\n\\end\n\n<$linkcatcher to=\"$:/language\">\n<div class=\"tc-chooser tc-language-chooser\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[description]]\">\n<$set name=\"cls\" filter=\"[all[current]field:title{$:/language}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>>\n<$link>\n<span class=\"tc-image-button\">\n<$set name=\"languagePluginTitle\" value=<<currentTiddler>>>\n<$transclude subtiddler=<<flag-title>>>\n<$list filter=\"[all[current]field:title[$:/languages/en-GB]]\">\n<$transclude tiddler=\"$:/languages/en-GB/icon\"/>\n</$list>\n</$transclude>\n</$set>\n</span>\n<$view field=\"description\">\n<$view field=\"name\">\n<$view field=\"title\"/>\n</$view>\n</$view>\n</$link>\n</div>\n</$set>\n</$list>\n</div>\n</$linkcatcher>"
},
"$:/core/macros/CSS": {
"title": "$:/core/macros/CSS",
"tags": "$:/tags/Macro",
"text": "\\define colour(name)\n<$transclude tiddler={{$:/palette}} index=\"$name$\"><$transclude tiddler=\"$:/palettes/Vanilla\" index=\"$name$\"><$transclude tiddler=\"$:/config/DefaultColourMappings/$name$\"/></$transclude></$transclude>\n\\end\n\n\\define color(name)\n<<colour $name$>>\n\\end\n\n\\define box-shadow(shadow)\n``\n -webkit-box-shadow: $shadow$;\n -moz-box-shadow: $shadow$;\n box-shadow: $shadow$;\n``\n\\end\n\n\\define filter(filter)\n``\n -webkit-filter: $filter$;\n -moz-filter: $filter$;\n filter: $filter$;\n``\n\\end\n\n\\define transition(transition)\n``\n -webkit-transition: $transition$;\n -moz-transition: $transition$;\n transition: $transition$;\n``\n\\end\n\n\\define transform-origin(origin)\n``\n -webkit-transform-origin: $origin$;\n -moz-transform-origin: $origin$;\n transform-origin: $origin$;\n``\n\\end\n\n\\define background-linear-gradient(gradient)\n``\nbackground-image: linear-gradient($gradient$);\nbackground-image: -o-linear-gradient($gradient$);\nbackground-image: -moz-linear-gradient($gradient$);\nbackground-image: -webkit-linear-gradient($gradient$);\nbackground-image: -ms-linear-gradient($gradient$);\n``\n\\end\n\n\\define column-count(columns)\n``\n-moz-column-count: $columns$;\n-webkit-column-count: $columns$;\ncolumn-count: $columns$;\n``\n\\end\n\n\\define datauri(title)\n<$macrocall $name=\"makedatauri\" type={{$title$!!type}} text={{$title$}} _canonical_uri={{$title$!!_canonical_uri}}/>\n\\end\n\n\\define if-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\">$text$</$reveal>\n\\end\n\n\\define if-no-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">$text$</$reveal>\n\\end\n\n\\define if-background-attachment(text)\n<$reveal state=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\" type=\"nomatch\" text=\"\">$text$</$reveal>\n\\end\n"
},
"$:/core/macros/colour-picker": {
"title": "$:/core/macros/colour-picker",
"tags": "$:/tags/Macro",
"text": "\\define colour-picker-update-recent()\n<$action-listops\n\t$tiddler=\"$:/config/ColourPicker/Recent\"\n\t$subfilter=\"$(colour-picker-value)$ [list[$:/config/ColourPicker/Recent]remove[$(colour-picker-value)$]] +[limit[8]]\"\n/>\n\\end\n\n\\define colour-picker-inner(actions)\n<$button tag=\"a\" tooltip=\"\"\"$(colour-picker-value)$\"\"\">\n\n$(colour-picker-update-recent)$\n\n$actions$\n\n<span style=\"display:inline-block; background-color: $(colour-picker-value)$; width: 100%; height: 100%; border-radius: 50%;\"/>\n\n</$button>\n\\end\n\n\\define colour-picker-recent-inner(actions)\n<$set name=\"colour-picker-value\" value=\"$(recentColour)$\">\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$set>\n\\end\n\n\\define colour-picker-recent(actions)\n{{$:/language/ColourPicker/Recent}} <$list filter=\"[list[$:/config/ColourPicker/Recent]]\" variable=\"recentColour\">\n<$macrocall $name=\"colour-picker-recent-inner\" actions=\"\"\"$actions$\"\"\"/></$list>\n\\end\n\n\\define colour-picker(actions)\n<div class=\"tc-colour-chooser\">\n\n<$macrocall $name=\"colour-picker-recent\" actions=\"\"\"$actions$\"\"\"/>\n\n---\n\n<$list filter=\"LightPink Pink Crimson LavenderBlush PaleVioletRed HotPink DeepPink MediumVioletRed Orchid Thistle Plum Violet Magenta Fuchsia DarkMagenta Purple MediumOrchid DarkViolet DarkOrchid Indigo BlueViolet MediumPurple MediumSlateBlue SlateBlue DarkSlateBlue Lavender GhostWhite Blue MediumBlue MidnightBlue DarkBlue Navy RoyalBlue CornflowerBlue LightSteelBlue LightSlateGrey SlateGrey DodgerBlue AliceBlue SteelBlue LightSkyBlue SkyBlue DeepSkyBlue LightBlue PowderBlue CadetBlue Azure LightCyan PaleTurquoise Cyan Aqua DarkTurquoise DarkSlateGrey DarkCyan Teal MediumTurquoise LightSeaGreen Turquoise Aquamarine MediumAquamarine MediumSpringGreen MintCream SpringGreen MediumSeaGreen SeaGreen Honeydew LightGreen PaleGreen DarkSeaGreen LimeGreen Lime ForestGreen Green DarkGreen Chartreuse LawnGreen GreenYellow DarkOliveGreen YellowGreen OliveDrab Beige LightGoldenrodYellow Ivory LightYellow Yellow Olive DarkKhaki LemonChiffon PaleGoldenrod Khaki Gold Cornsilk Goldenrod DarkGoldenrod FloralWhite OldLace Wheat Moccasin Orange PapayaWhip BlanchedAlmond NavajoWhite AntiqueWhite Tan BurlyWood Bisque DarkOrange Linen Peru PeachPuff SandyBrown Chocolate SaddleBrown Seashell Sienna LightSalmon Coral OrangeRed DarkSalmon Tomato MistyRose Salmon Snow LightCoral RosyBrown IndianRed Red Brown FireBrick DarkRed Maroon White WhiteSmoke Gainsboro LightGrey Silver DarkGrey Grey DimGrey Black\" variable=\"colour-picker-value\">\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$list>\n\n---\n\n<$edit-text tiddler=\"$:/config/ColourPicker/New\" tag=\"input\" default=\"\" placeholder=\"\"/>\n<$edit-text tiddler=\"$:/config/ColourPicker/New\" type=\"color\" tag=\"input\"/>\n<$set name=\"colour-picker-value\" value={{$:/config/ColourPicker/New}}>\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$set>\n\n</div>\n\n\\end\n"
},
"$:/core/macros/copy-to-clipboard": {
"title": "$:/core/macros/copy-to-clipboard",
"tags": "$:/tags/Macro",
"text": "\\define copy-to-clipboard(src,class:\"tc-btn-invisible\",style)\n<$button class=<<__class__>> style=<<__style__>> message=\"tm-copy-to-clipboard\" param=<<__src__>> tooltip={{$:/language/Buttons/CopyToClipboard/Hint}}>\n{{$:/core/images/copy-clipboard}} <$text text={{$:/language/Buttons/CopyToClipboard/Caption}}/>\n</$button>\n\\end\n\n\\define copy-to-clipboard-above-right(src,class:\"tc-btn-invisible\",style)\n<div style=\"position: relative;\">\n<div style=\"position: absolute; bottom: 0; right: 0;\">\n<$macrocall $name=\"copy-to-clipboard\" src=<<__src__>> class=<<__class__>> style=<<__style__>>/>\n</div>\n</div>\n\\end\n\n"
},
"$:/core/macros/diff": {
"title": "$:/core/macros/diff",
"tags": "$:/tags/Macro",
"text": "\\define compareTiddlerText(sourceTiddlerTitle,sourceSubTiddlerTitle,destTiddlerTitle,destSubTiddlerTitle)\n<$set name=\"source\" tiddler=<<__sourceTiddlerTitle__>> subtiddler=<<__sourceSubTiddlerTitle__>>>\n<$set name=\"dest\" tiddler=<<__destTiddlerTitle__>> subtiddler=<<__destSubTiddlerTitle__>>>\n<$diff-text source=<<source>> dest=<<dest>>/>\n</$set>\n</$set>\n\\end\n\n\\define compareTiddlers(sourceTiddlerTitle,sourceSubTiddlerTitle,destTiddlerTitle,destSubTiddlerTitle,exclude)\n<table class=\"tc-diff-tiddlers\">\n<tbody>\n<$set name=\"sourceFields\" filter=\"[<__sourceTiddlerTitle__>fields[]sort[]]\">\n<$set name=\"destFields\" filter=\"[<__destSubTiddlerTitle__>subtiddlerfields<__destTiddlerTitle__>sort[]]\">\n<$list filter=\"[enlist<sourceFields>] [enlist<destFields>] -[enlist<__exclude__>] +[sort[]]\" variable=\"fieldName\">\n<tr>\n<th>\n<$text text=<<fieldName>>/> \n</th>\n<td>\n<$set name=\"source\" tiddler=<<__sourceTiddlerTitle__>> subtiddler=<<__sourceSubTiddlerTitle__>> field=<<fieldName>>>\n<$set name=\"dest\" tiddler=<<__destTiddlerTitle__>> subtiddler=<<__destSubTiddlerTitle__>> field=<<fieldName>>>\n<$diff-text source=<<source>> dest=<<dest>>>\n</$diff-text>\n</$set>\n</$set>\n</td>\n</tr>\n</$list>\n</$set>\n</$set>\n</tbody>\n</table>\n\\end\n"
},
"$:/core/macros/dumpvariables": {
"title": "$:/core/macros/dumpvariables",
"tags": "$:/tags/Macro",
"text": "\\define dumpvariables()\n<ul>\n<$list filter=\"[variables[]]\" variable=\"varname\">\n<li>\n<strong><code><$text text=<<varname>>/></code></strong>:<br/>\n<$codeblock code={{{ [<varname>getvariable[]] }}}/>\n</li>\n</$list>\n</ul>\n\\end\n"
},
"$:/core/macros/export": {
"title": "$:/core/macros/export",
"tags": "$:/tags/Macro",
"text": "\\define exportButtonFilename(baseFilename)\n$baseFilename$$(extension)$\n\\end\n\n\\define exportButton(exportFilter:\"[!is[system]sort[title]]\",lingoBase,baseFilename:\"tiddlers\")\n<span class=\"tc-popup-keep\"><$button popup=<<qualify \"$:/state/popup/export\">> tooltip={{$lingoBase$Hint}} aria-label={{$lingoBase$Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/export-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$lingoBase$Caption}}/></span>\n</$list>\n</$button></span><$reveal state=<<qualify \"$:/state/popup/export\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$set name=\"count\" value={{{ [subfilter<__exportFilter__>count[]] }}}>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Exporter]]\">\n<$list filter=\"[<currentTiddler>has[condition]subfilter{!!condition}limit[1]] ~[<currentTiddler>!has[condition]then[true]]\" variable=\"ignore\">\n<$set name=\"extension\" value={{!!extension}}>\n<$button class=\"tc-btn-invisible\">\n<$action-sendmessage $message=\"tm-download-file\" $param=<<currentTiddler>> exportFilter=<<__exportFilter__>> filename=<<exportButtonFilename \"\"\"$baseFilename$\"\"\">>/>\n<$action-deletetiddler $tiddler=<<qualify \"$:/state/popup/export\">>/>\n<$transclude field=\"description\"/>\n</$button>\n</$set>\n</$list>\n</$list>\n</$set>\n</div>\n</$reveal>\n\\end\n"
},
"$:/core/macros/image-picker": {
"title": "$:/core/macros/image-picker",
"created": "20170715180840889",
"modified": "20170715180914005",
"tags": "$:/tags/Macro",
"type": "text/vnd.tiddlywiki",
"text": "\\define image-picker-thumbnail(actions)\n<$button tag=\"a\" tooltip=\"\"\"$(imageTitle)$\"\"\">\n$actions$\n<$transclude tiddler=<<imageTitle>>/>\n</$button>\n\\end\n\n\\define image-picker-list(filter,actions)\n<$list filter=\"\"\"$filter$\"\"\" variable=\"imageTitle\">\n<$macrocall $name=\"image-picker-thumbnail\" actions=\"\"\"$actions$\"\"\"/>\n</$list>\n\\end\n\n\\define image-picker(actions,filter:\"[all[shadows+tiddlers]is[image]] -[type[application/pdf]] +[!has[draft.of]$subfilter$sort[title]]\",subfilter:\"\")\n<div class=\"tc-image-chooser\">\n<$vars state-system=<<qualify \"$:/state/image-picker/system\">>>\n<$checkbox tiddler=<<state-system>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"hide\">\n{{$:/language/SystemTiddlers/Include/Prompt}}\n</$checkbox>\n<$reveal state=<<state-system>> type=\"match\" text=\"hide\" default=\"hide\" tag=\"div\">\n<$macrocall $name=\"image-picker-list\" filter=\"\"\"$filter$ +[!is[system]]\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</$reveal>\n<$reveal state=<<state-system>> type=\"nomatch\" text=\"hide\" default=\"hide\" tag=\"div\">\n<$macrocall $name=\"image-picker-list\" filter=\"\"\"$filter$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</$reveal>\n</$vars>\n</div>\n\\end\n\n\\define image-picker-include-tagged-images(actions)\n<$macrocall $name=\"image-picker\" filter=\"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[!has[draft.of]sort[title]]\" actions=\"\"\"$actions$\"\"\"/>\n\\end\n"
},
"$:/core/macros/keyboard-driven-input": {
"title": "$:/core/macros/keyboard-driven-input",
"tags": "$:/tags/Macro",
"text": "\\define change-input-tab(stateTitle,tag,beforeafter,defaultState,actions)\n<$set name=\"tabsList\" filter=\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]]\">\n<$vars currentState={{{ [<__stateTitle__>!is[missing]get[text]] ~[<__defaultState__>] }}} firstTab={{{ [enlist<tabsList>nth[1]] }}} lastTab={{{ [enlist<tabsList>last[]] }}}>\n<$set name=\"nextTab\" value={{{ [all[shadows+tiddlers]tag<__tag__>!has[draft.of]$beforeafter$<currentState>] ~[[$beforeafter$]removeprefix[after]suffix[]addprefix<firstTab>] ~[[$beforeafter$]removeprefix[before]suffix[]addprefix<lastTab>] }}}>\n<$action-setfield $tiddler=<<__stateTitle__>> text=<<nextTab>>/>\n$actions$\n</$set>\n</$vars>\n</$set>\n\\end\n\n\\define keyboard-input-actions()\n<$list filter=\"[<__index__>match[]]\">\n<$action-setfield $tiddler=<<__storeTitle__>> text={{{ [<__tiddler__>get<__field__>] }}}/>\n</$list>\n<$list filter=\"[<__index__>!match[]]\">\n<$action-setfield $tiddler=<<__storeTitle__>> text={{{ [<__tiddler__>getindex<__index__>] }}}/>\n</$list>\n\\end\n\n\\define input-next-actions-inner()\n<$list filter=\"[<nextItem>minlength[1]]\" variable=\"ignore\">\n<$action-setfield $tiddler=<<__selectionStateTitle__>> text=<<nextItem>>/>\n<$list filter=\"[<__index__>match[]]\">\n<$action-setfield $tiddler=<<__tiddler__>> $field=<<__field__>> $value={{{ [<nextItem>] +[splitregexp[(?:.(?!-))+$]] }}}/>\n</$list>\n<$list filter=\"[<__index__>!match[]]\">\n<$action-setfield $tiddler=<<__tiddler__>> $index=<<__index__>> $value={{{ [<nextItem>] +[splitregexp[(?:.(?!-))+$]] }}}/>\n</$list>\n<$action-setfield $tiddler=<<__refreshTitle__>> text=\"yes\"/>\n</$list>\n\\end\n\n\\define input-next-actions(afterOrBefore:\"after\",reverse:\"\")\n<$list filter=\"[<__storeTitle__>get[text]minlength<__filterMinLength__>] [<__filterMinLength__>match[0]] +[limit[1]]\" variable=\"ignore\">\n<$vars userInput={{{ [<__storeTitle__>get[text]] }}} selectedItem={{{ [<__selectionStateTitle__>get[text]] }}}>\n<$set name=\"configTiddler\" value={{{ [subfilter<__configTiddlerFilter__>] }}}>\n<$vars primaryListFilter={{{ [<configTiddler>get<__firstSearchFilterField__>] }}} secondaryListFilter={{{ [<configTiddler>get<__secondSearchFilterField__>] }}}>\n<$set name=\"filteredList\" filter=\"[subfilter<primaryListFilter>addsuffix[-primaryList]] =[subfilter<secondaryListFilter>addsuffix[-secondaryList]]\">\n<$vars nextItem={{{ [enlist<filteredList>$afterOrBefore$<selectedItem>] ~[enlist<filteredList>$reverse$nth[1]] }}} firstItem={{{ [enlist<filteredList>nth[1]] }}} lastItem={{{ [enlist<filteredList>last[]] }}}>\n<$list filter=\"[<selectedItem>match<firstItem>!match<lastItem>]\" variable=\"ignore\">\n<$set name=\"nextItem\" value={{{ [[$afterOrBefore$]match[before]then<userInput>addsuffix[-userInput]] ~[<nextItem>] }}}>\n<<input-next-actions-inner>>\n</$set>\n</$list>\n<$list filter=\"[<selectedItem>match<lastItem>!match<firstItem>]\" variable=\"ignore\">\n<$set name=\"nextItem\" value={{{ [[$afterOrBefore$]match[after]then<userInput>addsuffix[-userInput]] ~[<nextItem>] }}}>\n<<input-next-actions-inner>>\n</$set>\n</$list>\n<$list filter=\"[<selectedItem>match<firstItem>match<lastItem>]\" variable=\"ignore\">\n<$set name=\"nextItem\" value={{{ [<userInput>addsuffix[-userInput]] }}}>\n<<input-next-actions-inner>>\n</$set>\n</$list>\n<$list filter=\"[<selectedItem>!match<firstItem>!match<lastItem>]\" variable=\"ignore\">\n<<input-next-actions-inner>>\n</$list>\n</$vars>\n</$set>\n</$vars>\n</$set>\n</$vars>\n</$list>\n\\end\n\n\\define keyboard-driven-input(tiddler,storeTitle,field:\"text\",index:\"\",tag:\"input\",type,focus:\"\",inputAcceptActions,inputAcceptVariantActions,inputCancelActions,placeholder:\"\",default:\"\",class,focusPopup,rows,minHeight,tabindex,size,autoHeight,filterMinLength:\"0\",refreshTitle,selectionStateTitle,cancelPopups:\"\",configTiddlerFilter,firstSearchFilterField:\"first-search-filter\",secondSearchFilterField:\"second-search-filter\")\n\\whitespace trim\n<$keyboard key=\"((input-accept))\" actions=<<__inputAcceptActions__>>>\n<$keyboard key=\"((input-accept-variant))\" actions=<<__inputAcceptVariantActions__>>>\n<$keyboard key=\"((input-up))\" actions=<<input-next-actions \"before\" \"reverse[]\">>>\n<$keyboard key=\"((input-down))\" actions=<<input-next-actions>>>\n<$keyboard key=\"((input-cancel))\" actions=<<__inputCancelActions__>>>\n<$edit-text tiddler=<<__tiddler__>> field=<<__field__>> index=<<__index__>> \n\t\tinputActions=<<keyboard-input-actions>> tag=<<__tag__>> class=<<__class__>> \n\t\tplaceholder=<<__placeholder__>> default=<<__default__>> focusPopup=<<__focusPopup__>> \n\t\tfocus=<<__focus__>> type=<<__type__>> rows=<<__rows__>> minHeight=<<__minHeight__>> \n\t\ttabindex=<<__tabindex__>> size=<<__size__>> autoHeight=<<__autoHeight__>> \n\t\trefreshTitle=<<__refreshTitle__>> cancelPopups=<<__cancelPopups__>>/>\n</$keyboard>\n</$keyboard>\n</$keyboard>\n</$keyboard>\n</$keyboard>\n\\end\n"
},
"$:/core/macros/lingo": {
"title": "$:/core/macros/lingo",
"tags": "$:/tags/Macro",
"text": "\\define lingo-base()\n$:/language/\n\\end\n\n\\define lingo(title)\n{{$(lingo-base)$$title$}}\n\\end\n"
},
"$:/core/macros/list": {
"title": "$:/core/macros/list",
"tags": "$:/tags/Macro",
"text": "\\define list-links(filter,type:\"ul\",subtype:\"li\",class:\"\",emptyMessage)\n\\whitespace trim\n<$type$ class=\"$class$\">\n<$list filter=\"$filter$\" emptyMessage=<<__emptyMessage__>>>\n<$subtype$>\n<$link to={{!!title}}>\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$link>\n</$subtype$>\n</$list>\n</$type$>\n\\end\n\n\\define list-links-draggable-drop-actions()\n<$action-listops $tiddler=<<targetTiddler>> $field=<<targetField>> $subfilter=\"+[insertbefore:currentTiddler<actionTiddler>]\"/>\n\\end\n\n\\define list-links-draggable(tiddler,field:\"list\",type:\"ul\",subtype:\"li\",class:\"\",itemTemplate)\n\\whitespace trim\n<span class=\"tc-links-draggable-list\">\n<$vars targetTiddler=\"\"\"$tiddler$\"\"\" targetField=\"\"\"$field$\"\"\">\n<$type$ class=\"$class$\">\n<$list filter=\"[list[$tiddler$!!$field$]]\">\n<$droppable actions=<<list-links-draggable-drop-actions>> tag=\"\"\"$subtype$\"\"\" enable=<<tv-enable-drag-and-drop>>>\n<div class=\"tc-droppable-placeholder\"/>\n<div>\n<$transclude tiddler=\"\"\"$itemTemplate$\"\"\">\n<$link to={{!!title}}>\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$link>\n</$transclude>\n</div>\n</$droppable>\n</$list>\n<$tiddler tiddler=\"\">\n<$droppable actions=<<list-links-draggable-drop-actions>> tag=\"div\" enable=<<tv-enable-drag-and-drop>>>\n<div class=\"tc-droppable-placeholder\">\n{{$:/core/images/blank}}\n</div>\n<div style=\"height:0.5em;\"/>\n</$droppable>\n</$tiddler>\n</$type$>\n</$vars>\n</span>\n\\end\n\n\\define list-tagged-draggable-drop-actions(tag)\n<!-- Save the current ordering of the tiddlers with this tag -->\n<$set name=\"order\" filter=\"[<__tag__>tagging[]]\">\n<!-- Remove any list-after or list-before fields from the tiddlers with this tag -->\n<$list filter=\"[<__tag__>tagging[]]\">\n<$action-deletefield $field=\"list-before\"/>\n<$action-deletefield $field=\"list-after\"/>\n</$list>\n<!-- Save the new order to the Tag Tiddler -->\n<$action-listops $tiddler=<<__tag__>> $field=\"list\" $filter=\"+[enlist<order>] +[insertbefore:currentTiddler<actionTiddler>]\"/>\n<!-- Make sure the newly added item has the right tag -->\n<!-- Removing this line makes dragging tags within the dropdown work as intended -->\n<!--<$action-listops $tiddler=<<actionTiddler>> $tags=<<__tag__>>/>-->\n<!-- Using the following 5 lines as replacement makes dragging titles from outside into the dropdown apply the tag -->\n<$list filter=\"[<actionTiddler>!contains:tags<__tag__>]\">\n<$fieldmangler tiddler=<<actionTiddler>>>\n<$action-sendmessage $message=\"tm-add-tag\" $param=<<__tag__>>/>\n</$fieldmangler>\n</$list>\n</$set>\n\\end\n\n\\define list-tagged-draggable(tag,subFilter,emptyMessage,itemTemplate,elementTag:\"div\",storyview:\"\")\n\\whitespace trim\n<span class=\"tc-tagged-draggable-list\">\n<$set name=\"tag\" value=<<__tag__>>>\n<$list filter=\"[<__tag__>tagging[]$subFilter$]\" emptyMessage=<<__emptyMessage__>> storyview=<<__storyview__>>>\n<$elementTag$ class=\"tc-menu-list-item\">\n<$droppable actions=\"\"\"<$macrocall $name=\"list-tagged-draggable-drop-actions\" tag=<<__tag__>>/>\"\"\" enable=<<tv-enable-drag-and-drop>>>\n<$elementTag$ class=\"tc-droppable-placeholder\"/>\n<$elementTag$>\n<$transclude tiddler=\"\"\"$itemTemplate$\"\"\">\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</$transclude>\n</$elementTag$>\n</$droppable>\n</$elementTag$>\n</$list>\n<$tiddler tiddler=\"\">\n<$droppable actions=\"\"\"<$macrocall $name=\"list-tagged-draggable-drop-actions\" tag=<<__tag__>>/>\"\"\" enable=<<tv-enable-drag-and-drop>>>\n<$elementTag$ class=\"tc-droppable-placeholder\"/>\n<$elementTag$ style=\"height:0.5em;\">\n</$elementTag$>\n</$droppable>\n</$tiddler>\n</$set>\n</span>\n\\end\n"
},
"$:/core/macros/tabs": {
"title": "$:/core/macros/tabs",
"tags": "$:/tags/Macro",
"text": "\\define tabs(tabsList,default,state:\"$:/state/tab\",class,template,buttonTemplate,retain,actions,explicitState)\n<$set name=\"qualifiedState\" value=<<qualify \"$state$\">>>\n<$vars tabsState={{{ [<__explicitState__>minlength[1]] ~[<qualifiedState>] }}}>\n<div class=\"tc-tab-set $class$\">\n<div class=\"tc-tab-buttons $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\" storyview=\"pop\"><$set name=\"save-currentTiddler\" value=<<currentTiddler>>><$tiddler tiddler=<<currentTab>>><$button set=<<tabsState>> setTo=<<currentTab>> default=\"$default$\" selectedClass=\"tc-tab-selected\" tooltip={{!!tooltip}}>\n<$tiddler tiddler=<<save-currentTiddler>>>\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude tiddler=\"$buttonTemplate$\" mode=\"inline\">\n<$transclude tiddler=<<currentTab>> field=\"caption\">\n<$macrocall $name=\"currentTab\" $type=\"text/plain\" $output=\"text/plain\"/>\n</$transclude>\n</$transclude>\n</$set></$tiddler>$actions$</$button></$tiddler></$set></$list>\n</div>\n<div class=\"tc-tab-divider $class$\"/>\n<div class=\"tc-tab-content $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\">\n\n<$reveal type=\"match\" state=<<tabsState>> text=<<currentTab>> default=\"$default$\" retain=\"\"\"$retain$\"\"\">\n\n<$transclude tiddler=\"$template$\" mode=\"block\">\n\n<$transclude tiddler=<<currentTab>> mode=\"block\"/>\n\n</$transclude>\n\n</$reveal>\n\n</$list>\n</div>\n</div>\n</$vars>\n</$set>\n\\end\n"
},
"$:/core/macros/tag-picker": {
"title": "$:/core/macros/tag-picker",
"tags": "$:/tags/Macro",
"first-search-filter": "[tags[]!is[system]search:title<userInput>sort[]]",
"second-search-filter": "[tags[]is[system]search:title<userInput>sort[]]",
"text": "\\define get-tagpicker-focus-selector() [data-tiddler-title=\"$(currentTiddlerCSSEscaped)$\"] .tc-add-tag-name input\n\n\\define delete-tag-state-tiddlers() <$action-deletetiddler $filter=\"[<newTagNameTiddler>] [<storeTitle>] [<tagSelectionState>]\"/>\n\n\\define add-tag-actions(actions,tagField:\"tags\")\n<$set name=\"tag\" value={{{ [<__tiddler__>get[text]] }}}>\n<$list filter=\"[<saveTiddler>!contains:$tagField$<tag>!match[]]\" variable=\"ignore\" emptyMessage=\"\"\"\n<$action-listops $tiddler=<<saveTiddler>> $field=<<__tagField__>> $subfilter=\"-[<tag>]\"/>\n\"\"\">\n<$action-listops $tiddler=<<saveTiddler>> $field=<<__tagField__>> $subfilter=\"[<tag>]\"/>\n$actions$\n</$list>\n</$set>\n<<delete-tag-state-tiddlers>>\n<$action-setfield $tiddler=<<refreshTitle>> text=\"yes\"/>\n\\end\n\n\\define clear-tags-actions-inner()\n<$list filter=\"[<storeTitle>has[text]] [<newTagNameTiddler>has[text]]\" variable=\"ignore\" emptyMessage=\"\"\"<<cancel-delete-tiddler-actions \"cancel\">>\"\"\">\n<<delete-tag-state-tiddlers>>\n</$list>\n\\end\n\n\\define clear-tags-actions()\n<$set name=\"userInput\" value={{{ [<storeTitle>get[text]] }}}>\n<$list filter=\"[<newTagNameTiddler>get[text]!match<userInput>]\" emptyMessage=\"\"\"<<clear-tags-actions-inner>>\"\"\">\n<$action-setfield $tiddler=<<newTagNameTiddler>> text=<<userInput>>/><$action-setfield $tiddler=<<refreshTitle>> text=\"yes\"/>\n</$list>\n</$set>\n\\end\n\n\\define tag-picker-inner(actions,tagField:\"tags\")\n\\whitespace trim\n<$vars newTagNameInputTiddlerQualified=<<qualify \"$:/temp/NewTagName/input\">> newTagNameSelectionTiddlerQualified=<<qualify \"$:/temp/NewTagName/selected-item\">> fallbackTarget={{$(palette)$##tag-background}} colourA={{$(palette)$##foreground}} colourB={{$(palette)$##background}}>\n<$vars storeTitle={{{ [<newTagNameInputTiddler>!match[]] ~[<newTagNameInputTiddlerQualified>] }}} tagSelectionState={{{ [<newTagNameSelectionTiddler>!match[]] ~[<newTagNameSelectionTiddlerQualified>] }}}>\n<$vars refreshTitle=<<qualify \"$:/temp/NewTagName/refresh\">> nonSystemTagsFilter=\"[tags[]!is[system]search:title<userInput>sort[]]\" systemTagsFilter=\"[tags[]is[system]search:title<userInput>sort[]]\">\n<div class=\"tc-edit-add-tag\">\n<div>\n<span class=\"tc-add-tag-name tc-small-gap-right\">\n<$macrocall $name=\"keyboard-driven-input\" tiddler=<<newTagNameTiddler>> storeTitle=<<storeTitle>> refreshTitle=<<refreshTitle>>\n\t\tselectionStateTitle=<<tagSelectionState>> inputAcceptActions=\"\"\"<$macrocall $name=\"add-tag-actions\" actions=<<__actions__>> tagField=<<__tagField__>>/>\"\"\"\n\t\tinputCancelActions=<<clear-tags-actions>> tag=\"input\" placeholder={{$:/language/EditTemplate/Tags/Add/Placeholder}}\n\t\tfocusPopup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-edit-texteditor tc-popup-handle\" tabindex=<<tabIndex>> \n\t\tfocus={{{ [{$:/config/AutoFocus}match[tags]then[true]] ~[[false]] }}} filterMinLength={{$:/config/Tags/MinLength}} \n\t\tcancelPopups=<<cancelPopups>> configTiddlerFilter=\"[[$:/core/macros/tag-picker]]\"/>\n</span><$button popup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Tags/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Tags/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button><$reveal state=<<storeTitle>> type=\"nomatch\" text=\"\"><$button class=\"tc-btn-invisible tc-small-gap tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Tags/ClearInput/Hint}} aria-label={{$:/language/EditTemplate/Tags/ClearInput/Caption}}>{{$:/core/images/close-button}}<<delete-tag-state-tiddlers>></$button></$reveal><span class=\"tc-add-tag-button tc-small-gap-left\">\n<$set name=\"tag\" value={{{ [<newTagNameTiddler>get[text]] }}}>\n<$button set=<<newTagNameTiddler>> setTo=\"\" class=\"\">\n<$action-listops $tiddler=<<saveTiddler>> $field=<<__tagField__>> $subfilter=\"[<tag>]\"/>\n$actions$\n<$set name=\"currentTiddlerCSSEscaped\" value={{{ [<saveTiddler>escapecss[]] }}}>\n<<delete-tag-state-tiddlers>><$action-sendmessage $message=\"tm-focus-selector\" $param=<<get-tagpicker-focus-selector>>/>\n</$set>\n{{$:/language/EditTemplate/Tags/Add/Button}}\n</$button>\n</$set>\n</span>\n</div>\n<div class=\"tc-block-dropdown-wrapper\">\n<$reveal state=<<qualify \"$:/state/popup/tags-auto-complete\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-block-tags-dropdown\">\n<$set name=\"userInput\" value={{{ [<storeTitle>get[text]] }}}>\n<$list filter=\"[<userInput>minlength{$:/config/Tags/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$list filter=<<nonSystemTagsFilter>> variable=\"tag\">\n<$list filter=\"[<tag>addsuffix[-primaryList]] -[<tagSelectionState>get[text]]\" emptyMessage=\"\"\"<$vars button-classes=\"tc-btn-invisible tc-tag-button-selected\" actions=<<__actions__>> tagField=<<__tagField__>> currentTiddler=<<tag>>>{{||$:/core/ui/TagPickerTagTemplate}}</$vars>\"\"\">\n<$vars button-classes=\"tc-btn-invisible\" actions=<<__actions__>> tagField=<<__tagField__>> currentTiddler=<<tag>>>{{||$:/core/ui/TagPickerTagTemplate}}</$vars>\n</$list>\n</$list></$list>\n<hr>\n<$list filter=\"[<userInput>minlength{$:/config/Tags/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$list filter=<<systemTagsFilter>> variable=\"tag\">\n<$list filter=\"[<tag>addsuffix[-secondaryList]] -[<tagSelectionState>get[text]]\" emptyMessage=\"\"\"<$vars button-classes=\"tc-btn-invisible tc-tag-button-selected\" actions=<<__actions__>> tagField=<<__tagField__>> currentTiddler=<<tag>>>{{||$:/core/ui/TagPickerTagTemplate}}</$vars>\"\"\">\n<$vars button-classes=\"tc-btn-invisible\" actions=<<__actions__>> tagField=<<__tagField__>> currentTiddler=<<tag>>>{{||$:/core/ui/TagPickerTagTemplate}}</$vars>\n</$list>\n</$list></$list>\n</$set>\n</div>\n</$reveal>\n</div>\n</div>\n</$vars>\n</$vars>\n</$vars>\n\\end\n\\define tag-picker(actions,tagField:\"tags\")\n\\whitespace trim\n<$vars saveTiddler=<<currentTiddler>> palette={{$:/palette}}>\n<$list filter=\"[<newTagNameTiddler>match[]]\" emptyMessage=\"\"\"<$macrocall $name=\"tag-picker-inner\" actions=<<__actions__>> tagField=<<__tagField__>>/>\"\"\">\n<$set name=\"newTagNameTiddler\" value=<<qualify \"$:/temp/NewTagName\">>>\n<$macrocall $name=\"tag-picker-inner\" actions=<<__actions__>> tagField=<<__tagField__>>/>\n</$set>\n</$list>\n</$vars>\n\\end\n"
},
"$:/core/macros/tag": {
"title": "$:/core/macros/tag",
"tags": "$:/tags/Macro",
"text": "\\define tag-pill-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\n\\define tag-pill-inner(tag,icon,colour,fallbackTarget,colourA,colourB,element-tag,element-attributes,actions)\n<$vars foregroundColor=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">> backgroundColor=\"\"\"$colour$\"\"\">\n<$element-tag$ $element-attributes$ class=\"tc-tag-label tc-btn-invisible\" style=<<tag-pill-styles>>>\n$actions$<$transclude tiddler=\"\"\"$icon$\"\"\"/><$view tiddler=<<__tag__>> field=\"title\" format=\"text\" />\n</$element-tag$>\n</$vars>\n\\end\n\n\\define tag-pill-body(tag,icon,colour,palette,element-tag,element-attributes,actions)\n<$macrocall $name=\"tag-pill-inner\" tag=<<__tag__>> icon=\"\"\"$icon$\"\"\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}} element-tag=\"\"\"$element-tag$\"\"\" element-attributes=\"\"\"$element-attributes$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n\\end\n\n\\define tag-pill(tag,element-tag:\"span\",element-attributes:\"\",actions:\"\")\n<span class=\"tc-tag-list-item\">\n<$macrocall $name=\"tag-pill-body\" tag=<<__tag__>> icon={{{ [<__tag__>get[icon]] }}} colour={{{ [<__tag__>get[color]] }}} palette={{$:/palette}} element-tag=\"\"\"$element-tag$\"\"\" element-attributes=\"\"\"$element-attributes$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</span>\n\\end\n\n\\define tag(tag)\n{{$tag$||$:/core/ui/TagTemplate}}\n\\end\n"
},
"$:/core/macros/thumbnails": {
"title": "$:/core/macros/thumbnails",
"tags": "$:/tags/Macro",
"text": "\\define thumbnail(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<$link to=\"\"\"$link$\"\"\"><div class=\"tc-thumbnail-wrapper\">\n<div class=\"tc-thumbnail-image\" style=\"width:$width$px;height:$height$px;\"><$reveal type=\"nomatch\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" style=\"width:$width$px;height:$height$px;\">\n[img[$image$]]\n</$reveal><$reveal type=\"match\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" class=\"tc-thumbnail-background\" style=\"width:$width$px;height:$height$px;background-color:$background-color$;\"></$reveal></div><div class=\"tc-thumbnail-icon\" style=\"fill:$color$;color:$color$;\">\n$icon$\n</div><div class=\"tc-thumbnail-caption\">\n$caption$\n</div>\n</div></$link>\n\\end\n\n\\define thumbnail-right(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<div class=\"tc-thumbnail-right-wrapper\"><<thumbnail \"\"\"$link$\"\"\" \"\"\"$icon$\"\"\" \"\"\"$color$\"\"\" \"\"\"$background-color$\"\"\" \"\"\"$image$\"\"\" \"\"\"$caption$\"\"\" \"\"\"$width$\"\"\" \"\"\"$height$\"\"\">></div>\n\\end\n\n\\define list-thumbnails(filter,width:\"280\",height:\"157\")\n<$list filter=\"\"\"$filter$\"\"\"><$macrocall $name=\"thumbnail\" link={{!!link}} icon={{!!icon}} color={{!!color}} background-color={{!!background-color}} image={{!!image}} caption={{!!caption}} width=\"\"\"$width$\"\"\" height=\"\"\"$height$\"\"\"/></$list>\n\\end\n"
},
"$:/core/macros/timeline": {
"title": "$:/core/macros/timeline",
"created": "20141212105914482",
"modified": "20141212110330815",
"tags": "$:/tags/Macro",
"text": "\\define timeline-title()\n\\whitespace trim\n<!-- Override this macro with a global macro \n of the same name if you need to change \n how titles are displayed on the timeline \n -->\n<$view field=\"title\"/>\n\\end\n\\define timeline(limit:\"100\",format:\"DDth MMM YYYY\",subfilter:\"\",dateField:\"modified\")\n<div class=\"tc-timeline\">\n<$list filter=\"[!is[system]$subfilter$has[$dateField$]!sort[$dateField$]limit[$limit$]eachday[$dateField$]]\">\n<div class=\"tc-menu-list-item\">\n<$view field=\"$dateField$\" format=\"date\" template=\"$format$\"/>\n<$list filter=\"[sameday:$dateField${!!$dateField$}!is[system]$subfilter$!sort[$dateField$]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link to={{!!title}}><<timeline-title>></$link>\n</div>\n</$list>\n</div>\n</$list>\n</div>\n\\end\n"
},
"$:/core/macros/toc": {
"title": "$:/core/macros/toc",
"tags": "$:/tags/Macro",
"text": "\\define toc-caption()\n<$set name=\"tv-wikilinks\" value=\"no\">\n <$transclude field=\"caption\">\n <$view field=\"title\"/>\n </$transclude>\n</$set>\n\\end\n\n\\define toc-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<ol class=\"tc-toc\">\n <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n <$vars item=<<currentTiddler>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n <$set name=\"excluded\" filter=\"\"\"[enlist<__exclude__>] [<__tag__>]\"\"\">\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n <li class=<<toc-item-class>>>\n <$list filter=\"[all[current]toc-link[no]]\" emptyMessage=\"<$link to={{{ [<currentTiddler>get[target]else<currentTiddler>] }}}><$view field='caption'><$view field='title'/></$view></$link>\">\n <<toc-caption>>\n </$list>\n <$macrocall $name=\"toc-body\" tag=<<item>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<excluded>> path=<<path>>/>\n </li>\n </$set>\n </$set>\n </$vars>\n </$list>\n</ol>\n\\end\n\n\\define toc(tag,sort:\"\",itemClassFilter:\"\")\n<$macrocall $name=\"toc-body\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> />\n\\end\n\n\\define toc-linked-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<!-- helper function -->\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n <li class=<<toc-item-class>>>\n <$link to={{{ [<currentTiddler>get[target]else<currentTiddler>] }}}>\n <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/right-arrow}}\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/down-arrow}}\n </$button>\n </$reveal>\n <<toc-caption>>\n </$link>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n </$reveal>\n </li>\n </$set>\n</$qualify>\n\\end\n\n\\define toc-unlinked-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<!-- helper function -->\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n <li class=<<toc-item-class>>>\n <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/right-arrow}}\n <<toc-caption>>\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/down-arrow}}\n <<toc-caption>>\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n </$reveal>\n </li>\n </$set>\n</$qualify>\n\\end\n\n\\define toc-expandable-empty-message()\n<$macrocall $name=\"toc-linked-expandable-body\" tag=<<tag>> sort=<<sort>> itemClassFilter=<<itemClassFilter>> exclude=<<excluded>> path=<<path>>/>\n\\end\n\n\\define toc-expandable(tag,sort:\"\",itemClassFilter:\"\",exclude,path)\n<$vars tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n <$set name=\"excluded\" filter=\"\"\"[enlist<__exclude__>] [<__tag__>]\"\"\">\n <ol class=\"tc-toc toc-expandable\">\n <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n <$list filter=\"[all[current]toc-link[no]]\" emptyMessage=<<toc-expandable-empty-message>> >\n <$macrocall $name=\"toc-unlinked-expandable-body\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=\"\"\"itemClassFilter\"\"\" exclude=<<excluded>> path=<<path>> />\n </$list>\n </$list>\n </ol>\n </$set>\n</$vars>\n\\end\n\n\\define toc-linked-selective-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\" >\n <li class=<<toc-item-class>>>\n <$link to={{{ [<currentTiddler>get[target]else<currentTiddler>] }}}>\n <$list filter=\"[all[current]tagging[]$sort$limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button>\">\n <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/right-arrow}}\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/down-arrow}}\n </$button>\n </$reveal>\n </$list>\n <<toc-caption>>\n </$link>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$macrocall $name=\"toc-selective-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n </$reveal>\n </li>\n </$set>\n</$qualify>\n\\end\n\n\\define toc-unlinked-selective-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n <li class=<<toc-item-class>>>\n <$list filter=\"[all[current]tagging[]$sort$limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button> <$view field='caption'><$view field='title'/></$view>\">\n <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/right-arrow}}\n <<toc-caption>>\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/down-arrow}}\n <<toc-caption>>\n </$button>\n </$reveal>\n </$list>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$macrocall $name=\"toc-selective-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n </$reveal>\n </li>\n </$set>\n</$qualify>\n\\end\n\n\\define toc-selective-expandable-empty-message()\n<$macrocall $name=\"toc-linked-selective-expandable-body\" tag=<<tag>> sort=<<sort>> itemClassFilter=<<itemClassFilter>> exclude=<<excluded>> path=<<path>>/>\n\\end\n\n\\define toc-selective-expandable(tag,sort:\"\",itemClassFilter,exclude,path)\n<$vars tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n <$set name=\"excluded\" filter=\"\"\"[enlist<__exclude__>] [<__tag__>]\"\"\">\n <ol class=\"tc-toc toc-selective-expandable\">\n <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n <$list filter=\"[all[current]toc-link[no]]\" variable=\"ignore\" emptyMessage=<<toc-selective-expandable-empty-message>> >\n <$macrocall $name=\"toc-unlinked-selective-expandable-body\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<excluded>> path=<<path>>/>\n </$list>\n </$list>\n </ol>\n </$set>\n</$vars>\n\\end\n\n\\define toc-tabbed-external-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$tiddler tiddler={{{ [<__selectedTiddler__>get[text]] }}}>\n <div class=\"tc-tabbed-table-of-contents\">\n <$linkcatcher to=<<__selectedTiddler__>>>\n <div class=\"tc-table-of-contents\">\n <$macrocall $name=\"toc-selective-expandable\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=\"[all[current]] -[<__selectedTiddler__>get[text]]\"/>\n </div>\n </$linkcatcher>\n <div class=\"tc-tabbed-table-of-contents-content\">\n <$reveal stateTitle=<<__selectedTiddler__>> type=\"nomatch\" text=\"\">\n <$transclude mode=\"block\" tiddler=<<__template__>>>\n <h1><<toc-caption>></h1>\n <$transclude mode=\"block\">$missingText$</$transclude>\n </$transclude>\n </$reveal>\n <$reveal stateTitle=<<__selectedTiddler__>> type=\"match\" text=\"\">\n $unselectedText$\n </$reveal>\n </div>\n </div>\n</$tiddler>\n\\end\n\n\\define toc-tabbed-internal-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$linkcatcher to=<<__selectedTiddler__>>>\n <$macrocall $name=\"toc-tabbed-external-nav\" tag=<<__tag__>> sort=<<__sort__>> selectedTiddler=<<__selectedTiddler__>> unselectedText=<<__unselectedText__>> missingText=<<__missingText__>> template=<<__template__>>/>\n</$linkcatcher>\n\\end\n\n"
},
"$:/core/macros/translink": {
"title": "$:/core/macros/translink",
"tags": "$:/tags/Macro",
"text": "\\define translink(title,mode:\"block\")\n<div style=\"border:1px solid #ccc; padding: 0.5em; background: black; foreground; white;\">\n<$link to=\"\"\"$title$\"\"\">\n<$text text=\"\"\"$title$\"\"\"/>\n</$link>\n<div style=\"border:1px solid #ccc; padding: 0.5em; background: white; foreground; black;\">\n<$transclude tiddler=\"\"\"$title$\"\"\" mode=\"$mode$\">\n\"<$text text=\"\"\"$title$\"\"\"/>\" is missing\n</$transclude>\n</div>\n</div>\n\\end\n"
},
"$:/core/macros/tree": {
"title": "$:/core/macros/tree",
"tags": "$:/tags/Macro",
"text": "\\define leaf-link(full-title,chunk,separator: \"/\")\n<$link to=<<__full-title__>>><$text text=<<__chunk__>>/></$link>\n\\end\n\n\\define leaf-node(prefix,chunk)\n<li>\n<$list filter=\"[<__prefix__>addsuffix<__chunk__>is[shadow]] [<__prefix__>addsuffix<__chunk__>is[tiddler]]\" variable=\"full-title\">\n<$list filter=\"[<full-title>removeprefix<__prefix__>]\" variable=\"chunk\">\n<span>{{$:/core/images/file}}</span> <$macrocall $name=\"leaf-link\" full-title=<<full-title>> chunk=<<chunk>>/>\n</$list>\n</$list>\n</li>\n\\end\n\n\\define branch-node(prefix,chunk,separator: \"/\")\n<li>\n<$set name=\"reveal-state\" value={{{ [[$:/state/tree/]addsuffix<__prefix__>addsuffix<__chunk__>] }}}>\n<$reveal type=\"nomatch\" stateTitle=<<reveal-state>> text=\"show\">\n<$button setTitle=<<reveal-state>> setTo=\"show\" class=\"tc-btn-invisible\">\n{{$:/core/images/folder}} <$text text=<<__chunk__>>/>\n</$button>\n</$reveal>\n<$reveal type=\"match\" stateTitle=<<reveal-state>> text=\"show\">\n<$button setTitle=<<reveal-state>> setTo=\"hide\" class=\"tc-btn-invisible\">\n{{$:/core/images/folder}} <$text text=<<__chunk__>>/>\n</$button>\n</$reveal>\n<span>(<$count filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>removeprefix<__chunk__>] -[<__prefix__>addsuffix<__chunk__>]\"/>)</span>\n<$reveal type=\"match\" stateTitle=<<reveal-state>> text=\"show\">\n<$macrocall $name=\"tree-node\" prefix={{{ [<__prefix__>addsuffix<__chunk__>] }}} separator=<<__separator__>>/>\n</$reveal>\n</$set>\n</li>\n\\end\n\n\\define tree-node(prefix,separator: \"/\")\n<ol>\n<$list filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]!suffix<__separator__>]\" variable=\"chunk\">\n<$macrocall $name=\"leaf-node\" prefix=<<__prefix__>> chunk=<<chunk>> separator=<<__separator__>>/>\n</$list>\n<$list filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]suffix<__separator__>]\" variable=\"chunk\">\n<$macrocall $name=\"branch-node\" prefix=<<__prefix__>> chunk=<<chunk>> separator=<<__separator__>>/>\n</$list>\n</ol>\n\\end\n\n\\define tree(prefix: \"$:/\",separator: \"/\")\n<div class=\"tc-tree\">\n<span><$text text=<<__prefix__>>/></span>\n<div>\n<$macrocall $name=\"tree-node\" prefix=<<__prefix__>> separator=<<__separator__>>/>\n</div>\n</div>\n\\end\n"
},
"$:/core/macros/utils": {
"title": "$:/core/macros/utils",
"text": "\\define colour(colour)\n$colour$\n\\end\n"
},
"$:/snippets/minifocusswitcher": {
"title": "$:/snippets/minifocusswitcher",
"text": "<$select tiddler=\"$:/config/AutoFocus\">\n<$list filter=\"title tags text type fields\">\n<option value=<<currentTiddler>>><<currentTiddler>></option>\n</$list>\n</$select>\n"
},
"$:/snippets/minilanguageswitcher": {
"title": "$:/snippets/minilanguageswitcher",
"text": "<$select tiddler=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[title]]\">\n<option value=<<currentTiddler>>><$view field=\"description\"><$view field=\"name\"><$view field=\"title\"/></$view></$view></option>\n</$list>\n</$select>"
},
"$:/snippets/minithemeswitcher": {
"title": "$:/snippets/minithemeswitcher",
"text": "\\define lingo-base() $:/language/ControlPanel/Theme/\n<<lingo Prompt>> <$select tiddler=\"$:/theme\">\n<$list filter=\"[plugin-type[theme]sort[title]]\">\n<option value=<<currentTiddler>>><$view field=\"name\"><$view field=\"title\"/></$view></option>\n</$list>\n</$select>"
},
"$:/snippets/modules": {
"title": "$:/snippets/modules",
"text": "\\define describeModuleType(type)\n{{$:/language/Docs/ModuleTypes/$type$}}\n\\end\n<$list filter=\"[moduletypes[]]\">\n\n!! <$macrocall $name=\"currentTiddler\" $type=\"text/plain\" $output=\"text/plain\"/>\n\n<$macrocall $name=\"describeModuleType\" type=<<currentTiddler>>/>\n\n<ul><$list filter=\"[all[current]modules[]]\"><li><$link><<currentTiddler>></$link>\n</li>\n</$list>\n</ul>\n</$list>\n"
},
"$:/palette": {
"title": "$:/palette",
"text": "$:/palettes/Vanilla"
},
"$:/snippets/paletteeditor": {
"title": "$:/snippets/paletteeditor",
"text": "<$transclude tiddler=\"$:/PaletteManager\"/>\n"
},
"$:/snippets/palettepreview": {
"title": "$:/snippets/palettepreview",
"text": "<$set name=\"currentTiddler\" value={{$:/palette}}>\n{{||$:/snippets/currpalettepreview}}\n</$set>\n"
},
"$:/snippets/paletteswitcher": {
"title": "$:/snippets/paletteswitcher",
"text": "<$linkcatcher to=\"$:/palette\">\n<div class=\"tc-chooser\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Palette]sort[name]]\"><$set name=\"cls\" filter=\"[all[current]prefix{$:/palette}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>><$link to={{!!title}}>''<$view field=\"name\" format=\"text\"/>'' - <$view field=\"description\" format=\"text\"/>{{||$:/snippets/currpalettepreview}}</$link>\n</div></$set>\n</$list>\n</div>\n</$linkcatcher>\n"
},
"$:/snippets/peek-stylesheets": {
"title": "$:/snippets/peek-stylesheets",
"text": "\\define expandable-stylesheets-list()\n<ol>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<$vars state=<<qualify \"$:/state/peek-stylesheets/open/\">>>\n<$set name=\"state\" value={{{ [<state>addsuffix<currentTiddler>] }}}>\n<li>\n<$reveal type=\"match\" state=<<state>> text=\"yes\" tag=\"span\">\n<$button set=<<state>> setTo=\"no\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"nomatch\" state=<<state>> text=\"yes\" tag=\"span\">\n<$button set=<<state>> setTo=\"yes\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$link>\n<$view field=\"title\"/>\n</$link>\n<$reveal type=\"match\" state=<<state>> text=\"yes\" tag=\"div\">\n<$set name=\"source\" tiddler=<<currentTiddler>>>\n<$wikify name=\"styles\" text=<<source>>>\n<pre>\n<code>\n<$text text=<<styles>>/>\n</code>\n</pre>\n</$wikify>\n</$set>\n</$reveal>\n</li>\n</$set>\n</$vars>\n</$list>\n</ol>\n\\end\n\n\\define stylesheets-list()\n<ol>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<li>\n<$link>\n<$view field=\"title\"/>\n</$link>\n<$set name=\"source\" tiddler=<<currentTiddler>>>\n<$wikify name=\"styles\" text=<<source>>>\n<pre>\n<code>\n<$text text=<<styles>>/>\n</code>\n</pre>\n</$wikify>\n</$set>\n</li>\n</$list>\n</ol>\n\\end\n\n<$vars modeState=<<qualify \"$:/state/peek-stylesheets/mode/\">>>\n\n<$reveal type=\"nomatch\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<$button set=<<modeState>> setTo=\"expanded\" class=\"tc-btn-invisible\">{{$:/core/images/chevron-right}} {{$:/language/ControlPanel/Stylesheets/Expand/Caption}}</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<$button set=<<modeState>> setTo=\"restored\" class=\"tc-btn-invisible\">{{$:/core/images/chevron-down}} {{$:/language/ControlPanel/Stylesheets/Restore/Caption}}</$button>\n</$reveal>\n\n<$reveal type=\"nomatch\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<<expandable-stylesheets-list>>\n</$reveal>\n<$reveal type=\"match\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<<stylesheets-list>>\n</$reveal>\n\n</$vars>\n"
},
"$:/temp/search": {
"title": "$:/temp/search",
"text": ""
},
"$:/tags/AdvancedSearch": {
"title": "$:/tags/AdvancedSearch",
"list": "[[$:/core/ui/AdvancedSearch/Standard]] [[$:/core/ui/AdvancedSearch/System]] [[$:/core/ui/AdvancedSearch/Shadows]] [[$:/core/ui/AdvancedSearch/Filter]]"
},
"$:/tags/AdvancedSearch/FilterButton": {
"title": "$:/tags/AdvancedSearch/FilterButton",
"list": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown $:/core/ui/AdvancedSearch/Filter/FilterButtons/clear $:/core/ui/AdvancedSearch/Filter/FilterButtons/export $:/core/ui/AdvancedSearch/Filter/FilterButtons/delete"
},
"$:/tags/ControlPanel": {
"title": "$:/tags/ControlPanel",
"list": "$:/core/ui/ControlPanel/Info $:/core/ui/ControlPanel/Appearance $:/core/ui/ControlPanel/Settings $:/core/ui/ControlPanel/Saving $:/core/ui/ControlPanel/Plugins $:/core/ui/ControlPanel/Tools $:/core/ui/ControlPanel/Internals"
},
"$:/tags/ControlPanel/Info": {
"title": "$:/tags/ControlPanel/Info",
"list": "$:/core/ui/ControlPanel/Basics $:/core/ui/ControlPanel/Advanced"
},
"$:/tags/ControlPanel/Plugins": {
"title": "$:/tags/ControlPanel/Plugins",
"list": "[[$:/core/ui/ControlPanel/Plugins/Installed]] [[$:/core/ui/ControlPanel/Plugins/Add]]"
},
"$:/tags/EditTemplate": {
"title": "$:/tags/EditTemplate",
"list": "[[$:/core/ui/EditTemplate/controls]] [[$:/core/ui/EditTemplate/title]] [[$:/core/ui/EditTemplate/tags]] [[$:/core/ui/EditTemplate/shadow]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/EditTemplate/body]] [[$:/core/ui/EditTemplate/type]] [[$:/core/ui/EditTemplate/fields]]"
},
"$:/tags/EditToolbar": {
"title": "$:/tags/EditToolbar",
"list": "[[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/cancel]] [[$:/core/ui/Buttons/save]]"
},
"$:/tags/EditorToolbar": {
"title": "$:/tags/EditorToolbar",
"list": "$:/core/ui/EditorToolbar/paint $:/core/ui/EditorToolbar/opacity $:/core/ui/EditorToolbar/line-width $:/core/ui/EditorToolbar/rotate-left $:/core/ui/EditorToolbar/clear $:/core/ui/EditorToolbar/bold $:/core/ui/EditorToolbar/italic $:/core/ui/EditorToolbar/strikethrough $:/core/ui/EditorToolbar/underline $:/core/ui/EditorToolbar/superscript $:/core/ui/EditorToolbar/subscript $:/core/ui/EditorToolbar/mono-line $:/core/ui/EditorToolbar/mono-block $:/core/ui/EditorToolbar/quote $:/core/ui/EditorToolbar/list-bullet $:/core/ui/EditorToolbar/list-number $:/core/ui/EditorToolbar/heading-1 $:/core/ui/EditorToolbar/heading-2 $:/core/ui/EditorToolbar/heading-3 $:/core/ui/EditorToolbar/heading-4 $:/core/ui/EditorToolbar/heading-5 $:/core/ui/EditorToolbar/heading-6 $:/core/ui/EditorToolbar/link $:/core/ui/EditorToolbar/excise $:/core/ui/EditorToolbar/picture $:/core/ui/EditorToolbar/stamp $:/core/ui/EditorToolbar/size $:/core/ui/EditorToolbar/editor-height $:/core/ui/EditorToolbar/more $:/core/ui/EditorToolbar/preview $:/core/ui/EditorToolbar/preview-type"
},
"$:/tags/Manager/ItemMain": {
"title": "$:/tags/Manager/ItemMain",
"list": "$:/Manager/ItemMain/WikifiedText $:/Manager/ItemMain/RawText $:/Manager/ItemMain/Fields"
},
"$:/tags/Manager/ItemSidebar": {
"title": "$:/tags/Manager/ItemSidebar",
"list": "$:/Manager/ItemSidebar/Tags $:/Manager/ItemSidebar/Colour $:/Manager/ItemSidebar/Icon $:/Manager/ItemSidebar/Tools"
},
"$:/tags/MoreSideBar": {
"title": "$:/tags/MoreSideBar",
"list": "[[$:/core/ui/MoreSideBar/All]] [[$:/core/ui/MoreSideBar/Recent]] [[$:/core/ui/MoreSideBar/Tags]] [[$:/core/ui/MoreSideBar/Missing]] [[$:/core/ui/MoreSideBar/Drafts]] [[$:/core/ui/MoreSideBar/Orphans]] [[$:/core/ui/MoreSideBar/Types]] [[$:/core/ui/MoreSideBar/System]] [[$:/core/ui/MoreSideBar/Shadows]] [[$:/core/ui/MoreSideBar/Explorer]] [[$:/core/ui/MoreSideBar/Plugins]]",
"text": ""
},
"$:/tags/PageControls": {
"title": "$:/tags/PageControls",
"list": "[[$:/core/ui/Buttons/home]] [[$:/core/ui/Buttons/close-all]] [[$:/core/ui/Buttons/fold-all]] [[$:/core/ui/Buttons/unfold-all]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/new-tiddler]] [[$:/core/ui/Buttons/new-journal]] [[$:/core/ui/Buttons/new-image]] [[$:/core/ui/Buttons/import]] [[$:/core/ui/Buttons/export-page]] [[$:/core/ui/Buttons/control-panel]] [[$:/core/ui/Buttons/advanced-search]] [[$:/core/ui/Buttons/manager]] [[$:/core/ui/Buttons/tag-manager]] [[$:/core/ui/Buttons/language]] [[$:/core/ui/Buttons/palette]] [[$:/core/ui/Buttons/theme]] [[$:/core/ui/Buttons/storyview]] [[$:/core/ui/Buttons/encryption]] [[$:/core/ui/Buttons/timestamp]] [[$:/core/ui/Buttons/full-screen]] [[$:/core/ui/Buttons/print]] [[$:/core/ui/Buttons/save-wiki]] [[$:/core/ui/Buttons/refresh]] [[$:/core/ui/Buttons/more-page-actions]]"
},
"$:/tags/PageTemplate": {
"title": "$:/tags/PageTemplate",
"list": "[[$:/core/ui/PageTemplate/topleftbar]] [[$:/core/ui/PageTemplate/toprightbar]] [[$:/core/ui/PageTemplate/sidebar]] [[$:/core/ui/PageTemplate/story]] [[$:/core/ui/PageTemplate/alerts]]",
"text": ""
},
"$:/tags/PluginLibrary": {
"title": "$:/tags/PluginLibrary",
"list": "$:/config/OfficialPluginLibrary"
},
"$:/tags/SideBar": {
"title": "$:/tags/SideBar",
"list": "[[$:/core/ui/SideBar/Open]] [[$:/core/ui/SideBar/Recent]] [[$:/core/ui/SideBar/Tools]] [[$:/core/ui/SideBar/More]]",
"text": ""
},
"$:/tags/SideBarSegment": {
"title": "$:/tags/SideBarSegment",
"list": "[[$:/core/ui/SideBarSegments/site-title]] [[$:/core/ui/SideBarSegments/site-subtitle]] [[$:/core/ui/SideBarSegments/page-controls]] [[$:/core/ui/SideBarSegments/search]] [[$:/core/ui/SideBarSegments/tabs]]"
},
"$:/tags/TiddlerInfo": {
"title": "$:/tags/TiddlerInfo",
"list": "[[$:/core/ui/TiddlerInfo/Tools]] [[$:/core/ui/TiddlerInfo/References]] [[$:/core/ui/TiddlerInfo/Tagging]] [[$:/core/ui/TiddlerInfo/List]] [[$:/core/ui/TiddlerInfo/Listed]] [[$:/core/ui/TiddlerInfo/Fields]]",
"text": ""
},
"$:/tags/TiddlerInfo/Advanced": {
"title": "$:/tags/TiddlerInfo/Advanced",
"list": "[[$:/core/ui/TiddlerInfo/Advanced/ShadowInfo]] [[$:/core/ui/TiddlerInfo/Advanced/PluginInfo]]"
},
"$:/tags/ViewTemplate": {
"title": "$:/tags/ViewTemplate",
"list": "[[$:/core/ui/ViewTemplate/title]] [[$:/core/ui/ViewTemplate/unfold]] [[$:/core/ui/ViewTemplate/subtitle]] [[$:/core/ui/ViewTemplate/tags]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/ViewTemplate/body]]"
},
"$:/tags/ViewToolbar": {
"title": "$:/tags/ViewToolbar",
"list": "[[$:/core/ui/Buttons/more-tiddler-actions]] [[$:/core/ui/Buttons/info]] [[$:/core/ui/Buttons/new-here]] [[$:/core/ui/Buttons/new-journal-here]] [[$:/core/ui/Buttons/clone]] [[$:/core/ui/Buttons/export-tiddler]] [[$:/core/ui/Buttons/edit]] [[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/permalink]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/open-window]] [[$:/core/ui/Buttons/close-others]] [[$:/core/ui/Buttons/close]] [[$:/core/ui/Buttons/fold-others]] [[$:/core/ui/Buttons/fold]]"
},
"$:/snippets/themeswitcher": {
"title": "$:/snippets/themeswitcher",
"text": "<$linkcatcher to=\"$:/theme\">\n<div class=\"tc-chooser\"><$list filter=\"[plugin-type[theme]sort[title]]\"><$set name=\"cls\" filter=\"[all[current]field:title{$:/theme}] [[$:/theme]!has[text]addsuffix[s/tiddlywiki/vanilla]field:title<currentTiddler>] +[limit[1]]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>><$link to={{!!title}}>''<$view field=\"name\" format=\"text\"/>'' <$view field=\"description\" format=\"text\"/></$link></div>\n</$set>\n</$list>\n</div>\n</$linkcatcher>"
},
"$:/core/wiki/title": {
"title": "$:/core/wiki/title",
"text": "{{$:/SiteTitle}} --- {{$:/SiteSubtitle}}"
},
"$:/view": {
"title": "$:/view",
"text": "classic"
},
"$:/snippets/viewswitcher": {
"title": "$:/snippets/viewswitcher",
"text": "\\define icon()\n$:/core/images/storyview-$(storyview)$\n\\end\n<$linkcatcher to=\"$:/view\">\n<div class=\"tc-chooser tc-viewswitcher\">\n<$list filter=\"[storyviews[]]\" variable=\"storyview\">\n<$set name=\"cls\" filter=\"[<storyview>prefix{$:/view}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>>\n<$link to=<<storyview>>><$transclude tiddler=<<icon>>/><$text text=<<storyview>>/></$link>\n</div>\n</$set>\n</$list>\n</div>\n</$linkcatcher>"
}
}
}
<div class="tc-search-results">
<$list filter="[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]" emptyMessage="""
<$list filter="[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]">
<$transclude mode="block"/>
</$list>
""">
<$macrocall $name="tabs" tabsList="[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]" default={{$:/config/SearchResults/Default}}/> actions=""" <$action-setfield $tiddler="$:/state/search/currentTab" text=<<currentTab>>/>""" explicitState="$:/state/tab/search-results/sidebar"/>
</$list>
</div>
\whitespace trim
<$reveal type="nomatch" stateTitle=<<folded-state>> text="hide" tag="div" retain="yes" animate="yes">
<div class="tc-subtitle">
<$link to={{!!modifier}} />
Created: <$view field="created" format="date" template={{$:/language/Tiddler/DateFormat}}/>
, Modified: <$view field="modified" format="date" template={{$:/language/Tiddler/DateFormat}}/>
</div>
</$reveal>
[[Searching for a quote]]
/*\
title: $:/macros/hmark/comparequote.js
Remember to add the following fields (both field name and field value are lowercase) (through the text boxes at the bottom of the tiddler) to this tiddler so it runs as a macro:
type: application/javascript
module-type: macro
Usage:
<<comparequote "author" "quote" ["topic or keyword(s)"]>>
Note: both "author" and "quote" should be existing tiddlers. "topic or keyword(s)" are optional
Examples:
<<comparequote "Donald Knuth" "Programming Quotes">>
<<comparequote "Donald Knuth" "Programming Quotes" "elegance, programming art">>
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
/*
Information about this macro
This is the comparequote of Tiddly Wiki 5 written in JavaScript
*/
exports.name = "comparequote";
exports.params = [
{ name: "author" },
{ name: "quote" },
{ name: "keywords" }
];
/*
Run the macro
*/
exports.run = function(author, quote, keywords) {
if( !author) author = "Haggai Mark";
if( !quote) quote = "Full lotus position";
if( !keywords) {
var output ="(Compare to what [[" + author + "]] had to say [[related to this|" + quote + "]]).";
} else {
var output ="(Compare to what [[" + author + "]] had to say [[about " + keywords + "|" + quote + "]]).";
}
return output;
};
})();
''When insights need capturing, quotes (often) come in very handy.''
<br>
(as opposed to the quote: [[When ideas fail, words come in very handy.]])
Haggai's TiddlyQuotes (BrainGrains)
$:/core/ui/MoreSideBar/Tags
$:/core/ui/SideBar/Recent
$:/themes/tiddlywiki/vanilla
{
"tiddlers": {
"$:/themes/tiddlywiki/snowwhite/base": {
"title": "$:/themes/tiddlywiki/snowwhite/base",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\define sidebarbreakpoint-minus-one()\n<$text text={{{ [{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}removesuffix[px]subtract[1]addsuffix[px]] ~[{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}] }}}/>\n\\end\n\n\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n.tc-sidebar-header {\n\ttext-shadow: 0 1px 0 <<colour sidebar-foreground-shadow>>;\n}\n\n.tc-tiddler-info {\n\t<<box-shadow \"inset 1px 2px 3px rgba(0,0,0,0.1)\">>\n}\n\n@media screen {\n\t.tc-tiddler-frame {\n\t\t<<box-shadow \"1px 1px 5px rgba(0, 0, 0, 0.3)\">>\n\t}\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\t.tc-tiddler-frame {\n\t\t<<box-shadow none>>\n\t}\n}\n\n.tc-page-controls button svg, .tc-tiddler-controls button svg, .tc-topbar button svg {\n\t<<transition \"fill 150ms ease-in-out\">>\n}\n\n.tc-tiddler-controls button.tc-selected,\n.tc-page-controls button.tc-selected {\n\t<<filter \"drop-shadow(0px -1px 2px rgba(0,0,0,0.25))\">>\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tc-edit-tags {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tc-tiddler-frame .tc-edit-tags input.tc-edit-texteditor {\n\t<<box-shadow \"none\">>\n\tborder: none;\n\toutline: none;\n}\n\ntextarea.tc-edit-texteditor {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\n}\n\ncanvas.tc-edit-bitmapeditor {\n\t<<box-shadow \"2px 2px 5px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-drop-down {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-block-dropdown {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-modal {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n}\n\n.tc-modal-footer {\n\tborder-radius: 0 0 6px 6px;\n\t<<box-shadow \"inset 0 1px 0 #fff\">>;\n}\n\n\n.tc-alert {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.6)\">>\n}\n\n.tc-notification {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n\ttext-shadow: 0 1px 0 rgba(255,255,255, 0.8);\n}\n\n.tc-sidebar-lists .tc-tab-set .tc-tab-divider {\n\tborder-top: none;\n\theight: 1px;\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%\">>\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%\">>\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%\">>\n}\n\n.tc-message-box img {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n\n.tc-plugin-info {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n"
}
}
}
{
"tiddlers": {
"$:/themes/tiddlywiki/vanilla/themetweaks": {
"title": "$:/themes/tiddlywiki/vanilla/themetweaks",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ThemeTweaks/ThemeTweaks}}",
"text": "\\define lingo-base() $:/language/ThemeTweaks/\n\n\\define replacement-text()\n[img[$(imageTitle)$]]\n\\end\n\n\\define backgroundimage-dropdown()\n<div class=\"tc-drop-down-wrapper\">\n<$button popup=<<qualify \"$:/state/popup/themetweaks/backgroundimage\">> class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n<$reveal state=<<qualify \"$:/state/popup/themetweaks/backgroundimage\">> type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n<div class=\"tc-drop-down\">\n<$macrocall $name=\"image-picker\" actions=\"\"\"\n\n<$action-setfield\n\t$tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\"\n\t$value=<<imageTitle>>\n/>\n\n\"\"\"/>\n</div>\n</$reveal>\n</div>\n\\end\n\n\\define backgroundimageattachment-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\" default=\"scroll\">\n<option value=\"scroll\"><<lingo Settings/BackgroundImageAttachment/Scroll>></option>\n<option value=\"fixed\"><<lingo Settings/BackgroundImageAttachment/Fixed>></option>\n</$select>\n\\end\n\n\\define backgroundimagesize-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\" default=\"scroll\">\n<option value=\"auto\"><<lingo Settings/BackgroundImageSize/Auto>></option>\n<option value=\"cover\"><<lingo Settings/BackgroundImageSize/Cover>></option>\n<option value=\"contain\"><<lingo Settings/BackgroundImageSize/Contain>></option>\n</$select>\n\\end\n\n<<lingo ThemeTweaks/Hint>>\n\n! <<lingo Options>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><<lingo Options/SidebarLayout>></$link> |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><option value=\"fixed-fluid\"><<lingo Options/SidebarLayout/Fixed-Fluid>></option><option value=\"fluid-fixed\"><<lingo Options/SidebarLayout/Fluid-Fixed>></option></$select> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\"><<lingo Options/StickyTitles>></$link><br>//<<lingo Options/StickyTitles/Hint>>// |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\"><option value=\"no\">{{$:/language/No}}</option><option value=\"yes\">{{$:/language/Yes}}</option></$select> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/codewrapping\"><<lingo Options/CodeWrapping>></$link> |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/codewrapping\"><option value=\"pre\">{{$:/language/No}}</option><option value=\"pre-wrap\">{{$:/language/Yes}}</option></$select> |\n\n! <<lingo Settings>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\"><<lingo Settings/FontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\"><<lingo Settings/CodeFontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\"><<lingo Settings/EditorFontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\"><<lingo Settings/BackgroundImage>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\" default=\"\" tag=\"input\"/> |<<backgroundimage-dropdown>> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\"><<lingo Settings/BackgroundImageAttachment>></$link> |<<backgroundimageattachment-dropdown>> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\"><<lingo Settings/BackgroundImageSize>></$link> |<<backgroundimagesize-dropdown>> | |\n\n! <<lingo Metrics>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\"><<lingo Metrics/FontSize>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\"><<lingo Metrics/LineHeight>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\"><<lingo Metrics/BodyFontSize>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\"><<lingo Metrics/BodyLineHeight>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\"><<lingo Metrics/StoryLeft>></$link><br>//<<lingo Metrics/StoryLeft/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\"><<lingo Metrics/StoryTop>></$link><br>//<<lingo Metrics/StoryTop/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\"><<lingo Metrics/StoryRight>></$link><br>//<<lingo Metrics/StoryRight/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\"><<lingo Metrics/StoryWidth>></$link><br>//<<lingo Metrics/StoryWidth/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\"><<lingo Metrics/TiddlerWidth>></$link><br>//<<lingo Metrics/TiddlerWidth/Hint>>//<br> |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\"><<lingo Metrics/SidebarBreakpoint>></$link><br>//<<lingo Metrics/SidebarBreakpoint/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\"><<lingo Metrics/SidebarWidth>></$link><br>//<<lingo Metrics/SidebarWidth/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\" default=\"\" tag=\"input\"/> |\n"
},
"$:/themes/tiddlywiki/vanilla/base": {
"title": "$:/themes/tiddlywiki/vanilla/base",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\define custom-background-datauri()\n<$set name=\"background\" value={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}>\n<$list filter=\"[<background>is[image]]\">\n`background: url(`\n<$list filter=\"[<background>!has[_canonical_uri]]\">\n`\"`<$macrocall $name=\"datauri\" title={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}/>`\"`\n</$list>\n<$list filter=\"[<background>has[_canonical_uri]]\">\n`\"`<$view tiddler={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}} field=\"_canonical_uri\"/>`\"`\n</$list>\n`) center center;`\n`background-attachment: `{{$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment}}`;\n-webkit-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\n-moz-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\n-o-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\nbackground-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;`\n</$list>\n</$set>\n\\end\n\n\\define sidebarbreakpoint()\n<$text text={{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}/>\n\\end\n\n\\define sidebarbreakpoint-minus-one()\n<$text text={{{ [{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}removesuffix[px]subtract[1]addsuffix[px]] ~[{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}] }}}/>\n\\end\n\n\\define if-fluid-fixed(text,hiddenSidebarText)\n<$reveal state=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\" type=\"match\" text=\"fluid-fixed\">\n$text$\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">\n$hiddenSidebarText$\n</$reveal>\n</$reveal>\n\\end\n\n\\define if-editor-height-fixed(then,else)\n<$reveal state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"fixed\">\n$then$\n</$reveal>\n<$reveal state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"auto\">\n$else$\n</$reveal>\n\\end\n\n\\define set-type-selector-min-width()\n<$set name=\"typeLength\" value={{{ [all[shadows+tiddlers]prefix[$:/language/Docs/Types/]get[name]length[]maxall[]] }}}>\n\n\t.tc-type-selector-dropdown-wrapper {\n\t\tmin-width: calc(<<typeLength>>ch + 4em);\n\t}\n\n\t.tc-type-selector-dropdown-wrapper input.tc-edit-typeeditor {\n\t\tmin-width: <<typeLength>>ch;\n\t}\n\n</$set>\n\\end\n\n\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\n\n/*\n** Start with the normalize CSS reset, and then belay some of its effects\n*/\n\n{{$:/themes/tiddlywiki/vanilla/reset}}\n\n*, input[type=\"search\"] {\n\tbox-sizing: border-box;\n\t-moz-box-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n}\n\ninput[type=\"search\"] {\n outline-offset: initial;\n}\n\nhtml button {\n\tline-height: 1.2;\n\tcolor: <<colour button-foreground>>;\n\tfill: <<colour button-foreground>>;\n\tbackground: <<colour button-background>>;\n\tborder-color: <<colour button-border>>;\n}\n\n/*\n** Basic element styles\n*/\n\nhtml, body {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/fontfamily}};\n\ttext-rendering: optimizeLegibility; /* Enables kerning and ligatures etc. */\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n}\n\nhtml:-webkit-full-screen {\n\tbackground-color: <<colour page-background>>;\n}\n\nbody.tc-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/fontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/lineheight}};\n\tword-wrap: break-word;\n\t<<custom-background-datauri>>\n\tcolor: <<colour foreground>>;\n\tbackground-color: <<colour page-background>>;\n\tfill: <<colour foreground>>;\n}\n\n<<if-background-attachment \"\"\"\n\nbody.tc-body {\n background-color: transparent;\n}\n\n\"\"\">>\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n\tfont-size: 2em;\n}\n\nh1, h2, h3, h4, h5, h6 {\n\tline-height: 1.2;\n\tfont-weight: 300;\n}\n\npre {\n\tdisplay: block;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n\tword-break: normal;\n\tword-wrap: break-word;\n\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\n\tbackground-color: <<colour pre-background>>;\n\tborder: 1px solid <<colour pre-border>>;\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\ncode {\n\tcolor: <<colour code-foreground>>;\n\tbackground-color: <<colour code-background>>;\n\tborder: 1px solid <<colour code-border>>;\n\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\nblockquote {\n\tborder-left: 5px solid <<colour blockquote-bar>>;\n\tmargin-left: 25px;\n\tpadding-left: 10px;\n\tquotes: \"\\201C\"\"\\201D\"\"\\2018\"\"\\2019\";\n}\n\nblockquote > div {\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n}\n\nblockquote.tc-big-quote {\n\tfont-family: Georgia, serif;\n\tposition: relative;\n\tbackground: <<colour pre-background>>;\n\tborder-left: none;\n\tmargin-left: 50px;\n\tmargin-right: 50px;\n\tpadding: 10px;\n border-radius: 8px;\n}\n\nblockquote.tc-big-quote cite:before {\n\tcontent: \"\\2014 \\2009\";\n}\n\nblockquote.tc-big-quote:before {\n\tfont-family: Georgia, serif;\n\tcolor: <<colour blockquote-bar>>;\n\tcontent: open-quote;\n\tfont-size: 8em;\n\tline-height: 0.1em;\n\tmargin-right: 0.25em;\n\tvertical-align: -0.4em;\n\tposition: absolute;\n left: -50px;\n top: 42px;\n}\n\nblockquote.tc-big-quote:after {\n\tfont-family: Georgia, serif;\n\tcolor: <<colour blockquote-bar>>;\n\tcontent: close-quote;\n\tfont-size: 8em;\n\tline-height: 0.1em;\n\tmargin-right: 0.25em;\n\tvertical-align: -0.4em;\n\tposition: absolute;\n right: -80px;\n bottom: -20px;\n}\n\ndl dt {\n\tfont-weight: bold;\n\tmargin-top: 6px;\n}\n\nbutton, textarea, input, select {\n\toutline-color: <<colour primary>>;\n}\n\ntextarea,\ninput[type=text],\ninput[type=search],\ninput[type=\"\"],\ninput:not([type]) {\n\tcolor: <<colour foreground>>;\n\tbackground: <<colour background>>;\n}\n\ninput[type=\"checkbox\"] {\n vertical-align: middle;\n}\n\ninput[type=\"search\"]::-webkit-search-decoration,\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-results-button,\ninput[type=\"search\"]::-webkit-search-results-decoration {\n\t-webkit-appearance:none;\n}\n\n.tc-muted {\n\tcolor: <<colour muted-foreground>>;\n}\n\nsvg.tc-image-button {\n\tpadding: 0px 1px 1px 0px;\n}\n\n.tc-icon-wrapper > svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\nkbd {\n\tdisplay: inline-block;\n\tpadding: 3px 5px;\n\tfont-size: 0.8em;\n\tline-height: 1.2;\n\tcolor: <<colour foreground>>;\n\tvertical-align: middle;\n\tbackground-color: <<colour background>>;\n\tborder: solid 1px <<colour muted-foreground>>;\n\tborder-bottom-color: <<colour muted-foreground>>;\n\tborder-radius: 3px;\n\tbox-shadow: inset 0 -1px 0 <<colour muted-foreground>>;\n}\n\n::selection {\n\tbackground-color: Highlight;\n\tcolor: HighlightText;\n\tbackground-color: <<colour selection-background>>;\n\tcolor: <<colour selection-foreground>>;\n}\n\n/*\nMarkdown likes putting code elements inside pre elements\n*/\npre > code {\n\tpadding: 0;\n\tborder: none;\n\tbackground-color: inherit;\n\tcolor: inherit;\n}\n\ntable {\n\tborder: 1px solid <<colour table-border>>;\n\twidth: auto;\n\tmax-width: 100%;\n\tcaption-side: bottom;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n\t/* next 2 elements needed, since normalize 8.0.1 */\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\ntable th, table td {\n\tpadding: 0 7px 0 7px;\n\tborder-top: 1px solid <<colour table-border>>;\n\tborder-left: 1px solid <<colour table-border>>;\n}\n\ntable thead tr td, table th {\n\tbackground-color: <<colour table-header-background>>;\n\tfont-weight: bold;\n}\n\ntable tfoot tr td {\n\tbackground-color: <<colour table-footer-background>>;\n}\n\n.tc-csv-table {\n\twhite-space: nowrap;\n}\n\n.tc-tiddler-frame img,\n.tc-tiddler-frame svg,\n.tc-tiddler-frame canvas,\n.tc-tiddler-frame embed,\n.tc-tiddler-frame iframe {\n\tmax-width: 100%;\n}\n\n.tc-tiddler-body > embed,\n.tc-tiddler-body > iframe {\n\twidth: 100%;\n\theight: 600px;\n}\n\n/*\n** Links\n*/\n\nbutton.tc-tiddlylink,\na.tc-tiddlylink {\n\ttext-decoration: none;\n\tfont-weight: 500;\n\tcolor: <<colour tiddler-link-foreground>>;\n\t-webkit-user-select: inherit; /* Otherwise the draggable attribute makes links impossible to select */\n}\n\n.tc-sidebar-lists a.tc-tiddlylink {\n\tcolor: <<colour sidebar-tiddler-link-foreground>>;\n}\n\n.tc-sidebar-lists a.tc-tiddlylink:hover {\n\tcolor: <<colour sidebar-tiddler-link-foreground-hover>>;\n}\n\nbutton.tc-tiddlylink:hover,\na.tc-tiddlylink:hover {\n\ttext-decoration: underline;\n}\n\na.tc-tiddlylink-resolves {\n}\n\na.tc-tiddlylink-shadow {\n\tfont-weight: bold;\n}\n\na.tc-tiddlylink-shadow.tc-tiddlylink-resolves {\n\tfont-weight: normal;\n}\n\na.tc-tiddlylink-missing {\n\tfont-style: italic;\n}\n\na.tc-tiddlylink-external {\n\ttext-decoration: underline;\n\tcolor: <<colour external-link-foreground>>;\n\tbackground-color: <<colour external-link-background>>;\n}\n\na.tc-tiddlylink-external:visited {\n\tcolor: <<colour external-link-foreground-visited>>;\n\tbackground-color: <<colour external-link-background-visited>>;\n}\n\na.tc-tiddlylink-external:hover {\n\tcolor: <<colour external-link-foreground-hover>>;\n\tbackground-color: <<colour external-link-background-hover>>;\n}\n\n.tc-drop-down a.tc-tiddlylink:hover {\n\tcolor: <<colour tiddler-link-background>>;\n}\n\n/*\n** Drag and drop styles\n*/\n\n.tc-tiddler-dragger {\n\tposition: relative;\n\tz-index: -10000;\n}\n\n.tc-tiddler-dragger-inner {\n\tposition: absolute;\n\ttop: -1000px;\n\tleft: -1000px;\n\tdisplay: inline-block;\n\tpadding: 8px 20px;\n\tfont-size: 16.9px;\n\tfont-weight: bold;\n\tline-height: 20px;\n\tcolor: <<colour dragger-foreground>>;\n\ttext-shadow: 0 1px 0 rgba(0, 0, 0, 1);\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <<colour dragger-background>>;\n\tborder-radius: 20px;\n}\n\n.tc-tiddler-dragger-cover {\n\tposition: absolute;\n\tbackground-color: <<colour page-background>>;\n}\n\n.tc-dropzone {\n\tposition: relative;\n}\n\n.tc-dropzone.tc-dragover:before {\n\tz-index: 10000;\n\tdisplay: block;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <<colour dropzone-background>>;\n\ttext-align: center;\n\tcontent: \"<<lingo DropMessage>>\";\n}\n\n.tc-droppable > .tc-droppable-placeholder {\n\tdisplay: none;\n}\n\n.tc-droppable.tc-dragover > .tc-droppable-placeholder {\n\tdisplay: block;\n\tborder: 2px dashed <<colour dropzone-background>>;\n}\n\n.tc-draggable {\n\tcursor: move;\n}\n\n.tc-sidebar-tab-open .tc-droppable-placeholder, .tc-tagged-draggable-list .tc-droppable-placeholder,\n.tc-links-draggable-list .tc-droppable-placeholder {\n\tline-height: 2em;\n\theight: 2em;\n}\n\n.tc-sidebar-tab-open-item {\n\tposition: relative;\n}\n\n.tc-sidebar-tab-open .tc-btn-invisible.tc-btn-mini svg {\n\tfont-size: 0.7em;\n\tfill: <<colour muted-foreground>>;\n}\n\n/*\n** Plugin reload warning\n*/\n\n.tc-plugin-reload-warning {\n\tz-index: 1000;\n\tdisplay: block;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <<colour alert-background>>;\n\ttext-align: center;\n}\n\n/*\n** Buttons\n*/\n\nbutton svg, button img, label svg, label img {\n\tvertical-align: middle;\n}\n\n.tc-btn-invisible {\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\tcursor: pointer;\n\tcolor: <<colour foreground>>;\n\tfill: <<colour foreground>>;\n}\n\n.tc-btn-boxed {\n\tfont-size: 0.6em;\n\tpadding: 0.2em;\n\tmargin: 1px;\n\tbackground: none;\n\tborder: 1px solid <<colour tiddler-controls-foreground>>;\n\tborder-radius: 0.25em;\n}\n\nhtml body.tc-body .tc-btn-boxed svg {\n\tfont-size: 1.6666em;\n}\n\n.tc-btn-boxed:hover {\n\tbackground: <<colour muted-foreground>>;\n\tcolor: <<colour background>>;\n}\n\nhtml body.tc-body .tc-btn-boxed:hover svg {\n\tfill: <<colour background>>;\n}\n\n.tc-btn-rounded {\n\tfont-size: 0.5em;\n\tline-height: 2;\n\tpadding: 0em 0.3em 0.2em 0.4em;\n\tmargin: 1px;\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour muted-foreground>>;\n\tcolor: <<colour background>>;\n\tborder-radius: 2em;\n}\n\nhtml body.tc-body .tc-btn-rounded svg {\n\tfont-size: 1.6666em;\n\tfill: <<colour background>>;\n}\n\n.tc-btn-rounded:hover {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour background>>;\n\tcolor: <<colour muted-foreground>>;\n}\n\nhtml body.tc-body .tc-btn-rounded:hover svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-btn-icon svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-btn-text {\n\tpadding: 0;\n\tmargin: 0;\n}\n\n/* used for documentation \"fake\" buttons */\n.tc-btn-standard {\n\tline-height: 1.8;\n\tcolor: #667;\n\tbackground-color: #e0e0e0;\n\tborder: 1px solid #888;\n\tpadding: 2px 1px 2px 1px;\n\tmargin: 1px 4px 1px 4px;\n}\n\n.tc-btn-big-green {\n\tdisplay: inline-block;\n\tpadding: 8px;\n\tmargin: 4px 8px 4px 8px;\n\tbackground: <<colour download-background>>;\n\tcolor: <<colour download-foreground>>;\n\tfill: <<colour download-foreground>>;\n\tborder: none;\n\tborder-radius: 2px;\n\tfont-size: 1.2em;\n\tline-height: 1.4em;\n\ttext-decoration: none;\n}\n\n.tc-btn-big-green svg,\n.tc-btn-big-green img {\n\theight: 2em;\n\twidth: 2em;\n\tvertical-align: middle;\n\tfill: <<colour download-foreground>>;\n}\n\n.tc-primary-btn {\n \tbackground: <<colour primary>>;\n}\n\n.tc-sidebar-lists input {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-sidebar-lists button {\n\tcolor: <<colour sidebar-button-foreground>>;\n\tfill: <<colour sidebar-button-foreground>>;\n}\n\n.tc-sidebar-lists button.tc-btn-mini {\n\tcolor: <<colour sidebar-muted-foreground>>;\n}\n\n.tc-sidebar-lists button.tc-btn-mini:hover {\n\tcolor: <<colour sidebar-muted-foreground-hover>>;\n}\n\n.tc-sidebar-lists button small {\n\tcolor: <<colour foreground>>;\n}\n\nbutton svg.tc-image-button, button .tc-image-button img {\n\theight: 1em;\n\twidth: 1em;\n}\n\n.tc-unfold-banner {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\twidth: 100%;\n\twidth: calc(100% + 2px);\n\tmargin-left: -43px;\n\ttext-align: center;\n\tborder-top: 2px solid <<colour tiddler-info-background>>;\n\tmargin-top: 4px;\n}\n\n.tc-unfold-banner:hover {\n\tbackground: <<colour tiddler-info-background>>;\n\tborder-top: 2px solid <<colour tiddler-info-border>>;\n}\n\n.tc-unfold-banner svg, .tc-fold-banner svg {\n\theight: 0.75em;\n\tfill: <<colour tiddler-controls-foreground>>;\n}\n\n.tc-unfold-banner:hover svg, .tc-fold-banner:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n.tc-fold-banner {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\twidth: 23px;\n\ttext-align: center;\n\tmargin-left: -35px;\n\ttop: 6px;\n\tbottom: 6px;\n}\n\n.tc-fold-banner:hover {\n\tbackground: <<colour tiddler-info-background>>;\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\n\t.tc-unfold-banner {\n\t\tposition: static;\n\t\twidth: calc(100% + 59px);\n\t}\n\n\t.tc-fold-banner {\n\t\twidth: 16px;\n\t\tmargin-left: -16px;\n\t\tfont-size: 0.75em;\n\t}\n\n}\n\n/*\n** Tags and missing tiddlers\n*/\n\n.tc-tag-list-item {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin-right: 7px;\n}\n\n.tc-tags-wrapper {\n\tmargin: 4px 0 14px 0;\n}\n\n.tc-missing-tiddler-label {\n\tfont-style: italic;\n\tfont-weight: normal;\n\tdisplay: inline-block;\n\tfont-size: 11.844px;\n\tline-height: 14px;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n}\n\n.tc-block-tags-dropdown > .tc-btn-invisible:hover {\n\tbackground-color: <<colour primary>>;\n}\n\nbutton.tc-tag-label, span.tc-tag-label {\n\tdisplay: inline-block;\n\tpadding: 0.16em 0.7em;\n\tfont-size: 0.9em;\n\tfont-weight: 400;\n\tline-height: 1.2em;\n\tcolor: <<colour tag-foreground>>;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <<colour tag-background>>;\n\tborder-radius: 1em;\n}\n\n.tc-sidebar-scrollable .tc-tag-label {\n\ttext-shadow: none;\n}\n\n.tc-untagged-separator {\n\twidth: 10em;\n\tleft: 0;\n\tmargin-left: 0;\n\tborder: 0;\n\theight: 1px;\n\tbackground: <<colour tab-divider>>;\n}\n\nbutton.tc-untagged-label {\n\tbackground-color: <<colour untagged-background>>;\n}\n\n.tc-tag-label svg, .tc-tag-label img {\n\theight: 1em;\n\twidth: 1em;\n\tmargin-right: 3px; \n\tmargin-bottom: 1px;\n\tvertical-align: bottom;\n}\n\n.tc-edit-tags button.tc-remove-tag-button svg {\n\tfont-size: 0.7em;\n\tvertical-align: middle;\n}\n\n.tc-tag-manager-table .tc-tag-label {\n\twhite-space: normal;\n}\n\n.tc-tag-manager-tag {\n\twidth: 100%;\n}\n\nbutton.tc-btn-invisible.tc-remove-tag-button {\n\toutline: none;\n}\n\n.tc-tag-button-selected,\n.tc-list-item-selected a.tc-tiddlylink, a.tc-list-item-selected {\n\tbackground-color: <<colour primary>>;\n\tcolor: <<colour tiddler-background>>;\n}\n\n/*\n** Page layout\n*/\n\n.tc-topbar {\n\tposition: fixed;\n\tz-index: 1200;\n}\n\n.tc-topbar-left {\n\tleft: 29px;\n\ttop: 5px;\n}\n\n.tc-topbar-right {\n\ttop: 5px;\n\tright: 29px;\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\n\t.tc-topbar-right {\n\t\tright: 10px;\n\t}\n\n}\n\n.tc-topbar button {\n\tpadding: 8px;\n}\n\n.tc-topbar svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-topbar button:hover svg {\n\tfill: <<colour foreground>>;\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\n\t.tc-show-sidebar-btn svg.tc-image-chevron-left, .tc-hide-sidebar-btn svg.tc-image-chevron-right {\n\t\ttransform: rotate(-90deg);\n\t}\n\n}\n\n.tc-sidebar-header {\n\tcolor: <<colour sidebar-foreground>>;\n\tfill: <<colour sidebar-foreground>>;\n}\n\n.tc-sidebar-header .tc-title a.tc-tiddlylink-resolves {\n\tfont-weight: 300;\n}\n\n.tc-sidebar-header .tc-sidebar-lists p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-sidebar-header .tc-missing-tiddler-label {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.tc-advanced-search input {\n\twidth: 60%;\n}\n\n.tc-search a svg {\n\twidth: 1.2em;\n\theight: 1.2em;\n\tvertical-align: middle;\n}\n\n.tc-page-controls {\n\tmargin-top: 14px;\n\tfont-size: 1.5em;\n}\n\n.tc-page-controls .tc-drop-down {\n font-size: 1rem;\n}\n\n.tc-page-controls button {\n\tmargin-right: 0.5em;\n}\n\n.tc-page-controls a.tc-tiddlylink:hover {\n\ttext-decoration: none;\n}\n\n.tc-page-controls img {\n\twidth: 1em;\n}\n\n.tc-page-controls svg {\n\tfill: <<colour sidebar-controls-foreground>>;\n}\n\n.tc-page-controls button:hover svg, .tc-page-controls a:hover svg {\n\tfill: <<colour sidebar-controls-foreground-hover>>;\n}\n\n.tc-sidebar-lists .tc-menu-list-item {\n\twhite-space: nowrap;\n}\n\n.tc-menu-list-count {\n\tfont-weight: bold;\n}\n\n.tc-menu-list-subitem {\n\tpadding-left: 7px;\n}\n\n.tc-story-river {\n\tposition: relative;\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\n\t.tc-sidebar-header {\n\t\tpadding: 14px;\n\t\tmin-height: 32px;\n\t\tmargin-top: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\ttransition: min-height {{$:/config/AnimationDuration}}ms ease-in-out, padding-top {{$:/config/AnimationDuration}}ms ease-in-out, padding-bottom {{$:/config/AnimationDuration}}ms ease-in-out;\n\t}\n\t\n\t<<if-no-sidebar \"\"\"\n\n\t\t.tc-sidebar-header {\n\t\t\tmin-height: 0;\n\t\t\tpadding-top: 0;\n\t\t\tpadding-bottom: 0;\n\t\t}\n\n\t\"\"\">>\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tpadding: 0;\n\t}\n}\n\n@media (min-width: <<sidebarbreakpoint>>) {\n\n\t.tc-message-box {\n\t\tmargin: 21px -21px 21px -21px;\n\t}\n\n\t.tc-sidebar-scrollable {\n\t\tposition: fixed;\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\n\t\tbottom: 0;\n\t\tright: 0;\n\t\toverflow-y: auto;\n\t\toverflow-x: auto;\n\t\t-webkit-overflow-scrolling: touch;\n\t\tmargin: 0 0 0 -42px;\n\t\tpadding: 71px 0 28px 42px;\n\t}\n\n\thtml[dir=\"rtl\"] .tc-sidebar-scrollable {\n\t\tleft: auto;\n\t\tright: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\n\t}\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/storywidth}};\n\t\tpadding: 42px 42px 42px 42px;\n\t}\n\n<<if-no-sidebar \"\n\n\t.tc-story-river {\n\t\twidth: calc(100% - {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}});\n\t}\n\n\">>\n\n\t.tc-story-river.tc-static-story-river {\n\t\tmargin-right: 0;\n\t\tpadding-right: 42px;\n\t}\n\n}\n\n@media print {\n\n\tbody.tc-body {\n\t\tbackground-color: transparent;\n\t}\n\n\t.tc-sidebar-header, .tc-topbar {\n\t\tdisplay: none;\n\t}\n\n\t.tc-story-river {\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\n\t.tc-story-river .tc-tiddler-frame {\n\t\tmargin: 0;\n\t\tborder: none;\n\t\tpadding: 0;\n\t}\n}\n\n/*\n** Tiddler styles\n*/\n\n.tc-tiddler-frame {\n\tposition: relative;\n\tmargin-bottom: 28px;\n\tbackground-color: <<colour tiddler-background>>;\n\tborder: 1px solid <<colour tiddler-border>>;\n}\n\n{{$:/themes/tiddlywiki/vanilla/sticky}}\n\n.tc-tiddler-info {\n\tpadding: 14px 42px 14px 42px;\n\tbackground-color: <<colour tiddler-info-background>>;\n\tborder-top: 1px solid <<colour tiddler-info-border>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-border>>;\n}\n\n.tc-tiddler-info p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-tiddler-info .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour tiddler-info-tab-background>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-tab-background>>;\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\n\t.tc-tiddler-info {\n\t\tpadding: 14px 14px 14px 14px;\n\t}\n\n}\n\n.tc-view-field-table {\n\twidth: 100%;\n}\n\n.tc-view-field-name {\n\twidth: 1%; /* Makes this column be as narrow as possible */\n\ttext-align: right;\n\tfont-style: italic;\n\tfont-weight: 200;\n}\n\n.tc-view-field-value {\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\t.tc-tiddler-frame {\n\t\tpadding: 14px 14px 14px 14px;\n\t\tmargin-bottom: .5em;\n\t}\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -14px 0 -14px;\n\t}\n}\n\n@media (min-width: <<sidebarbreakpoint>>) {\n\t.tc-tiddler-frame {\n\t\tpadding: 28px 42px 42px 42px;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth}};\n\t\tborder-radius: 2px;\n\t}\n\n<<if-no-sidebar \"\n\n\t.tc-tiddler-frame {\n\t\twidth: 100%;\n\t}\n\n\">>\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -42px 0 -42px;\n\t}\n}\n\n.tc-site-title,\n.tc-titlebar {\n\tfont-weight: 300;\n\tfont-size: 2.35em;\n\tline-height: 1.35em;\n\tcolor: <<colour tiddler-title-foreground>>;\n\tmargin: 0;\n}\n\n.tc-site-title {\n\tcolor: <<colour site-title-foreground>>;\n}\n\n.tc-tiddler-title-icon {\n\tvertical-align: middle;\n\tmargin-right: .1em;\n}\n\n.tc-system-title-prefix {\n\tcolor: <<colour muted-foreground>>;\n}\n\n.tc-titlebar h2 {\n\tfont-size: 1em;\n\tdisplay: inline;\n}\n\n.tc-titlebar img {\n\theight: 1em;\n}\n\n.tc-subtitle {\n\tfont-size: 0.9em;\n\tcolor: <<colour tiddler-subtitle-foreground>>;\n\tfont-weight: 300;\n}\n\n.tc-subtitle .tc-tiddlylink {\n\tmargin-right: .3em;\n}\n\n.tc-tiddler-missing .tc-title {\n font-style: italic;\n font-weight: normal;\n}\n\n.tc-tiddler-frame .tc-tiddler-controls {\n\tfloat: right;\n}\n\n.tc-tiddler-controls .tc-drop-down {\n\tfont-size: 0.6em;\n}\n\n.tc-tiddler-controls .tc-drop-down .tc-drop-down {\n\tfont-size: 1em;\n}\n\n.tc-tiddler-controls > span > button,\n.tc-tiddler-controls > span > span > button,\n.tc-tiddler-controls > span > span > span > button {\n\tvertical-align: baseline;\n\tmargin-left:5px;\n}\n\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img,\n.tc-search button svg, .tc-search a svg {\n\tfill: <<colour tiddler-controls-foreground>>;\n}\n\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img {\n\theight: 0.75em;\n}\n\n.tc-search button svg, .tc-search a svg {\n height: 1.2em;\n width: 1.2em;\n margin: 0 0.25em;\n}\n\n.tc-tiddler-controls button.tc-selected svg,\n.tc-page-controls button.tc-selected svg {\n\tfill: <<colour tiddler-controls-foreground-selected>>;\n}\n\n.tc-tiddler-controls button.tc-btn-invisible:hover svg,\n.tc-search button:hover svg, .tc-search a:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n@media print {\n\t.tc-tiddler-controls {\n\t\tdisplay: none;\n\t}\n}\n\n.tc-tiddler-help { /* Help prompts within tiddler template */\n\tcolor: <<colour muted-foreground>>;\n\tmargin-top: 14px;\n}\n\n.tc-tiddler-help a.tc-tiddlylink {\n\tcolor: <<colour very-muted-foreground>>;\n}\n\n.tc-tiddler-frame .tc-edit-texteditor {\n\twidth: 100%;\n\tmargin: 4px 0 4px 0;\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor,\n.tc-tiddler-frame textarea.tc-edit-texteditor,\n.tc-tiddler-frame iframe.tc-edit-texteditor {\n\tpadding: 3px 3px 3px 3px;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tline-height: 1.3em;\n\t-webkit-appearance: none;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor,\n.tc-tiddler-frame textarea.tc-edit-texteditor {\n\tbackground-color: <<colour tiddler-editor-background>>;\n}\n\n.tc-tiddler-frame iframe.tc-edit-texteditor {\n\tbackground-color: <<colour tiddler-background>>;\n}\n\n.tc-tiddler-frame .tc-binary-warning {\n\twidth: 100%;\n\theight: 5em;\n\ttext-align: center;\n\tpadding: 3em 3em 6em 3em;\n\tbackground: <<colour alert-background>>;\n\tborder: 1px solid <<colour alert-border>>;\n}\n\ncanvas.tc-edit-bitmapeditor {\n\tborder: 6px solid <<colour tiddler-editor-border-image>>;\n\tcursor: crosshair;\n\t-moz-user-select: none;\n\t-webkit-user-select: none;\n\t-ms-user-select: none;\n\tmargin-top: 6px;\n\tmargin-bottom: 6px;\n}\n\n.tc-edit-bitmapeditor-width {\n\tdisplay: block;\n}\n\n.tc-edit-bitmapeditor-height {\n\tdisplay: block;\n}\n\n.tc-tiddler-body {\n\tclear: both;\n}\n\n.tc-tiddler-frame .tc-tiddler-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/bodylineheight}};\n}\n\n.tc-titlebar, .tc-tiddler-edit-title {\n\toverflow: hidden; /* https://github.com/Jermolene/TiddlyWiki5/issues/282 */\n}\n\nhtml body.tc-body.tc-single-tiddler-window {\n\tmargin: 1em;\n\tbackground: <<colour tiddler-background>>;\n}\n\n.tc-single-tiddler-window img,\n.tc-single-tiddler-window svg,\n.tc-single-tiddler-window canvas,\n.tc-single-tiddler-window embed,\n.tc-single-tiddler-window iframe {\n\tmax-width: 100%;\n}\n\n/*\n** Editor\n*/\n\n.tc-editor-toolbar {\n\tmargin-top: 8px;\n}\n\n.tc-editor-toolbar button {\n\tvertical-align: middle;\n\tbackground-color: <<colour tiddler-controls-foreground>>;\n\tcolor: <<colour tiddler-controls-foreground-selected>>;\n\tfill: <<colour tiddler-controls-foreground-selected>>;\n\tborder-radius: 4px;\n\tpadding: 3px;\n\tmargin: 2px 0 2px 4px;\n}\n\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-adjunct {\n\tmargin-left: 1px;\n\twidth: 1em;\n\tborder-radius: 8px;\n}\n\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-start-group {\n\tmargin-left: 11px;\n}\n\n.tc-editor-toolbar button.tc-selected {\n\tbackground-color: <<colour primary>>;\n}\n\n.tc-editor-toolbar button svg {\n\twidth: 1.6em;\n\theight: 1.2em;\n}\n\n.tc-editor-toolbar button:hover {\n\tbackground-color: <<colour tiddler-controls-foreground-selected>>;\n\tfill: <<colour background>>;\n\tcolor: <<colour background>>;\n}\n\n.tc-editor-toolbar .tc-text-editor-toolbar-more {\n\twhite-space: normal;\n}\n\n.tc-editor-toolbar .tc-text-editor-toolbar-more button {\n\tdisplay: inline-block;\n\tpadding: 3px;\n\twidth: auto;\n}\n\n.tc-editor-toolbar .tc-search-results {\n\tpadding: 0;\n}\n\n/*\n** Adjustments for fluid-fixed mode\n*/\n\n@media (min-width: <<sidebarbreakpoint>>) {\n\n<<if-fluid-fixed text:\"\"\"\n\n\t.tc-story-river {\n\t\tpadding-right: 0;\n\t\tposition: relative;\n\t\twidth: auto;\n\t\tleft: 0;\n\t\tmargin-left: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\n\t\tmargin-right: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n\t}\n\n\t.tc-tiddler-frame {\n\t\twidth: 100%;\n\t}\n\n\t.tc-sidebar-scrollable {\n\t\tleft: auto;\n\t\tbottom: 0;\n\t\tright: 0;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n\t}\n\n\tbody.tc-body .tc-storyview-zoomin-tiddler {\n\t\twidth: 100%;\n\t\twidth: calc(100% - 42px);\n\t}\n\n\"\"\" hiddenSidebarText:\"\"\"\n\n\t.tc-story-river {\n\t\tpadding-right: 3em;\n\t\tmargin-right: 0;\n\t}\n\n\tbody.tc-body .tc-storyview-zoomin-tiddler {\n\t\twidth: 100%;\n\t\twidth: calc(100% - 84px);\n\t}\n\n\"\"\">>\n\n}\n\n/*\n** Toolbar buttons\n*/\n\n.tc-page-controls svg.tc-image-new-button {\n fill: <<colour toolbar-new-button>>;\n}\n\n.tc-page-controls svg.tc-image-options-button {\n fill: <<colour toolbar-options-button>>;\n}\n\n.tc-page-controls svg.tc-image-save-button {\n fill: <<colour toolbar-save-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-info-button {\n fill: <<colour toolbar-info-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-edit-button {\n fill: <<colour toolbar-edit-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-close-button {\n fill: <<colour toolbar-close-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-delete-button {\n fill: <<colour toolbar-delete-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-cancel-button {\n fill: <<colour toolbar-cancel-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-done-button {\n fill: <<colour toolbar-done-button>>;\n}\n\n/*\n** Tiddler edit mode\n*/\n\n.tc-tiddler-edit-frame em.tc-edit {\n\tcolor: <<colour muted-foreground>>;\n\tfont-style: normal;\n}\n\n.tc-edit-type-dropdown a.tc-tiddlylink-missing {\n\tfont-style: normal;\n}\n\n.tc-type-selector .tc-edit-typeeditor {\n\twidth: auto;\n}\n\n.tc-type-selector-dropdown-wrapper {\n\tdisplay: inline-block;\n}\n\n<<set-type-selector-min-width>>\n\n.tc-edit-tags {\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tpadding: 4px 8px 4px 8px;\n}\n\n.tc-edit-add-tag {\n\tdisplay: inline-block;\n}\n\n.tc-edit-add-tag .tc-add-tag-name input {\n\twidth: 50%;\n}\n\n.tc-edit-add-tag .tc-keyboard {\n\tdisplay:inline;\n}\n\n.tc-edit-tags .tc-tag-label {\n\tdisplay: inline-block;\n}\n\n.tc-edit-tags-list {\n\tmargin: 14px 0 14px 0;\n}\n\n.tc-remove-tag-button {\n\tpadding-left: 4px;\n}\n\n.tc-tiddler-preview {\n\toverflow: auto;\n}\n\n.tc-tiddler-preview-preview {\n\tfloat: right;\n\twidth: 49%;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tmargin: 4px 0 3px 3px;\n\tpadding: 3px 3px 3px 3px;\n}\n\n<<if-editor-height-fixed then:\"\"\"\n\n.tc-tiddler-preview-preview {\n\toverflow-y: scroll;\n\theight: {{$:/config/TextEditor/EditorHeight/Height}};\n}\n\n\"\"\">>\n\n.tc-tiddler-frame .tc-tiddler-preview .tc-edit-texteditor {\n\twidth: 49%;\n}\n\n.tc-tiddler-frame .tc-tiddler-preview canvas.tc-edit-bitmapeditor {\n\tmax-width: 49%;\n}\n\n.tc-edit-fields {\n\twidth: 100%;\n}\n\n.tc-edit-fields.tc-edit-fields-small {\n\tmargin-top: 0;\n\tmargin-bottom: 0;\n}\n\n.tc-edit-fields table, .tc-edit-fields tr, .tc-edit-fields td {\n\tborder: none;\n\tpadding: 4px;\n}\n\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(odd) {\n\tbackground-color: <<colour tiddler-editor-fields-odd>>;\n}\n\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(even) {\n\tbackground-color: <<colour tiddler-editor-fields-even>>;\n}\n\n.tc-edit-field-name {\n\ttext-align: right;\n}\n\n.tc-edit-field-value input {\n\twidth: 100%;\n}\n\n.tc-edit-field-remove {\n}\n\n.tc-edit-field-remove svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n\tvertical-align: middle;\n}\n\n.tc-edit-field-add-name-wrapper input.tc-edit-texteditor {\n\twidth: auto;\n}\n\n.tc-edit-field-add-name-wrapper {\n\tdisplay: inline-block;\n}\n\n.tc-edit-field-add-value {\n\tdisplay: inline-block;\n}\n\n@media (min-width: <<sidebarbreakpoint>>) {\n\n\t.tc-edit-field-add-value {\n\t\twidth: 35%;\n\t}\n\n}\n\n.tc-edit-field-add-button {\n\tdisplay: inline-block;\n\twidth: 10%;\n}\n\n/*\n** Storyview Classes\n*/\n\n.tc-viewswitcher .tc-image-button {\n\tmargin-right: .3em;\n}\n\n.tc-storyview-zoomin-tiddler {\n\tposition: absolute;\n\tdisplay: block;\n\twidth: 100%;\n}\n\n@media (min-width: <<sidebarbreakpoint>>) {\n\n\t.tc-storyview-zoomin-tiddler {\n\t\twidth: calc(100% - 84px);\n\t}\n\n}\n\n/*\n** Dropdowns\n*/\n\n.tc-btn-dropdown {\n\ttext-align: left;\n}\n\n.tc-btn-dropdown svg, .tc-btn-dropdown img {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-drop-down-wrapper {\n\tposition: relative;\n}\n\n.tc-drop-down {\n\tmin-width: 380px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 7px 0 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\ttext-shadow: none;\n\tline-height: 1.4;\n}\n\n.tc-drop-down .tc-drop-down {\n\tmargin-left: 14px;\n}\n\n.tc-drop-down button svg, .tc-drop-down a svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-drop-down button.tc-btn-invisible:hover svg {\n\tfill: <<colour background>>;\n}\n\n.tc-drop-down .tc-drop-down-info {\n\tpadding-left: 14px;\n}\n\n.tc-drop-down p {\n\tpadding: 0 14px 0 14px;\n}\n\n.tc-drop-down svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-drop-down img {\n\twidth: 1em;\n}\n\n.tc-drop-down a, .tc-drop-down button {\n\tdisplay: block;\n\tpadding: 0 14px 0 14px;\n\twidth: 100%;\n\ttext-align: left;\n\tcolor: <<colour foreground>>;\n\tline-height: 1.4;\n}\n\n.tc-drop-down .tc-tab-set .tc-tab-buttons button {\n\tdisplay: inline-block;\n width: auto;\n margin-bottom: 0px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.tc-drop-down .tc-prompt {\n\tpadding: 0 14px;\n}\n\n.tc-drop-down .tc-chooser {\n\tborder: none;\n}\n\n.tc-drop-down .tc-chooser .tc-swatches-horiz {\n\tfont-size: 0.4em;\n\tpadding-left: 1.2em;\n}\n\n.tc-drop-down .tc-file-input-wrapper {\n\twidth: 100%;\n}\n\n.tc-drop-down .tc-file-input-wrapper button {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-drop-down a:hover, .tc-drop-down button:hover, .tc-drop-down .tc-file-input-wrapper:hover button {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tc-drop-down .tc-tab-buttons button {\n\tbackground-color: <<colour dropdown-tab-background>>;\n}\n\n.tc-drop-down .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour dropdown-tab-background-selected>>;\n\tborder-bottom: 1px solid <<colour dropdown-tab-background-selected>>;\n}\n\n.tc-drop-down-bullet {\n\tdisplay: inline-block;\n\twidth: 0.5em;\n}\n\n.tc-drop-down .tc-tab-contents a {\n\tpadding: 0 0.5em 0 0.5em;\n}\n\n.tc-block-dropdown-wrapper {\n\tposition: relative;\n}\n\n.tc-block-dropdown {\n\tposition: absolute;\n\tmin-width: 220px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\tz-index: 1000;\n\ttext-shadow: none;\n}\n\n.tc-block-dropdown.tc-search-drop-down {\n\tmargin-left: -12px;\n}\n\n.tc-block-dropdown a {\n\tdisplay: block;\n\tpadding: 4px 14px 4px 14px;\n}\n\n.tc-block-dropdown.tc-search-drop-down a {\n\tdisplay: block;\n\tpadding: 0px 10px 0px 10px;\n}\n\n.tc-drop-down .tc-dropdown-item-plain,\n.tc-block-dropdown .tc-dropdown-item-plain {\n\tpadding: 4px 14px 4px 7px;\n}\n\n.tc-drop-down .tc-dropdown-item,\n.tc-block-dropdown .tc-dropdown-item {\n\tpadding: 4px 14px 4px 7px;\n\tcolor: <<colour muted-foreground>>;\n}\n\n.tc-block-dropdown a.tc-tiddlylink:hover {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tc-search-results {\n\tpadding: 0 7px 0 7px;\n}\n\n.tc-image-chooser, .tc-colour-chooser {\n\twhite-space: normal;\n}\n\n.tc-image-chooser a,\n.tc-colour-chooser a {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\ttext-align: center;\n\tposition: relative;\n}\n\n.tc-image-chooser a {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tpadding: 2px;\n\tmargin: 2px;\n\twidth: 4em;\n\theight: 4em;\n}\n\n.tc-colour-chooser a {\n\tpadding: 3px;\n\twidth: 2em;\n\theight: 2em;\n\tvertical-align: middle;\n}\n\n.tc-image-chooser a:hover,\n.tc-colour-chooser a:hover {\n\tbackground: <<colour primary>>;\n\tpadding: 0px;\n\tborder: 3px solid <<colour primary>>;\n}\n\n.tc-image-chooser a svg,\n.tc-image-chooser a img {\n\tdisplay: inline-block;\n\twidth: auto;\n\theight: auto;\n\tmax-width: 3.5em;\n\tmax-height: 3.5em;\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n\tmargin: auto;\n}\n\n/*\n** Modals\n*/\n\n.tc-modal-wrapper {\n\tposition: fixed;\n\toverflow: auto;\n\toverflow-y: scroll;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 900;\n}\n\n.tc-modal-backdrop {\n\tposition: fixed;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 1000;\n\tbackground-color: <<colour modal-backdrop>>;\n}\n\n.tc-modal {\n\tz-index: 1100;\n\tbackground-color: <<colour modal-background>>;\n\tborder: 1px solid <<colour modal-border>>;\n}\n\n@media (max-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 1em;\n\t\tleft: 1em;\n\t\tright: 1em;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t\tmax-height: 60vh;\n\t}\n}\n\n@media (min-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 2em;\n\t\tleft: 25%;\n\t\twidth: 50%;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t\tmax-height: 60vh;\n\t}\n}\n\n.tc-modal-header {\n\tpadding: 9px 15px;\n\tborder-bottom: 1px solid <<colour modal-header-border>>;\n}\n\n.tc-modal-header h3 {\n\tmargin: 0;\n\tline-height: 30px;\n}\n\n.tc-modal-header img, .tc-modal-header svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-modal-body {\n\tpadding: 15px;\n}\n\n.tc-modal-footer {\n\tpadding: 14px 15px 15px;\n\tmargin-bottom: 0;\n\ttext-align: right;\n\tbackground-color: <<colour modal-footer-background>>;\n\tborder-top: 1px solid <<colour modal-footer-border>>;\n}\n\n\n/*\n** Centered modals\n*/\n.tc-modal-centered .tc-modal {\n\twidth: auto;\n\ttop: 50%;\n\tleft: 50%;\n\ttransform: translate(-50%, -50%) !important;\n}\n\n/*\n** Notifications\n*/\n\n.tc-notification {\n\tposition: fixed;\n\ttop: 14px;\n\tright: 42px;\n\tz-index: 1300;\n\tmax-width: 280px;\n\tpadding: 0 14px 0 14px;\n\tbackground-color: <<colour notification-background>>;\n\tborder: 1px solid <<colour notification-border>>;\n}\n\n/*\n** Tabs\n*/\n\n.tc-tab-set.tc-vertical {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tab-buttons {\n\tfont-size: 0.85em;\n\tpadding-top: 1em;\n\tmargin-bottom: -2px;\n}\n\n.tc-tab-buttons.tc-vertical {\n\tz-index: 100;\n\tdisplay: block;\n\tpadding-top: 14px;\n\tvertical-align: top;\n\ttext-align: right;\n\tmargin-bottom: inherit;\n\tmargin-right: -1px;\n\tmax-width: 33%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n}\n\n.tc-tab-buttons button.tc-tab-selected {\n\tcolor: <<colour tab-foreground-selected>>;\n\tbackground-color: <<colour tab-background-selected>>;\n\tborder-left: 1px solid <<colour tab-border-selected>>;\n\tborder-top: 1px solid <<colour tab-border-selected>>;\n\tborder-right: 1px solid <<colour tab-border-selected>>;\n}\n\n.tc-tab-buttons button {\n\tcolor: <<colour tab-foreground>>;\n\tpadding: 3px 5px 3px 5px;\n\tmargin-right: 0.3em;\n\tfont-weight: 300;\n\tborder: none;\n\tbackground: inherit;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-right: 1px solid <<colour tab-border>>;\n\tborder-top-left-radius: 2px;\n\tborder-top-right-radius: 2px;\n\tborder-bottom-left-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n\n.tc-tab-buttons.tc-vertical button {\n\tdisplay: block;\n\twidth: 100%;\n\tmargin-top: 3px;\n\tmargin-right: 0;\n\ttext-align: right;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tborder-right: none;\n\tborder-top-left-radius: 2px;\n\tborder-bottom-left-radius: 2px;\n\tborder-top-right-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n\n.tc-tab-buttons.tc-vertical button.tc-tab-selected {\n\tbackground-color: <<colour tab-background-selected>>;\n\tborder-right: 1px solid <<colour tab-background-selected>>;\n}\n\n.tc-tab-divider {\n\tborder-top: 1px solid <<colour tab-divider>>;\n}\n\n.tc-tab-divider.tc-vertical {\n\tdisplay: none;\n}\n\n.tc-tab-content {\n\tmargin-top: 14px;\n}\n\n.tc-tab-content.tc-vertical {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-top: 0;\n\tpadding-left: 14px;\n\tborder-left: 1px solid <<colour tab-border>>;\n\t-webkit-flex: 1 0 70%;\n\tflex: 1 0 70%;\n\toverflow: auto;\n}\n\n.tc-sidebar-lists .tc-tab-buttons {\n\tmargin-bottom: -1px;\n}\n\n.tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tcolor: <<colour sidebar-tab-foreground-selected>>;\n\tborder-left: 1px solid <<colour sidebar-tab-border-selected>>;\n\tborder-top: 1px solid <<colour sidebar-tab-border-selected>>;\n\tborder-right: 1px solid <<colour sidebar-tab-border-selected>>;\n}\n\n.tc-sidebar-lists .tc-tab-buttons button {\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tcolor: <<colour sidebar-tab-foreground>>;\n\tborder-left: 1px solid <<colour sidebar-tab-border>>;\n\tborder-top: 1px solid <<colour sidebar-tab-border>>;\n\tborder-right: 1px solid <<colour sidebar-tab-border>>;\n}\n\n.tc-sidebar-lists .tc-tab-divider {\n\tborder-top: 1px solid <<colour sidebar-tab-divider>>;\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\n\tdisplay: block;\n\twidth: 100%;\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tborder-top: none;\n\tborder-left: none;\n\tborder-bottom: none;\n\tborder-right: 1px solid #ccc;\n\tmargin-bottom: inherit;\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tborder: none;\n}\n\n/*\n** Manager\n*/\n\n.tc-manager-wrapper {\n\t\n}\n\n.tc-manager-controls {\n\t\n}\n\n.tc-manager-control {\n\tmargin: 0.5em 0;\n}\n\n.tc-manager-list {\n\twidth: 100%;\n\tborder-top: 1px solid <<colour muted-foreground>>;\n\tborder-left: 1px solid <<colour muted-foreground>>;\n\tborder-right: 1px solid <<colour muted-foreground>>;\n}\n\n.tc-manager-list-item {\n\n}\n\n.tc-manager-list-item-heading {\n display: block;\n width: 100%;\n text-align: left;\t\n\tborder-bottom: 1px solid <<colour muted-foreground>>;\n\tpadding: 3px;\n}\n\n.tc-manager-list-item-heading-selected {\n\tfont-weight: bold;\n\tcolor: <<colour background>>;\n\tfill: <<colour background>>;\n\tbackground-color: <<colour foreground>>;\n}\n\n.tc-manager-list-item-heading:hover {\n\tbackground: <<colour primary>>;\n\tcolor: <<colour background>>;\n}\n\n.tc-manager-list-item-content {\n\tdisplay: flex;\n}\n\n.tc-manager-list-item-content-sidebar {\n flex: 1 0;\n background: <<colour tiddler-editor-background>>;\n border-right: 0.5em solid <<colour muted-foreground>>;\n border-bottom: 0.5em solid <<colour muted-foreground>>;\n white-space: nowrap;\n}\n\n.tc-manager-list-item-content-item-heading {\n\tdisplay: block;\n\twidth: 100%;\n\ttext-align: left;\n background: <<colour muted-foreground>>;\n\ttext-transform: uppercase;\n\tfont-size: 0.6em;\n\tfont-weight: bold;\n padding: 0.5em 0 0.5em 0;\n}\n\n.tc-manager-list-item-content-item-body {\n\tpadding: 0 0.5em 0 0.5em;\n}\n\n.tc-manager-list-item-content-item-body > pre {\n\tmargin: 0.5em 0 0.5em 0;\n\tborder: none;\n\tbackground: inherit;\n}\n\n.tc-manager-list-item-content-tiddler {\n flex: 3 1;\n border-left: 0.5em solid <<colour muted-foreground>>;\n border-right: 0.5em solid <<colour muted-foreground>>;\n border-bottom: 0.5em solid <<colour muted-foreground>>;\n}\n\n.tc-manager-list-item-content-item-body > table {\n\tborder: none;\n\tpadding: 0;\n\tmargin: 0;\n}\n\n.tc-manager-list-item-content-item-body > table td {\n\tborder: none;\n}\n\n.tc-manager-icon-editor > button {\n\twidth: 100%;\n}\n\n.tc-manager-icon-editor > button > svg,\n.tc-manager-icon-editor > button > button {\n\twidth: 100%;\n\theight: auto;\n}\n\n/*\n** Import table\n*/\n\n.tc-import-table {\n\twidth: 100%;\n}\n\n.tc-import-table svg.tc-image-edit-button {\n\tmax-width: unset;\n}\n\n.tc-import-table th:first-of-type {\n\twidth: 10%;\n}\n\n.tc-import-table th:last-of-type {\n\twidth: 30%;\n}\n\n.tc-import-table .tc-row-disabled {\n\tbackground: <<colour very-muted-foreground>>10;\n\topacity: 0.8;\n}\n\n.tc-import-table .tc-row-warning {\n\tbackground: <<colour diff-delete-background>>50;\n}\n\n/*\n** Alerts\n*/\n\n.tc-alerts {\n\tposition: fixed;\n\ttop: 28px;\n\tleft: 0;\n\tright: 0;\n\tmax-width: 50%;\n\tz-index: 20000;\n}\n\n.tc-alert {\n\tposition: relative;\n\tmargin: 14px;\n\tpadding: 7px;\n\tborder: 1px solid <<colour alert-border>>;\n\tbackground-color: <<colour alert-background>>;\n}\n\n.tc-alert-toolbar {\n\tposition: absolute;\n\ttop: 7px;\n\tright: 7px;\n line-height: 0;\n}\n\n.tc-alert-toolbar svg {\n\tfill: <<colour alert-muted-foreground>>;\n}\n\n.tc-alert-subtitle {\n\tcolor: <<colour alert-muted-foreground>>;\n\tfont-weight: bold;\n font-size: 0.8em;\n margin-bottom: 0.5em;\n}\n\n.tc-alert-body > p {\n\tmargin: 0;\n}\n\n.tc-alert-highlight {\n\tcolor: <<colour alert-highlight>>;\n}\n\n@media (min-width: <<sidebarbreakpoint>>) {\n\n\t.tc-static-alert {\n\t\tposition: relative;\n\t}\n\n\t.tc-static-alert-inner {\n\t\tposition: absolute;\n\t\tz-index: 100;\n\t}\n\n}\n\n.tc-static-alert-inner {\n\tpadding: 0 2px 2px 42px;\n\tcolor: <<colour static-alert-foreground>>;\n}\n\n/*\n** Floating drafts list\n*/\n\n.tc-drafts-list {\n\tz-index: 2000;\n\tposition: fixed;\n\tfont-size: 0.8em;\n\tleft: 0;\n\tbottom: 0;\n}\n\n.tc-drafts-list a {\n\tmargin: 0 0.5em;\n\tpadding: 4px 4px;\n\tborder-top-left-radius: 4px;\n\tborder-top-right-radius: 4px;\n\tborder: 1px solid <<colour background>>;\n\tborder-bottom-none;\n\tbackground: <<colour dirty-indicator>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour background>>;\n}\n\n.tc-drafts-list a:hover {\n\ttext-decoration: none;\n\tbackground: <<colour foreground>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour background>>;\n}\n\n.tc-drafts-list a svg {\n\twidth: 1em;\n\theight: 1em;\n\tvertical-align: text-bottom;\n}\n\n/*\n** Control panel\n*/\n\n.tc-control-panel td {\n\tpadding: 4px;\n}\n\n.tc-control-panel table, .tc-control-panel table input, .tc-control-panel table textarea {\n\twidth: 100%;\n}\n\n.tc-plugin-info {\n\tdisplay: flex;\n\tborder: 1px solid <<colour muted-foreground>>;\n\tfill: <<colour muted-foreground>>;\n\tbackground-color: <<colour background>>;\n\tmargin: 0.5em 0 0.5em 0;\n\tpadding: 4px;\n align-items: center;\n}\n\n.tc-plugin-info-sub-plugins .tc-plugin-info {\n margin: 0.5em;\n\tbackground: <<colour background>>;\n}\n\n.tc-plugin-info-sub-plugin-indicator {\n\tmargin: -16px 1em 0 2em;\n}\n\n.tc-plugin-info-sub-plugin-indicator button {\n\tcolor: <<colour background>>;\n\tbackground: <<colour foreground>>;\n\tborder-radius: 8px;\n padding: 2px 7px;\n font-size: 0.75em;\n}\n\n.tc-plugin-info-sub-plugins .tc-plugin-info-dropdown {\n\tmargin-left: 1em;\n\tmargin-right: 1em;\n}\n\n.tc-plugin-info-disabled {\n\tbackground: -webkit-repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\n\tbackground: repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\n}\n\n.tc-plugin-info-disabled:hover {\n\tbackground: -webkit-repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\n\tbackground: repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\n}\n\na.tc-tiddlylink.tc-plugin-info:hover {\n\ttext-decoration: none;\n\tbackground-color: <<colour primary>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour foreground>>;\n}\n\na.tc-tiddlylink.tc-plugin-info:hover > .tc-plugin-info-chunk > svg {\n\tfill: <<colour background>>;\n}\n\n.tc-plugin-info-chunk {\n margin: 2px;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-toggle {\n\tflex-grow: 0;\n\tflex-shrink: 0;\n\tline-height: 1;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-icon {\n\tflex-grow: 0;\n\tflex-shrink: 0;\n\tline-height: 1;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-description {\n\tflex-grow: 1;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-buttons {\n\tfont-size: 0.8em;\n\tline-height: 1.2;\n\tflex-grow: 0;\n\tflex-shrink: 0;\n text-align: right;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-description h1 {\n\tfont-size: 1em;\n\tline-height: 1.2;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-description h2 {\n\tfont-size: 0.8em;\n\tline-height: 1.2;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-description div {\n\tfont-size: 0.7em;\n\tline-height: 1.2;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-toggle img, .tc-plugin-info-chunk.tc-plugin-info-toggle svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-icon img, .tc-plugin-info-chunk.tc-plugin-info-icon svg {\n\twidth: 2em;\n\theight: 2em;\n}\n\n.tc-plugin-info-dropdown {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour background>>;\n\tmargin-top: -8px;\n}\n\n.tc-plugin-info-dropdown-message {\n\tbackground: <<colour message-background>>;\n\tpadding: 0.5em 1em 0.5em 1em;\n\tfont-weight: bold;\n\tfont-size: 0.8em;\n}\n\n.tc-plugin-info-dropdown-body {\n\tpadding: 1em 1em 0 1em;\n\tbackground: <<colour background>>;\n}\n\n.tc-plugin-info-sub-plugins {\n\tpadding: 0.5em;\n margin: 0 1em 1em 1em;\n\tbackground: <<colour notification-background>>;\n}\n\n.tc-install-plugin {\n\tfont-weight: bold;\n\tbackground: green;\n\tcolor: white;\n\tfill: white;\n\tborder-radius: 4px;\n\tpadding: 3px;\n}\n\n.tc-install-plugin.tc-reinstall-downgrade {\n\tbackground: red;\n}\n\n.tc-install-plugin.tc-reinstall {\n\tbackground: blue;\n}\n\n.tc-install-plugin.tc-reinstall-upgrade {\n\tbackground: orange;\n}\n\n.tc-check-list {\n\tline-height: 2em;\n}\n\n.tc-check-list .tc-image-button {\n\theight: 1.5em;\n}\n\n/*\n** Message boxes\n*/\n\n.tc-message-box {\n\tborder: 1px solid <<colour message-border>>;\n\tbackground: <<colour message-background>>;\n\tpadding: 0px 21px 0px 21px;\n\tfont-size: 12px;\n\tline-height: 18px;\n\tcolor: <<colour message-foreground>>;\n}\n\n.tc-message-box svg {\n\twidth: 1em;\n\theight: 1em;\n vertical-align: text-bottom;\n}\n\n/*\n** Pictures\n*/\n\n.tc-bordered-image {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tpadding: 5px;\n\tmargin: 5px;\n}\n\n/*\n** Floats\n*/\n\n.tc-float-right {\n\tfloat: right;\n}\n\n/*\n** Chooser\n*/\n\n.tc-chooser {\n\tborder-right: 1px solid <<colour table-header-background>>;\n\tborder-left: 1px solid <<colour table-header-background>>;\n}\n\n\n.tc-chooser-item {\n\tborder-bottom: 1px solid <<colour table-header-background>>;\n\tborder-top: 1px solid <<colour table-header-background>>;\n\tpadding: 2px 4px 2px 14px;\n}\n\n.tc-drop-down .tc-chooser-item {\n\tpadding: 2px;\n}\n\n.tc-chosen,\n.tc-chooser-item:hover {\n\tbackground-color: <<colour table-header-background>>;\n\tborder-color: <<colour table-footer-background>>;\n}\n\n.tc-chosen .tc-tiddlylink {\n\tcursor:default;\n}\n\n.tc-chooser-item .tc-tiddlylink {\n\tdisplay: block;\n\ttext-decoration: none;\n\tbackground-color: transparent;\n}\n\n.tc-chooser-item:hover .tc-tiddlylink:hover {\n\ttext-decoration: none;\n}\n\n.tc-drop-down .tc-chosen .tc-tiddlylink,\n.tc-drop-down .tc-chooser-item .tc-tiddlylink:hover {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-chosen > .tc-tiddlylink:before {\n\tmargin-left: -10px;\n\tposition: relative;\n\tcontent: \"» \";\n}\n\n.tc-chooser-item svg,\n.tc-chooser-item img{\n\twidth: 1em;\n\theight: 1em;\n\tvertical-align: middle;\n}\n\n.tc-language-chooser .tc-image-button img {\n\twidth: 2em;\n\tvertical-align: -0.15em;\n}\n\n/*\n** Palette swatches\n*/\n\n.tc-swatches-horiz {\n}\n\n.tc-swatches-horiz .tc-swatch {\n\tdisplay: inline-block;\n}\n\n.tc-swatch {\n\twidth: 2em;\n\theight: 2em;\n\tmargin: 0.4em;\n\tborder: 1px solid #888;\n}\n\ninput.tc-palette-manager-colour-input {\n\twidth: 100%;\n\tpadding: 0;\n}\n\n/*\n** Table of contents\n*/\n\n.tc-sidebar-lists .tc-table-of-contents {\n\twhite-space: nowrap;\n}\n\n.tc-table-of-contents button {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.tc-table-of-contents svg {\n\twidth: 0.7em;\n\theight: 0.7em;\n\tvertical-align: middle;\n\tfill: <<colour sidebar-foreground>>;\n}\n\n.tc-table-of-contents ol {\n\tlist-style-type: none;\n\tpadding-left: 0;\n}\n\n.tc-table-of-contents ol ol {\n\tpadding-left: 1em;\n}\n\n.tc-table-of-contents li {\n\tfont-size: 1.0em;\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li a {\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li li {\n\tfont-size: 0.95em;\n\tfont-weight: normal;\n\tline-height: 1.4;\n}\n\n.tc-table-of-contents li li a {\n\tfont-weight: normal;\n}\n\n.tc-table-of-contents li li li {\n\tfont-size: 0.95em;\n\tfont-weight: 200;\n\tline-height: 1.5;\n}\n\n.tc-table-of-contents li li li li {\n\tfont-size: 0.95em;\n\tfont-weight: 200;\n}\n\n.tc-tabbed-table-of-contents {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents {\n\tz-index: 100;\n\tdisplay: inline-block;\n\tpadding-left: 1em;\n\tmax-width: 50%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n\tbackground: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a,\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\n\tdisplay: block;\n\tpadding: 0.12em 1em 0.12em 0.25em;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a {\n\tborder-top: 1px solid <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-background>>;\n\tborder-bottom: 1px solid <<colour tab-background>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a:hover {\n\ttext-decoration: none;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tbackground: <<colour tab-border>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tbackground: <<colour background>>;\n\tmargin-right: -1px;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a:hover {\n\ttext-decoration: none;\n}\n\n.tc-tabbed-table-of-contents .tc-tabbed-table-of-contents-content {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-left: 1.5em;\n\tpadding-right: 1.5em;\n\tborder: 1px solid <<colour tab-border>>;\n\t-webkit-flex: 1 0 50%;\n\tflex: 1 0 50%;\n}\n\n/*\n** Dirty indicator\n*/\n\nbody.tc-dirty span.tc-dirty-indicator, body.tc-dirty span.tc-dirty-indicator svg {\n\tfill: <<colour dirty-indicator>>;\n\tcolor: <<colour dirty-indicator>>;\n}\n\n/*\n** File inputs\n*/\n\n.tc-file-input-wrapper {\n\tposition: relative;\n\toverflow: hidden;\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n\n.tc-file-input-wrapper input[type=file] {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tfont-size: 999px;\n\tmax-width: 100%;\n\tmax-height: 100%;\n\tfilter: alpha(opacity=0);\n\topacity: 0;\n\toutline: none;\n\tbackground: white;\n\tcursor: pointer;\n\tdisplay: inline-block;\n}\n\n::-webkit-file-upload-button {\n\tcursor:pointer;\n}\n\n/*\n** Thumbnail macros\n*/\n\n.tc-thumbnail-wrapper {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin: 6px;\n\tvertical-align: top;\n}\n\n.tc-thumbnail-right-wrapper {\n\tfloat:right;\n\tmargin: 0.5em 0 0.5em 0.5em;\n}\n\n.tc-thumbnail-image {\n\ttext-align: center;\n\toverflow: hidden;\n\tborder-radius: 3px;\n}\n\n.tc-thumbnail-image svg,\n.tc-thumbnail-image img {\n\tfilter: alpha(opacity=1);\n\topacity: 1;\n\tmin-width: 100%;\n\tmin-height: 100%;\n\tmax-width: 100%;\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image svg,\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image img {\n\tfilter: alpha(opacity=0.8);\n\topacity: 0.8;\n}\n\n.tc-thumbnail-background {\n\tposition: absolute;\n\tborder-radius: 3px;\n}\n\n.tc-thumbnail-icon svg,\n.tc-thumbnail-icon img {\n\twidth: 3em;\n\theight: 3em;\n\t<<filter \"drop-shadow(2px 2px 4px rgba(0,0,0,0.3))\">>\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon svg,\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon img {\n\tfill: #fff;\n\t<<filter \"drop-shadow(3px 3px 4px rgba(0,0,0,0.6))\">>\n}\n\n.tc-thumbnail-icon {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tdisplay: -webkit-flex;\n\t-webkit-align-items: center;\n\t-webkit-justify-content: center;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.tc-thumbnail-caption {\n\tposition: absolute;\n\tbackground-color: #777;\n\tcolor: #fff;\n\ttext-align: center;\n\tbottom: 0;\n\twidth: 100%;\n\tfilter: alpha(opacity=0.9);\n\topacity: 0.9;\n\tline-height: 1.4;\n\tborder-bottom-left-radius: 3px;\n\tborder-bottom-right-radius: 3px;\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-caption {\n\tfilter: alpha(opacity=1);\n\topacity: 1;\n}\n\n/*\n** Diffs\n*/\n\n.tc-diff-equal {\n\tbackground-color: <<colour diff-equal-background>>;\n\tcolor: <<colour diff-equal-foreground>>;\n}\n\n.tc-diff-insert {\n\tbackground-color: <<colour diff-insert-background>>;\n\tcolor: <<colour diff-insert-foreground>>;\n}\n\n.tc-diff-delete {\n\tbackground-color: <<colour diff-delete-background>>;\n\tcolor: <<colour diff-delete-foreground>>;\n}\n\n.tc-diff-invisible {\n\tbackground-color: <<colour diff-invisible-background>>;\n\tcolor: <<colour diff-invisible-foreground>>;\n}\n\n.tc-diff-tiddlers th {\n\ttext-align: right;\n\tbackground: <<colour background>>;\n\tfont-weight: normal;\n\tfont-style: italic;\n}\n\n.tc-diff-tiddlers pre {\n margin: 0;\n padding: 0;\n border: none;\n background: none;\n}\n\n/*\n** Errors\n*/\n\n.tc-error {\n\tbackground: #f00;\n\tcolor: #fff;\n}\n\n/*\n** Tree macro\n*/\n\n.tc-tree div {\n \tpadding-left: 14px;\n}\n\n.tc-tree ol {\n \tlist-style-type: none;\n \tpadding-left: 0;\n \tmargin-top: 0;\n}\n\n.tc-tree ol ol {\n \tpadding-left: 1em; \n}\n\n.tc-tree button { \n \tcolor: #acacac;\n}\n\n.tc-tree svg {\n \tfill: #acacac;\n}\n\n.tc-tree span svg {\n \twidth: 1em;\n \theight: 1em;\n \tvertical-align: baseline;\n}\n\n.tc-tree li span {\n \tcolor: lightgray;\n}\n\nselect {\n color: <<colour select-tag-foreground>>;\n background: <<colour select-tag-background>>;\n}\n\n/*\n** Utility classes for SVG icons\n*/\n\n.tc-fill-background {\n\tfill: <<colour background>>;\n}\n\n/*\n** Flexbox utility classes\n*/\n\n.tc-flex {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-flex-column {\n\tflex-direction: column;\n}\n\n.tc-flex-row {\n\tflex-direction: row;\n}\n\n.tc-flex-grow-1 {\n\tflex-grow: 1;\n}\n\n.tc-flex-grow-2 {\n\tflex-grow: 2;\n}\n\n/*\n** Other utility classes\n*/\n\n.tc-small-gap {\n\tmargin-left: .5em;\n\tmargin-right: .5em;\n}\n\n.tc-small-gap-left {\n\tmargin-left: .5em;\n}\n\n.tc-small-gap-right {\n\tmargin-right: .5em;\n}\n\n.tc-big-gap {\n\tmargin-left: 1em;\n\tmargin-right: 1em;\n}\n\n.tc-big-gap-left {\n\tmargin-left: 1em;\n}\n\n.tc-big-gap-right {\n\tmargin-right: 1em;\n}\n\n.tc-word-break {\n\tword-break: break-all;\n}\n"
},
"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize",
"text": "15px"
},
"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/bodylineheight",
"text": "22px"
},
"$:/themes/tiddlywiki/vanilla/metrics/fontsize": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/fontsize",
"text": "14px"
},
"$:/themes/tiddlywiki/vanilla/metrics/lineheight": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/lineheight",
"text": "20px"
},
"$:/themes/tiddlywiki/vanilla/metrics/storyleft": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/storyleft",
"text": "0px"
},
"$:/themes/tiddlywiki/vanilla/metrics/storytop": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/storytop",
"text": "0px"
},
"$:/themes/tiddlywiki/vanilla/metrics/storyright": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/storyright",
"text": "770px"
},
"$:/themes/tiddlywiki/vanilla/metrics/storywidth": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/storywidth",
"text": "770px"
},
"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth",
"text": "686px"
},
"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint",
"text": "960px"
},
"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth",
"text": "350px"
},
"$:/themes/tiddlywiki/vanilla/options/stickytitles": {
"title": "$:/themes/tiddlywiki/vanilla/options/stickytitles",
"text": "no"
},
"$:/themes/tiddlywiki/vanilla/options/sidebarlayout": {
"title": "$:/themes/tiddlywiki/vanilla/options/sidebarlayout",
"text": "fixed-fluid"
},
"$:/themes/tiddlywiki/vanilla/options/codewrapping": {
"title": "$:/themes/tiddlywiki/vanilla/options/codewrapping",
"text": "pre-wrap"
},
"$:/themes/tiddlywiki/vanilla/reset": {
"title": "$:/themes/tiddlywiki/vanilla/reset",
"type": "text/plain",
"text": "/*! modern-normalize v1.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */\n\n/*\nDocument\n========\n*/\n\n/**\nUse a better box model (opinionated).\n*/\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n/**\nUse a more readable tab size (opinionated).\n*/\n\n:root {\n -moz-tab-size: 4;\n tab-size: 4;\n}\n\n/**\n1. Correct the line height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n*/\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/*\nSections\n========\n*/\n\n/**\nRemove the margin in all browsers.\n*/\n\nbody {\n margin: 0;\n}\n\n/**\nImprove consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\n*/\n\nbody {\n font-family:\n system-ui,\n -apple-system, /* Firefox supports this but not yet `system-ui` */\n 'Segoe UI',\n Roboto,\n Helvetica,\n Arial,\n sans-serif,\n 'Apple Color Emoji',\n 'Segoe UI Emoji';\n}\n\n/*\nGrouping content\n================\n*/\n\n/**\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n}\n\n/*\nText-level semantics\n====================\n*/\n\n/**\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr[title] {\n text-decoration: underline dotted;\n}\n\n/**\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\n2. Correct the odd 'em' font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family:\n ui-monospace,\n SFMono-Regular,\n Consolas,\n 'Liberation Mono',\n Menlo,\n monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/**\nPrevent 'sub' and 'sup' elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\nTabular data\n============\n*/\n\n/**\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n}\n\n/*\nForms\n=====\n*/\n\n/**\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\nRemove the inheritance of text transform in Edge and Firefox.\n1. Remove the inheritance of text transform in Firefox.\n*/\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\nCorrect the inability to style clickable types in iOS and Safari.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n -webkit-appearance: button;\n}\n\n/**\nRemove the inner border and padding in Firefox.\n*/\n\n::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\nRestore the focus styles unset by the previous rule.\n*/\n\n:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\nRemove the additional ':invalid' styles in Firefox.\nSee: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/**\nRemove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers.\n*/\n\nlegend {\n padding: 0;\n}\n\n/**\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to 'inherit' in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nInteractive\n===========\n*/\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n"
},
"$:/themes/tiddlywiki/vanilla/settings/fontfamily": {
"title": "$:/themes/tiddlywiki/vanilla/settings/fontfamily",
"text": "system-ui, -apple-system, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\""
},
"$:/themes/tiddlywiki/vanilla/settings/codefontfamily": {
"title": "$:/themes/tiddlywiki/vanilla/settings/codefontfamily",
"text": "\"SFMono-Regular\",Consolas,\"Liberation Mono\",Menlo,Courier,monospace"
},
"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment": {
"title": "$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment",
"text": "fixed"
},
"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize": {
"title": "$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize",
"text": "auto"
},
"$:/themes/tiddlywiki/vanilla/sticky": {
"title": "$:/themes/tiddlywiki/vanilla/sticky",
"text": "<$reveal state=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\" type=\"match\" text=\"yes\">\n``\n.tc-tiddler-title {\n\tposition: -webkit-sticky;\n\tposition: -moz-sticky;\n\tposition: -o-sticky;\n\tposition: -ms-sticky;\n\tposition: sticky;\n\ttop: 0px;\n\tbackground: ``<<colour tiddler-background>>``;\n\tz-index: 500;\n}\n\n``\n<$list filter=\"[range[100]]\">\n`.tc-story-river .tc-tiddler-frame:nth-child(100n+`<$text text=<<currentTiddler>>/>`) {\nz-index: `<$text text={{{ [[200]subtract<currentTiddler>] }}}/>`;\n}\n`\n</$list>\n</$reveal>\n"
}
}
}
A baby is God's opinion that the world should go on.
[optimism]
A belief in reincarnation would at least give us some slack; we would have many lifetimes to get it right.
Compare to [[D. T. Suzuki's take on it|The idea of transmigration has a certain appeal to the imaginative mind if one is not too critical or scientific...]]
It’s normally agreed that the question ‘How are you?’ doesn’t put you on your oath to give a full or honest answer. So when asked these days, I tend to say something cryptic like, ‘A bit early to say.’
Christopher Hitchens (who was diagnosed with terminal cancer) in his book //Mortality// - as [[covered in BrainPickings|https://www.brainpickings.org/2012/09/05/christopher-hitchens-mortality/]]
Could serve as an alternative answer to the same question: so far, so good.
A Black Belt is just a white belt that never gave up.
[perseverance] [fighting]
A Buddhist monk to a hot-dog seller: Make me one with everything.
A Buddhist nun went into a bookstore and bought a book for $7.
She gave the salesperson a $10 bill, and when he didn't give her any change, she asked,
"where is my change?".
The salesperson replied:
"Oh, I thought that change is from within."
from the book "One Buddha is not enough" by Thich Nhat Hanh
See also [[Change is inevitable....except from vending machines.]]
A bus station is where a bus stops. A train station is where a train stops. On my desk, I have a work station…
[workstation]
A cause may be inconvenient, but it's magnificent. It's like champagne or high heels, and one must be prepared to suffer for it.
:― from his book "A Comedy in Three Acts"
While stereotypes may be a bridge between statistics and stories, like bridges they are sometimes old, rickety, and unreliable. Statistical conclusions, unlike stereotypes, must undergo stringent tests. This point is usually dismissed as statistical nit-picking; after all, "everybody knows" whatever is being asserted.
I have a version of this bias myself: people who make frequent claims about what everybody knows are fools. But everybody knows this.^^1^^
[...]
Having offered a partial defense of stereotypes, I should mention that a common related stereotype of statisticians is that they are people who chose their profession because they couldn't stand the excitement of accounting.
----
^^1^^ But as [[Albert Einstein]] said:
> Everybody knows that some things are simply impossible until somebody who doesn’t know that makes them possible.
A computational process is indeed much like a sorcerer’s idea of a spirit. It cannot be seen or touched. It is not composed of matter at all. However, it is very real. It can perform intellectual work. It can answer questions. It can affect the world by disbursing money at a bank or by controlling a robot arm in a factory. The programs we use to conjure processes are like a sorcerer’s spells.
: — from the book //"Structure and Interpretation of Computer Programs"// (1984) by [[Harold Abelson]] and [[Gerald Sussman]]
A conservative is one who admires radicals centuries after they're dead.
Paraphrasing the actor Paul Linke (famous for the critically-acclaimed one-man play "Time Flies When You’re Alive") in [[an article in Argonaut News|https://argonautnews.com/finding-life-again/]]:
“A story is a living thing,” he says. “The more you tell it, the more refined it becomes. And if you’re fortunate enough to have enough times, enough chances to be in performance with it, you know it can get really beautifully refined simply by the act of doing it.”
“If you go to a river, you’ll see incredibly polished stones sitting in the river. The river keeps moving over [the stone], across it, continually shaping it and honing it, and I always felt like the story is the stone and the river is the act of telling it,” he says.
Or as [[G. K. Chesterton]] had observed (in //"The Napoleon of Notting Hill"//):
> Now, there is a law written in the darkest of the Books of Life, and it is this: If you look at a thing nine hundred and ninety-nine times, you are perfectly safe; if you look at it the thousandth time, you are in frightful danger of seeing it for the first time.
And [[Charles Caleb Colton]] ties knowledge and rivers differently:
> The study of mathematics, like the Nile, begins in minuteness but ends in magnificence.
A cynic is not merely one who reads bitter lessons from the past; he is one who is prematurely disappointed in the future.
A disciplined life is not a cold or rigid one. As the waves of sentiment wash up on the shore and then - unresponded to - wash away again, we find not flatness of feeling, but depth of emotion, the ocean that underlies the waves.
The frequent misconception that peacefulness is dullness, that detachment is heartlessness, that calm is lethargy, comes from a mind that equates agitation, excitement, and passion with pleasure. But beyond pleasure and displeasure, personal preference, titillation and taste, are the deep pools of live participation and energy.
A dying man needs to die as a sleepy man needs to sleep, and there comes a time when it is wrong as well as useless to resist.
A faith which cannot survive collision with the truth is not worth many regrets.
:: - Arthur C. Clarke in The Exploration of Space (1951)
A fanatic is one who can't change his mind and won't change the subject.
<<comparequote "G. K. Chesterton" "It is not bigotry to be certain we are right; but it is bigotry to be unable to imagine how we might possibly have gone wrong." "bigotry">>
see also [[fanaticism|Nothing is more dangerous than an idea, when it is the only idea we have.]]
Lately, the word “curate” seems to be used in an greater variety of contexts than ever before, in reference to everything from a exhibitions of prints by Old Masters to the contents of a concept store.
The risk, of course, is that the definition may expand beyond functional usability.
But I believe ‘curate’ finds ever-wider application because of ''a feature of modern life that is impossible to ignore: the incredible proliferation of ideas, information, images, disciplinary knowledge, and material products that we're all witnessing today. Such proliferation makes the activities of filtering, enabling, synthesizing, framing, and remembering more and more important as basic navigational tools for 21st century life.''
These are the tasks of the curator, who is no longer understood as simply the person who fills a space with objects but as the person who brings different cultural spheres into contact, invents new display features, and makes junctions that allow unexpected encounters and results.
[…]
To curate, in this sense, is to refuse static arrangements and permanent alignments and instead to enable conversations and relations. Generating these kinds of links is an essential part of what it means to curate, as is disseminating new knowledge, new thinking, and new artworks in a way that can seed future cross-disciplinary inspirations. But there is another case for curating as a vanguard activity for the 21st century.
[curiosity] [creativity]
(see also [[Information curators (and teachers?) are our curiosity sherpas, who lead us to things we didn’t know we were interested in until we, well, until we are.]])
''A Few Words On The Soul''
"""
We have a soul at times.
No one’s got it non-stop,
for keeps.
Day after day,
year after year
may pass without it.
Sometimes
it will settle for awhile
only in childhood’s fears and raptures.
Sometimes only in astonishment
that we are old.
It rarely lends a hand
in uphill tasks,
like moving furniture,
or lifting luggage,
or going miles in shoes that pinch.
It usually steps out
whenever meat needs chopping
or forms have to be filled.
For every thousand conversations
it participates in one,
if even that,
since it prefers silence.
Just when our body goes from ache to pain,
it slips off-duty.
It’s picky:
it doesn’t like seeing us in crowds,
our hustling for a dubious advantage
and creaky machinations make it sick.
Joy and sorrow
aren’t two different feelings for it.
It attends us
only when the two are joined.
We can count on it
when we’re sure of nothing
and curious about everything.
Among the material objects
it favors clocks with pendulums
and mirrors, which keep on working
even when no one is looking.
It won’t say where it comes from
or when it’s taking off again,
though it’s clearly expecting such questions.
We need it
but apparently
it needs us
for some reason too.
"""
(translated from the Polish by Stanislaw Baranczak and Clare Cavanagh)
[spirituality]
A fierce Zen master and a strict meditation schedule are not required for the production of catastrophes. Life will do it for us quite naturally. Any moment is a catastrophe, a total disaster, a fierce and bracing challenge, if we are awake to it. Any moment calls for forbearance.
Or as [[Epictetus]] wrote:
> [[The two powers which in my opinion constitute a wise man are those of bearing and forbearing.]]
A fixed idea is eventually (often?) broken.
(a [[torque|On torquing expressions into new meanings]] of [[Norman Fischer]]'s one-liner: one fixed idea broken (on [[his website|https://www.normanfischer.org/poems-all/a-sampler-of-poems]])
[change] [impermanence] [evolution]
A foolproof way of (avoiding) learning new vocabulary. A classroom scene:
"""
Teacher: Clarke, define resplendent. [dazzling, brilliant]
Clarke: I think it’s shining, sir.
Teacher: Pithy, Clarke, but adequate.
McCourt, give us a sentence with pithy.
McCourt: Clarke is pithy but adequate, sir.
Teacher: Adroit, McCourt. You have a mind for the priesthood, my boy, or politics. Think of that.
"""
: ― in [[his|Frank McCourt]] book //Angela's Ashes//
From the [[blog of Icarusfalling|http://icarus-falling.blogspot.com/2010/11/simplicity-and-self-ishness.html]]:
From the intellectual ecological systems expert, Simon Levin, who always provides such elegance and brevity in describing natural systems complexity. In //Fragile Dominion: Complexity and the Commons//, he provides a framework for sound practice by the eight commandments of sustainable stewardship of the natural commons.
They are, in summary, (with apologies for the brief paraphrasing):
"""
1. Reduce Uncertainty (expend effort on knowing what is present and how it contributes)
2. Expect Surprise (build flexible systems able to respond to what is not knowable)
3. Maintain Heterogeneity (diversity does enable resiliency in face of the fact of probability)
4. Sustain Modularity (compartmentalize connected functions to preserve parts in the whole)
5. Preserve Redundancy (be able to replace lost functions with spare ones)
6. Tighten Feedback Loops (makes costs and benefits more local to their impact sources)
7. Build Trust (demonstrable actions count, even if you are not to be held accountable)
8. Do Unto Others as You Would Have them Do Unto You (the universalism of respect)
"""
People like to believe that writers know exactly what they are doing and have their story under control, thought out, plotted from beginning to end. It makes sense of the whole strange enterprise of novel writing, makes it rational. Many academic critics believe this, so do many readers, so do some writers. But not all writers have this kind of control of their material, and I wouldn’t even want to have it.
There’s a difference between control and responsibility. Aesthetically and morally, I take full responsibility for what I write. If I didn’t, I wouldn’t feel free to let the material control itself to the extent I do. I’d have to manage it consciously and continuously, making everything happen as I planned it to happen. But I never wanted that kind of control. By “going where I have to go,” being willing to guess that there is such a place without knowing clearly how I am to get there, trusting to my story to take me there, I know I’ve gone farther than I could ever have gone if I’d fully known my goal and the way to it before I set out. I left room for luck and chance to come and aid me, room for my narrow plans and ideas to grow and include what I didn’t know when I set out.
What told me to do this—to leave room? I have no idea. Luck, chance. A kind of passive courage. A willingness to follow.
Follow what?
A dragon, maybe. A dragon flying on the wind.
It would be lovely if writing a story was like getting into a little boat that drifted off and took me to the promised land, or climbing on a dragon’s back and flying off to Selidor. But it’s only as a reader that I can do that. As a writer, to take full responsibility without claiming total control requires a lot of work, a lot of groping and testing, flexibility, caution, watchfulness. I have no chart to follow, so I have to be constantly alert. The boat needs steering. There have to be long conversations with the dragon I ride. But however watchful and aware I am, I know I can never be fully aware of the currents that carry the boat, of where the winds beneath the dragon’s wings are blowing.
A writer lives and works in the world she was born into, and no matter how firm her own purpose, or how seemingly far from the present day her subject, she and her work are subject to the changing winds and currents of that world.
: -- From [[Ursula K. Le Guin]]'s introduction to the Earthsea book series)
A good aphorism is too hard for the tooth of time and is not consumed by all millennia, although it serves every time for nourishment: thus it is the great paradox of literature, the intransitory amid the changing, the food that always remains esteemed, like salt, and never loses its savor.
A good hockey player plays where the puck is. A great hockey player plays where the puck is going to be.
A good listener is not only popular everywhere, but after a while s/he gets to know something.
See also what [[Dee Hock]] said about [[listening to silences|While you can learn much by listening carefully to what people say, a great deal more is revealed by what they do not say. Listen as carefully to silence as to sound.]].
A good point of view is worth many IQ points.
(compare to [[Loch Kelly]]'s: [[Rather than aiming for a room with a view, why not aim for a view with some room?]]).
(compare to [[Gaston Bachelard]]'s perspective (ha!): ''Time is noticed solely through instants; duration … is felt solely through instants. Duration is a dust cloud of instants or, better yet, a group of points organized more or less coherently by a phenomenon of perspective.'').
(compare to [[Terry Pratchett]]'s view (ha :) that [[Where people stand is perhaps not as important as which way they face.]])
(compare to [[David Hilbert]]'s [[view|Some people have got a mental horizon of radius zero and call it their point of view.]])
A great many people think they are thinking when they are merely rearranging their prejudices.
A priest advised Voltaire on his death bed to renounce the devil.
Replied Voltaire, "This is no time to make new enemies."
::-- Unix fortune
A key to great writing is to "never use semi-colons. What are they good for? What are you supposed to do with them? You're reading along, and then suddenly, there it is. What does it mean? All semi-colons do is suggest you've been to college."
(Compare to the [[humoristic "diatribe"|Ernest Hemingway would have died rather than have syntax. Or semicolons. I use a whole lot of half-assed semicolons; there was one of them just now; that was a semicolon after “semicolons,” and another one after “now."]] of [[Ursula K. Le Guin]] about (among other thing :) semicolons).
A knife is neither true nor false, but anyone impaled on its blade is in error.
: ― from [[his|René Daumal]] book "//Mount Analogue//"
[the orthogonality of knowledge] [types of truths] [human perspective] [anthropocentricity]
A [programming] language that doesn't affect the way you think about programming [or problem solving], is not worth knowing.
A Law of Computer Programming: Make it possible for programmers to write in English and you will find the programmers cannot write in English.
"""
A leader is best
When people barely know he exists
Of a good leader, who talks little,
When his work is done, his aim fulfilled,
They will say, “We did this ourselves.”
"""
:: ― Lao Tzu, Tao Te Ching
(Compare with [[Maria Montessori's take on teachers|The greatest sign of success for a teacher... is to be able to say, 'The children are now working as if I did not exist.']]).
If you want to make use of the wisdom of Buddhism, your main job is to see through this delusional race for happiness, give it up despite all the cultural incentives that seem to reward you for staying in it, and primarily locate yourself in your aliveness. Allow your experience to be exactly what it is at this time. That’s liberation. But not in a lifeless, joyless way. A liberated mind is permeated by a rather unspectacular yet powerful feeling. I call it the joy of being alive for no other reason than being alive.
: -- from [[his|Christian Dillo]] post titled [["Why I Write"|https://thedewdrop.org/2022/09/23/why-i-write-christian-dillo/]]
A lie can only thrive on truth; lies, heaped one upon another, lack substance.
: -- From his book “The Spinoza of Market Street.”
"""
Innocence?
In a sense.
In no sense!
Was that it?
Was that it?
Was that it?
That was it.
"""
----
It seems to get at it from an angle different (?) from [[Frost's|Robert Frost]], who said that [[It goes on|In three words I can sum up everything I've learned about life: It goes on.]]. (with the same word-count).
Ambition:
Ambition takes us toward that horizon, but not over it – that line will always recede before our controlling hands.
Ambition takes willpower and constant applications of energy to stay on a perceived bearing; but a serious vocational calling demands a constant attention to the unknown gravitational field that surrounds us and from which we recharge ourselves, as if breathing from the atmosphere of possibility itself. A life’s work is not a series of stepping-stones, onto which we calmly place our feet, but more like an ocean crossing where there is no path, only a heading, a direction, in conversation with the elements. Looking back, we see the wake we have left as only a brief glimmering trace on the waters.
A vocation always includes the specific, heartrending way we will fail at our attempt to live fully. A true vocation always metamorphoses both ambition and failure into compassion and understanding for others.
The authentic watermark running through the background of a life’s work is an arrival at generosity and, as a mark of that generosity, delight in the hopes of the young: and the giving away to them, not only of rewards that may have been earned but the reward in the secret itself, the core artistry that made the journey a journey.
Perhaps the greatest legacy we can leave from our work is not to instil ambition in others, though this may be the first way we describe its arrival in our life, but the passing on of a sense of sheer privilege, of having found a road, a way to follow, and then having been allowed to walk it, often with others, with all its difficulties and minor triumphs; the underlying primary gift of having been both a witness to and a full participant in the conversation.
: -- from [[his|David Whyte]] book //"Consolations -- The Solace, Nourishment, and Underlying Meaning of Everyday Words"//
[teaching]
VITA BREVIS
A lifetime
is more
than
sufficiently long
for people to get what there is of it
wrong.
"""
A little learning is a dangerous thing;
drink deep, or taste not the Pierian spring^^1^^:
there shallow draughts intoxicate the brain,
and drinking largely sobers us again.
"""
From [[phrases.org.uk|https://www.phrases.org.uk/meanings/a-little-knowledge-is-a-dangerous-thing.html]]:
[[Pope|Alexander Pope]]'s poem may have been inspired by a 1698 observation made by an anonymous author, signing himself 'A B' in the collection "The Mystery of Phanaticism":
> Twas well observed by my [[Lord Bacon|Francis Bacon]], That a little knowledge is apt to puff up, and make men giddy, but a greater share of it will set them right, and bring them to low and humble thoughts of themselves.
[humility] [knowledge]
----
^^1^^ In Greek mythology, the Pierian Spring of Macedonia was sacred to the Muses. It's considered the metaphorical source of knowledge of art and science.
Authoritarian, paralyzing, circular, occasionally elliptical stock phrases, also jocularly referred to as nuggets of wisdom, are a malignant plague, one of the very worst ever to ravage the earth.
We say to the confused, Know thyself, as if knowing yourself was not the fifth and most difficult of human arithmetical operations,
we say to the apathetic, Where there's a will, there's a way, as if the brute realities of the world did not amuse themselves each day by turning that phrase on its head,
we say to the indecisive, Begin at the beginning, as if beginning were the clearly visible point of a loosely wound thread and all we had to do was to keep pulling until we reached the other end, and as if, between the former and the latter, we had held in our hands a smooth, continuous thread with no knots to untie, no snarls to untangle, a complete impossibility in the life of a skein, or indeed, if we may be permitted one more stock phrase, in the skein of life.
: -- from [[his|Jose Saramago]] book //The Cave//
----
In the same chapter, on the same page, he also writes:
[We say] Let's begin at the beginning, as if all one needed to do was to sit down at the table and start ...
The beginning is never the clear, precise end of a thread, the beginning is a long, painfully slow process that requires time and patience in order to find out in which direction it is heading, a process that feels its way along the path ahead like a blind man, the beginning is just the beginning, what came before is nigh on worthless.
A loving person lives in a loving world. A hostile person lives in a hostile world. Everyone you meet is your mirror.
From [[Ballad of Orange and Grape|https://www.poetryfoundation.org/poems/57158/ballad-of-orange-and-grape]] By Muriel Rukeyser
"""
[...]
Frankfurters frankfurters sizzle on the steel
where the hot-dog-man leans –
nothing else on the counter
but the usual two machines,
the grape one, empty, and the orange one, empty,
I face him in between.
[...]
I watch the man as he stands and pours
in the familiar shape
bright purple in the one marked ORANGE
orange in the one marked GRAPE,
the grape drink in the machine marked ORANGE
and orange drink in the GRAPE.
Just the one word large and clear, unmistakeable, on each
machine.
I ask him : How can we go on reading
and make sense out of what we read? –
How can they write and believe what they're writing,
the young ones across the street,
while you go on pouring grape in ORANGE
and orange into the one marked GRAPE –?
(How are we going to believe what we read and we write
and we hear and we say and we do?)
He looks at the two machines and he smiles
and he shrugs and smiles and pours again.
It could be violence and nonviolence
it could be white and black women and men
it could be war and peace or any
binary system, love and hate, enemy, friend.
Yes and no, be and not-be, what we do and what we don't
do.
[...]
"""
As they ([[David Epstein|Foxes see complexity in what others mistake for simple cause and effect. They understand that most cause-and-effect relationships are probabilistic, not deterministic. There are unknowns and luck, and even when history apparently repeats, it does not do so precisely. They recognize that they are operating in the very definition of a wicked learning environment, where it can be very hard to learn, from either wins or losses.]] and [[Ludwig Wittgenstein|Experiences, thoughts, — life can force the concept of God on us.]], for example) say: life (sometimes :) is a [["wicked learning environment"|Experiences, thoughts, — life can force the concept of God on us.]].
A man with outward courage dares to die; a man with inner courage dares to live.
::― Lao Tzu, Tao Te Ching
A man's errors are his portals of discovery.
(see also [[Daniel Kahneman]]'s take on [[the value of errors|Correct performance tells you much less about the procedure than the errors do.]]).
This limerick/poem was written by [[John Saxon|https://en.wikipedia.org/wiki/John_Saxon_(educator)]] (an author of math textbooks).
<a href="./resources/mathy limerick.png" target="new"><img src="./resources/mathy limerick.png" width="85%" height="85%" /></a>^^1^^
"""
A Dozen, a Gross and a Score,
plus three times the square root of four,
divided by seven,
plus five times eleven,
equals nine squared and not a bit more.
"""
----
^^1^^ alternative forms:
Textually, algebraically:
((12 + 144 + 20 + (3 * 4^(1/2))) / 7) + (5 * 11) = 9^2 + 0
or [[LaTeX|https://latexeditor.lagrida.com/]]-ly speaking:
\frac{12 + 144 + 20 + (3 \cdot \sqrt[2]{4})}{7} + (5 \cdot 11) = 9^2 + 0
A mathematician is a device for converting coffee into theorems.
Paul Erdos was a notorious caffeine addict and, for the last 20 years of his life, an enthusiastic user of amphetamines. He attributed at least some of his productivity to the use of these drugs;
after giving them up for a month to win a bet, he complained that the only result was that mathematics had been set back by a month1
A mathematician, like a painter or poet, is a maker of patterns. If his patterns are more permanent than theirs, it is because they are made with ideas.
From //A Mathematician's Apology// (London 1941).
A mirror has no heart but plenty of ideas.
[[He|Malcolm de Chazal]] also said:
> Monkeys are superior to men in this: when a monkey looks into a mirror, he sees a monkey.
When I design a CS course, I try to start by presenting the "big picture of" and "what is possible with" the concepts and skills I am teaching right away. I find that it is a strong motivator for students since they get a "glimpse of the overall terrain", they get to (hopefully :) experience the 'Big Picture'", they get curious and/or excited about certain aspects that caught their attention, and they get a sense of direction and purpose (they "see where this is going" :).
I'm a big proponent of this approach, which I actually learned from the [["C Programming Language" book|https://en.wikipedia.org/wiki/The_C_Programming_Language]] by Kernighan and Ritchie (I know I'm revealing my age here :)
When I learned C from their book it blew my mind that the //Introduction// (!) chapter covered the "Big Picture" as a "Grand Tour" or a "Bird's-eye View", and highlighted the ENTIRE language. The authors describe their pedagogical approach on [ext[the first page of the book introduction|resources/C Programming - Kernighan and Ritchie-1.pdf]]^^1^^. When I read this, I definitely did not understand everything they said, but, boy, did I want to learn it all! :)
Anyway, this approach has its downsides (as the authors indicate in the book), but it had a big influence on me, both in terms of motivation to learn, and later a technique for teaching.
----
^^1^^ from Introductory chapter of the book:
> Let us begin with a quick introduction to C. Our aim is to show the essential elements of the language in real programs, but without getting bogged down in details, formal rules, and exceptions. At this point, we are not trying to be complete or even precise (save that the examples are meant to be correct). We want to get you as quickly as possible to the point where you can write useful programs...
> ... experienced programmers should be able to extrapolate from the material in this chapter to their own programming needs.
> Beginners should supplement it by writing small, similar programs of their own. Both groups can use it as a framework on which to hang the more detailed descriptions that begin in Chapter 2.
> The only way to learn a new programming language is by writing programs in it. The first program to write is the same for all languages:
>Print the words
>hello, world
A personal library should contain as much of what you do not know as your financial means, mortgage rates and the currently tight real-estate market allow you to put there.
You will accumulate more knowledge and more books as you grow older, and the growing number of unread books on the shelves will look at you menacingly. Indeed, the more you know, the larger the rows of unread books. Let us call this collection of unread books an //antilibrary//^^1^^.
<<comparequote "Kevin Mims" "The sight of a book you’ve read can remind you of the many things you’ve already learned. The sight of a book you haven’t read can remind you that there are many things you’ve yet to learn. And the sight of a partially read book can remind you that reading is an activity that you hope never to come to the end of." "collecting books">>
And as [[Jeanette Winterson]] reflects:
> [[Book collecting is an obsession, an occupation, a disease, an addiction, a fascination, an absurdity, a fate. It is not a hobby. Those who do it must do it. Those who do not do it, think of it as a cousin of stamp collecting, a sister of the trophy cabinet, bastard of a sound bank account and a weak mind.]]
(compare (and contrast :) to [[How to read fewer books: we want to read in order to learn to be content.]])
----
^^1^^ - [[Taleb|Nassim Taleb]] like/sees "anti-everything/everywhere". See [[antifragility|Curiosity is antifragile, like an addiction; magnified by attempts to satisfy it.]].
Interestingly, the Japanese have a word for the piling up of unread books: [[tsundoku|https://en.wikipedia.org/wiki/Tsundoku]], meaning a stack of books that you have purchased but not yet read.
From [[Kevin Mims]]'s [[article in the NYT|https://www.nytimes.com/2018/10/08/books/review/personal-libraries.html]] about libraries and books:
Jessica Stillman on the website of the magazine Inc. wrote an article titled [[“Why You Should Surround Yourself With More Books Than You’ll Ever Have Time to Read.”|https://www.inc.com/jessica-stillman/why-you-should-stop-feeling-bad-about-all-those-books-you-buy-dont-read.html]].
Stillman argued that a personal library too big to get through in a lifetime “isn’t a sign of failure or ignorance,” but rather “a badge of honor.”
"""
"""
(see also [[Arnold Bennett]]'s take on [[big libraries|I want to have lots of books on my shelves because I know they are good, because I know they would amuse me, because I like to look at them, and because one day I might have a caprice to read them.]]. And [[Nassim Taleb]]'s [[take on it|A personal library should contain as much of what you do not know as your financial means, mortgage rates and the currently tight real-estate market allow you to put there.]]).
(compare (and contrast :) to [[How to read fewer books: we want to read in order to learn to be content.]])
A photograph offers us a glimpse into the abyss of time.
[picture taking] [snapshot in time]
A physicist is just an atom’s way of looking at itself.
(Compare to [[Thomas Nagel]]'s expression of sentience:
>Each of our lives is a part of the lengthy process of the universe gradually waking up and becoming aware of itself.
)
(in the same vein of Paul Erdos's [[A mathematician is a device for converting coffee into theorems.]])
Or similar to what [[Peter Wang]] said [[about water|Man was created by water to carry itself uphill.]].
Or compare to [[Reversing Entropy]].
(or how to drive a spellchecker insane):
For example, in Year 1 that useless letter "c" would be dropped to be replased either by "k" or "s", and likewise "x" would no longer be part of the alphabet. The only kase in which "c" would be retained would be the "ch" formation, which will be dealt with later. Year 2 might reform "w" spelling, so that "which" and "one" would take the same konsonant, wile Year 3 might well abolish "y" replasing it with "i" and Iear 4 might fiks the "g/j" anomali wonse and for all. Jenerally, then, the improvement would kontinue iear bai iear with Iear 5 doing awai with useless double konsonants, and Iears 6-12 or so modifaiing vowlz and the rimeining voist and unvoist konsonants. Bai Iear 15 or sou, it wud fainali bi posibl tu meik ius ov thi ridandant letez "c", "y" and "x" -- bai now jast a memori in the maindz ov ould doderez -- tu riplais "ch", "sh", and "th" rispektivli. Fainali, xen, aafte sam 20 iers ov orxogrefkl riform, wi wud hev a lojikl, kohirnt speling in ius xrewawt xe Ingliy-spiking werld.
[[He|Mark Twain]] also had this sound advice:
> If you substitute //damn// every time you’re inclined to write //very// your editor will delete it and the writing will be just as it should be.
And also:
> I don’t give a damn for a man that can only spell a word one way.
A poem begins with a lump in the throat; a homesickness or a love sickness. It is a reaching-out toward expression; an effort to find fulfillment. A complete poem is one where an emotion has found its thought and the thought has found words.
A powerful way to teach is to find ideas and representations that allow “beginners to act as intermediates”, that is, for learners to immediately start doing the actual activity in some real form.
"""
[modeling]
"""
This echoes [[Ken Perlin]]'s sentiment about building/teaching/learning programming:
[[I already understood perfectly well, at the age of six, that what I was reading was exactly on the path to grown-up reading... Until we come up with a suitable redefinition of what programming is for, until we embrace the utility of programming as a way for serious grown-up people to go about doing the serious things they want to do, without asking those people to pretend to be interested in becoming mathematicians or engineers, this sort of pipeline simply cannot be built for universal programming literacy.]]
[simulation] [emulation]
From his book //Old School//, a piece printed in The New Yorker titled [[Class Picture|https://www.newyorker.com/magazine/2003/01/06/class-picture-2]] (local GD):
Robert Frost came to visit the school. He did a reading in the school chapel. At the end ...
Still looking at us, Frost recited [[“Stopping by Woods on a Snowy Evening.”|Stopping by Woods on a Snowy Evening]] Then he gathered his books and papers while we applauded. The headmaster went up the steps, conferred with Frost, came down again and raised his hand for silence. He told us that Mr. Frost had agreed to take a few questions, if we had any.
[...]
Sir, if I may.
I looked around. It was Mr. Ramsey, one of the masters.
[...]
Your work, sir, Mr. Ramsey said, follows a certain tradition, shall we say, a formal tradition, as in that last poem you read, “Stopping in Woods.” I wonder—
“Stopping by Woods on a Snowy Evening,” Frost said. He put both hands on the pulpit and peered at Mr. Ramsey.
Yes, sir. Now that particular poem is not unusual in your work for being written in stanza form, with iambic lines connected by rhyme.
Good for you, Frost said. They must be teaching you boys something here.
There was a great eruption of laughter, more caustic than jolly. Mr. Ramsey waited it out as Frost looked slyly around the chapel, the lord of misrule. He was not displeased by the havoc his mistake had caused, you could see that, and you had to wonder if it was a mistake at all. Finally he said, You had a question?
Yes, sir. The question is whether such a rigidly formal arrangement of language is adequate to express the modern consciousness.
Modern consciousness, Frost said. What’s that?
Ah! Good question, sir. Well—very roughly speaking, I would describe it as the mind’s response to industrialization, the saturation propaganda of governments and advertisers, two world wars, the concentration camp, the dimming of faith by science, and, of course, the constant threat of annihilation. Surely these things have had an effect on us. Surely they have changed our thinking.
Surely nothing, Frost said. He stared down at Mr. Ramsey. Don’t tell me about science, he went on. I’m something of a scientist myself. Botany. You boys know what tropism is? That’s what makes a plant grow toward the light. Everything aspires to the light. You don’t have to chase down a fly to get rid of it—you just darken the room and leave a crack of light in a window, and out he goes. Works every time. We all have that instinct . . . that aspiration. Science can’t—what was the word? dim?—science can’t dim that. All science can do is turn out the false lights in the room so the true light can get us home.
Mr. Ramsey began to say something, but Frost kept going. So don’t tell me about science, he said, and don’t tell me about war. I lost my nearest friend in the one they call the Great War. So did Achilles lose his friend in war, and Homer did no injustice to his grief by writing about it in dactylic hexameters. There’ve always been wars, and they’ve always been as foul as we could make them. It is very fine and pleasant to think ourselves the most put-upon folk in history, but then everyone has thought that from the beginning—it makes a grand excuse for all manner of laziness. But about my friend. I wrote a poem for him. I still write poems for him. Would you honor your own friend by putting words down anyhow, just as they come to you—no thought for the sound they make, the meaning of their sound, the sound of their meaning?
He broke off and let his eyes roam over the room.
I am thinking of Achilles’ grief, he said. That famous grief . . . that terrible grief. Let me tell you boys something. Such grief can only be told in form. Maybe it only really exists in form. Form is everything. Without it you’ve got nothing but a stubbed-toe sort of cry, sincere maybe, for what that’s worth, but with no depth or carry. No echo. You may have a grievance, but you don’t have grief, and grievances are for petitions, not poetry. Does that answer your question?
If I’ve learned nothing else, I’ve learned this: a question is a powerful thing, a mighty use of words. Questions elicit answers in their likeness. Answers mirror the questions they rise, or fall, to meet. So while a simple question can be precisely what’s needed to drive to the heart of the matter, it’s hard to meet a simplistic question with anything but a simplistic answer. It’s hard to transcend a combative question. But it’s hard to resist a generous question. We all have it in us to formulate questions that invite honesty, dignity, and revelation. There is something redemptive and life-giving about asking better questions.
[[She|Krista Tippet]] also said (in a conversation about [["The Art of Generous Listening"|https://www.youtube.com/watch?v=J5W36VWNd9E]] at Google):
> [[Questions elicit answers in their likeness... it's almost impossible to meet a simplistic question with anything but a simplistic answer... and it's almost impossible to resist a generous question.]]
"""
"""
(see also [[Susanne Langer]]'s insight into the [[power of questions|The way a question is asked limits and disposes the ways in which any answer to it — right or wrong — may be given.]]).
A saying related to death goes: You can't take it with you. That's true, but you can't take "you" with you either.
- David Darling in his book [[Soul Search: A Scientist Explores the Afterlife|https://www.kirkusreviews.com/book-reviews/david-darling/soul-search/]]
<<comparequote "Ian McEwan" "Those who believe in the afterlife will never be disappointed. That's because if they're wrong, they'll never know about it." "the afterlife">>
A sense of blessedness comes from a change of heart, not from more blessings.
<<comparequote "Soren Kierkegaard" "The function of prayer is not to influence God, but rather to change the nature of the one who prays." "prayer">>
A sense of economy is generally essential to both mathematics and humor, and one way to measure economy is by employing notions of complexity devised by [[Gregory Chaitin]] and others.
If two computer programs generate the same sequence of 0's and 1's, for example, the shorter one is generally to be preferred. This is a version of Occam’s razor, which advises us not to introduce unnecessary entities or complications into our accounts.
By the way, the analogue of an incompressibly short program might be a classic epigram that cannot be improved on. Aptly enough, the simple equations that generate the convoluted Mandelbrot fractal have been called the wittiest remarks ever made.
[...]
Considerations of economy or brevity also bring to mind those equations on IQ tests and Mensa Society problem lists in which are given three or four elements in a sequence and asked wich of several alternatives is the continuation of the sequence. Since any finite sequence can be continued in any way, every alternative is a continuation.
(The fourth term of the sequence 2, 4, 6.... might not be 8, for example, but 38, since it could be argued that the Nth term is [2N+ 5(N-1)(N-2)(N-3)] ^^1^^) What is required is that continuation which can be most concisely described. Because what constitutes an appropriate language for this description is not usually specified, the question doesn't always admit of a clear-cut answer.
[...]
The so-called Berry paradox directs: "Find the smallest whole number which requires in order to be specified more words than there are in this sentence.” Examples such as the number of hairs on my head, the number of different states of the Rubik cube, and the speed of light in millimeters per millennium, each specify, using fewer than the twenty words in the given sentence, some particular whole number. The paradox becomes apparent when we note that the sentence does specify a particular whole number which, by definition, contains too few words to specify.
: -- from his book [[Once Upon a Number|http://movies2.nytimes.com/books/99/04/25/reviews/990425.25alexant.html]]
[conciseness]
----
^^1^^ alternatively, the same sequence (2, 4, 6, ...) may be "interpreted" as the predictor or harbinger of a new millennium, since the generating equation can be constructed as [2N+ 332(N-1)(N-2)(N-3)], which generates: 2, 4, 6, 2000, ... ;)
A sense of humor, properly developed, is superior to any religion so far devised.
''A sepal, petal, and a thorn''
"""
A sepal, petal, and a thorn
Upon a common summer's morn –
A flask of Dew – A Bee or two –
A Breeze – a caper in the trees –
And I'm a Rose!
"""
From Willard Van Orman Quine's work [[On What There Is|https://en.wikisource.org/wiki/On_What_There_Is]]:
>A curious thing about the ontological problem is its simplicity. It can be put in three Anglo-Saxon monosyllables: "What is there?" It can be answered, moreover, in a word — "Everything" — and everyone will accept this answer as true. However, this is merely to say that there is what there is. There remains room for disagreement over cases; and so the issue has stayed alive down the centuries.
Compare this to Robert Frost's [[In three words I can sum up everything I've learned about life: It goes on.]]
A social scientist is someone who thinks that the plural of "anecdote" is "data".
Tolstoy once claimed that there are really only two stories, and we keep telling each of them over and over again: a stranger comes to town, and a hero goes on a quest. In higher education, we live those two stories continuously. Every semester, a new crop of strangers come to town. And every semester, we set a new group of heroes off on their respective quests.
A sturdy way to cope with dying is to think of yourself as a pedagogue, modeling dignity for those around you. Those who can't live, teach.
: -- about/from the book "//A Matter of Death and Life//" by [[Irvin Yalom]] and Marilyn Yalom
A totally nondenominational prayer:
Insofar as I may be heard by anything, which may or may not care what I say, I ask, if it matters, that I be forgiven for anything I may have done or failed to do which requires forgiveness.
Conversely, if not forgiveness but something else may be required to insure any possible benefit for which I may be eligible after the destruction of my body, I ask that this, whatever it may be, be granted or withheld, as the case may be, in such a manner as to insure said benefit.
I ask this in my capacity as your elected intermediary between yourself and that which may not be yourself, but which may have an interest in the matter of your receiving as much as it is possible for you to receive of this thing, and which may in some way be influenced by this ceremony.
Amen.
: -- From the book //Creatures of Light and Darkness//
When people say that poetry is a luxury, or an option, or for the educated middle classes, or that it shouldn’t be read at school because it is irrelevant, or any of the strange stupid things that are said about poetry and its place in our lives, I suspect that the people doing the saying have had things pretty easy. A tough life needs a tough language – and that is what poetry is. That is what literature offers – a language powerful enough to say how it is.
It isn’t a hiding place. It is a finding place.
: ― from [[her|Jeanette Winterson]] book //Why Be Happy When You Could Be Normal?//
A typo is an error in typing something.
A thinko is an error in programming the logically correct thing (as opposed to and error in typing the grammatically/syntactically correct thing).
Example of thinko:
:: you programmed assuming an integer is being used/handled, but in actuality the data type is a string (or float, etc.)
A very important fact about mental and social processes is that people are not governed by their ideas or concepts. Even in mathematics, that most cerebral of all subjects, it is people who govern ideas not ideas which control people.
The reason for this is simple. Ideas grow by having something actively added to them. They are constructed and manufactured in order that they may be extended. These extensions of meaning and use do not preexist. The future uses and expanded meanings of concepts, their entailments, are not present inside them in embryo. Closer examination, reflection or analysis, cannot reveal the right or wrong way to use a concept in a new situation.
[[One|Haggai Mark]] can give a couple of examples:
* some quadratic equations yield complex (numbers of the form a + ib) solutions. Before complex numbers were formalized, thus extending math, no amount of "close examination" would have "revealed" them.
* In Bloor's text he gives an example of Euler's formula for the relationship between Vertices, Edges, and Faces of polyhedra (V- E + F = 2). This formula held true for many polyhedra, and despite Cauchy's ingenious idea for a "proof" (more like a thought experiment), new kinds of polyhedra (e.g., with cavities inside of them) were introduced, and thus became counter examples breaking Euler's formula. Here again, the new polyhedra were not to be found in embryonic form in Euler's polyhedra.
[[Discworld|https://discworld.fandom.com/wiki/Discworld]] light is old, slow and heavy; it roared across the landscape like a cavalry charge. The occasional valley slowed it for a moment and here and there, a mountain range banked it up until it poured over the top and down the far slope.
It moved across a sea, surged up the beach and accelerated over the plains, driven by the lash of the sun.
[imagination]
A well-written program is its own heaven; a poorly-written program is its own hell.
- from [[The Tao of Programming|http://canonical.org/~kragen/tao-of-programming.html]]
A wicked problem is a social or cultural problem that is difficult or impossible to solve for as many as four reasons: incomplete or contradictory knowledge, the number of people and opinions involved, the large economic burden, and the interconnected nature of these problems with other problems.
: -- from a post titled [["Wicked Problems - Problems Worth Solving"|https://www.wickedproblems.com/1_wicked_problems.php]] by [[Jon Kolko|https://www.jonkolko.com/bio.php]]
[rational thinking] [empathy] [design thinking]
A wise man speaks because he has something to say; a fool because he has to say something.
A wise teacher [or any person] learns to be a good listener. Listening does not imply agreement, nor does it require a response.
: — from her The Tao of Teaching
[[Ken Wilber]] tells the following Zen Koan:
A Zen Master was asked by a student what happens when we die.
The Zen Master says, "I don't know." And the student says, "But you're a Zen Master."
And the Master responds, "Yes, but not a dead one."
And then [[Wilber|Ken Wilber]] chuckles and adds:
I'm not a Zen Master, but I can relate to that. (as do we all :)
<<list-links "[tag{!!title}]">>
About aging:
>It’s a good time for spiritual inquiry, for retreats, for study. When you can’t run around outside as much as you used to, you can journey inward.
About questioning things...
In [[his|]] book //Shades of Grey// there is a scene where Eddie (the compliant "Red" protagonist/narrator, talks with Jane (the non-conformist "Grey"):
Jane: Why do I have to submit myself to any of the Rules?”
Eddie: “Because Something Happened.”
Jane: “What?”
There was no clear or easy answer to this.
Eddie: “Something . . . best forgotten. You may hate living under Munsell (the Great Leader), but it has sustained for almost five centuries. Besides, your wholly demeritable thoughts and conduct place you firmly in the minority.”
She leaned closer. “You say that, but am I really in the minority?”
I opened my mouth to answer, but couldn’t.
Since visiting the library I had pondered upon the usually unassailable wisdom of the Leapbacks. What was in The Little Engine That Could that might cause a damaging rift in society? What was so wrong with the telephone that it had to be withdrawn? Why was Mr. Simply Red no longer listened to? Why no more crinkle-cut chips, bicycles, kites, zips, yo-yos, banjos and marzipan?
But I had paused, and that was enough for her.
“I don’t need you to agree with me,” she said quietly. “I’ll go away happy with a little bit of doubt. Doubt is good. It’s an emotion we can build on. Perhaps if we feed it with curiosity it will blossom into something useful, like suspicion—and action.”
About time:
[I try to be] free-handed but careful. I cannot boast that I waste nothing, but I can at least tell you what I am wasting, and the cause and manner of the loss; I can give you the reasons why I am a poor man… I do not regard a man as poor, if the little which remains is enough for him.
Above all, historians should make us understand the ways in which the past was distinct. This shouldn’t prevent us from making moral judgments about it. But we can make better judgments, informed by the knowledge that our forebears rarely acted with the benefit (or burden) of our assumptions, expectations, experiences and values. There’s a lesson in humility in that, as well as a reminder that we are only actors in time whose most cherished ideas may eventually seem strange, and sometimes abhorrent, to our descendants^^1^^.
: -- From [[his|Bret Stephens]] book review titled [["This Is the Other Way That History Ends"|https://www.nytimes.com/2022/08/30/opinion/history-sweet-aha-academia.html]]
----
^^1^^ This is echoed in [[Matt Haig]]'s list of [[Very Human(istic) Advice]]:
> Be curious. Question everything. A present fact is just a future fiction.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Academic politics are so vicious precisely because the stakes are so small.
attributed, [[among others|https://quoteinvestigator.com/2013/08/18/acad-politics/]], to Henry Kissinger
compare to Mitch Daniels' (president of Purdue University) saying:
>In politics it's dog-eat-dog, but in academia it's just the opposite.
Accept certain inalienable truths: Prices will rise. Politicians will philander. You, too, will get old. And when you do, you'll fantasize that when you were young, prices were reasonable, politicians were noble and children respected their elders.
Respect your elders.
: -- from [[her commencement speech|http://scripting.com/specials/commencement.html]], which erroneously was attributed to [[Kurt Vonnegut]].
Accept! For there is nothing else.
<<list-links "[tag{!!title}]">>
There is no contradiction between acceptance and hope. In fact, ''acceptance and hope are connected. Acceptance is not resignation. Acceptance is a lively engagement with conditions as they are.''
There’s the kind of hope built on acceptance, with some uplifted spirit, of conditions as they are. Acceptance strengthens this kind of hope. You still do everything you can. You hope and pray for a good outcome. If you do this with the awareness and acceptance of suffering, you strengthen your ability to face with love whatever happens next.
: -- from [[his|Norman Fischer]] book "//When You Greet Me I Bow//"
Acquiring knowledge for its own sake. Gaining wisdom for the love of knowledge:
[[Mishneh Torah, Repentance 10.5|https://www.sefaria.org/Mishneh_Torah%2C_Repentance.10.5?ven=Mishnah_Torah,_Yod_ha-hazakah,_trans._by_Simon_Glazer,_1927&vhe=Torat_Emet_363&lang=bi&with=all&lang2=en]]:
כָּל הָעוֹסֵק בַּתּוֹרָה כְּדֵי לְקַבֵּל שָׂכָר אוֹ כְּדֵי שֶׁלֹּא תַּגִּיעַ עָלָיו פֻּרְעָנוּת הֲרֵי זֶה עוֹסֵק שֶׁלֹּא לִשְׁמָהּ. וְכָל הָעוֹסֵק בָּהּ לֹא לְיִרְאָה וְלֹא לְקַבֵּל שָׂכָר אֶלָּא מִפְּנֵי אַהֲבַת אֲדוֹן כָּל הָאָרֶץ שֶׁצִּוָּה בָּהּ הֲרֵי זֶה עוֹסֵק בָּהּ לִשְׁמָהּ. וְאָמְרוּ חֲכָמִים לְעוֹלָם יַעֲסֹק אָדָם בַּתּוֹרָה וַאֲפִלּוּ שֶׁלֹּא לִשְׁמָהּ שֶׁמִּתּוֹךְ שֶׁלֹּא לִשְׁמָהּ בָּא לִשְׁמָהּ. לְפִיכָךְ כְּשֶׁמְּלַמְּדִין אֶת הַקְּטַנִּים וְאֶת הַנָּשִׁים וּכְלַל עַמֵּי הָאָרֶץ אֵין מְלַמְּדִין אוֹתָן אֶלָּא לַעֲבֹד מִיִּרְאָה וּכְדֵי לְקַבֵּל שָׂכָר, עַד שֶׁתִּרְבֶּה דַּעְתָּן וְיִתְחַכְּמוּ חָכְמָה יְתֵרָה מְגַלִּים לָהֶם רָז זֶה מְעַט מְעַט וּמַרְגִּילִין אוֹתָן לְעִנְיָן זֶה בְּנַחַת עַד שֶׁיַּשִּׂיגוּהוּ וְיֵדְעוּהוּ וְיַעַבְדוּהוּ מֵאַהֲבָה:
He who engages himself in the study of the Torah in order to receive a reward, or in order to prevent himself from being overtaken by punishment, is one who studies the Torah not for its own sake. But he who studies it neither because of fear nor because of reward, but because of love for the Lord of the whole earth Who commanded concerning it, is one who studies it for its own sake. Therefore when instructions are given to infants, to women and the ignorant in general, they should not be instructed save to worship because of fear, until their knowledge will increase, and they will became wise in wisdom, when this secret is revealed to them little by little, and get them acquainted with this subject slowly, until they will attain and know it, when they will serve Him because of Love.
(she mitoch shelo lishma ba lishma - שֶׁמִּתּוֹךְ שֶׁלֹּא לִשְׁמָהּ בָּא לִשְׁמָהּ)
And the more you know, the more you love:
[[Mishneh Torah, Repentance 10.6|https://www.sefaria.org/Mishneh_Torah%2C_Repentance.10.6?ven=Mishnah_Torah,_Yod_ha-hazakah,_trans._by_Simon_Glazer,_1927&vhe=Torat_Emet_363&lang=bi&with=all&lang2=en]]:
דָּבָר יָדוּעַ וּבָרוּר שֶׁאֵין אַהֲבַת הַקָּדוֹשׁ בָּרוּךְ הוּא נִקְשֶׁרֶת בְּלִבּוֹ שֶׁל אָדָם עַד שֶׁיִּשְׁגֶּה בָּהּ תָּמִיד כָּרָאוּי וְיַעֲזֹב כָּל מַה שֶּׁבָּעוֹלָם חוּץ מִמֶּנָּה. כְּמוֹ שֶׁצִּוָּה וְאָמַר בְּכָל לְבָבְךָ וּבְכָל נַפְשְׁךָ. אֵינוֹ אוֹהֵב הַקָּדוֹשׁ בָּרוּךְ הוּא אֶלָּא בְּדַעַת שֶׁיְּדָעֵהוּ. וְעַל פִּי הַדֵּעָה תִּהְיֶה הָאַהֲבָה אִם מְעַט מְעַט וְאִם הַרְבֵּה הַרְבֵּה. לְפִיכָךְ צָרִיךְ הָאָדָם לְיַחֵד עַצְמוֹ לְהָבִין וּלְהַשְׂכִּיל בְּחָכְמוֹת וּתְבוּנוֹת הַמּוֹדִיעִים לוֹ אֶת קוֹנוֹ כְּפִי כֹּחַ שֶׁיֵּשׁ בָּאָדָם לְהָבִין וּלְהַשִּׂיג כְּמוֹ שֶׁבֵּאַרְנוּ בְּהִלְכוֹת יְסוֹדֵי הַתּוֹרָה:
It is a known and clear matter that the love for the Holy One, blessed is He! does not become tied up within the heart of man unless he will constantly feel its proper tremor, and abandon everything in the world save that alone, even as He commanded: "With all thine heart and with all thine soul" (Ibid. 6.5). No one loves the Holy One, blessed is He! save by the measure of knowledge that he knows Him. According to that knowledge will that love be; if it be small, the love will be small; if it be abundant, the love will be abundant. It is, therefore, necessary for man to dedicate himself to understand and acquire intelligence in the sciences and reasonings which make known to him his Owner, in the measure of power that man possesses to understand and attain it, as we have elucidated it in the treatise concerning the Foundations of the Torah.
Actions do not always bring happiness, but there is no happiness without action.
(compare to [[Nathaniel Hawthorne]]'s [[take on happiness|Happiness is a butterfly, which, when pursued, is always just beyond your grasp, but which, if you will sit down quietly, may alight upon you.]]).
Active critics are a great asset. Without the slightest expenditure of time or effort, we have our weakness and error made apparent and alternatives proposed. We need only listen carefully, dismiss that which arises from ignorance, ignore that which arises from envy or malice, and embrace that which has merit.
[[Carl Sagan]] captures this with elegant simplicity:
>Valid criticism does you a favor.
Or as [[Thomas Aquinas]] had said:
> We must love them both, those whose opinions we share and those whose opinions we reject, for both have labored in the search for truth, and both have helped us in finding it.
See also what [[Dee Hock]] said about [[listening to silences|While you can learn much by listening carefully to what people say, a great deal more is revealed by what they do not say. Listen as carefully to silence as to sound.]].
<<comparequote "G. K. Chesterton" "The reformer is always right about what is wrong. He is generally wrong about what is right." "reformers or critics">>
"""
Acts of injustice done
Between the setting and the rising sun
In history lie like bones, each one.
"""
the brother of Alice Gopnik (psychologist, professor)
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Adam Smith (baptized 16 June 1723 – died 17 July 1790) was a Scottish social philosopher and a pioneer of political economy. One of the key figures of the Scottish Enlightenment, Smith is the author of The Theory of Moral Sentiments and An Inquiry into the Nature and Causes of the Wealth of Nations. The latter, usually abbreviated as The Wealth of Nations, is considered his magnum opus and the first modern work of economics. It earned him an enormous reputation and would become one of the most influential works on economics ever published. Smith is widely cited as the father of modern economics and capitalism.
<<list-links "[tag{!!title}]">>
Addictions [...] started out like magical pets, pocket monsters. They did extraordinary tricks, showed you things you hadn't seen, were fun. But came, through some gradual dire alchemy, to make decisions for you. Eventually, they were making your most crucial life-decisions. And they were [...] less intelligent than goldfish.
: ― in //Zero History//
(compare to what [[Edward Rowland Sill]] had to say about [[drinking|First the man takes a drink, Then the drink takes a drink, Then the drink takes the man!]])
Professor of Mechanical Engineering at Duke University, in 1996 stated the constructal law:
“For a finite-size system to persist in time (to live), it must evolve in such a way that it provides easier access to the imposed currents that flow through it.”
<<list-links "[tag{!!title}]">>
From his blog at [[https://wronghands1.com/2013/01/02/abook/]]
<a href="./resources/aBook.png" target="new"><img src="./resources/aBook.png" width="85%" height="85%" /></a>
Other advantages:
* Not likely to be stolen from your car.
* Can be used on airplanes even on takeoff and landing.
… what will they think of next?
"""
"""
on the other hand:
<a href="./resources/eReader enhancements.png" target="new"><img src="./resources/eReader enhancements.png" width="85%" height="85%" /></a>
and
<a href="./resources/eBookmark.png" target="new"><img src="./resources/eBookmark.png" width="85%" height="85%" /></a>
Adventure is something you seek for pleasure, or even for profit, like a gold rush or invading a country;...but experience is what really happens to you in the long run; the truth [and reflection on it] that finally overtakes [and transforms] you.
It is far better to render Beings in your care competent than to protect them.
: -- Jordan Peterson in his book //12 Rules for Life - The antidote to Chaos//
From [[his|Ed Yong]] [[Advice page|https://edyong.me/new-page]]:
In 2020, the National Press Club Journalism Institute asked [[Ed Yong]] to offer some advice to young journalists starting out in the field. Here’s what he wrote.
He opens by saying: Above all else, work to the highest possible standard, always.
And then makes the following points. I found all (!) of them relevant to computer programming (writing code) with almost no exception (except for a few "tweaks" :), as the advice is presented side-by-side: ([[Ed Yong]]'s) Journalism advice on the left, and ([[Haggai Mark]]'s) Computer Science equivalents/adaptations on the right:
<html>
<table>
<tr>
<td width="50%">
<pre>
~ ''Be professional'': File your copy on time, to word count.
~ ''Park downhill'' at the end of the day, leaving a sentence, a piece, or paragraph unfinished so you don’t wake to an empty screen.
~ ''Cherish good editors'': Don’t be precious about your words, and find the people who make your words better.
~ ''Actively deconstruct the work of good journalists'' in an attempt to decipher and reverse-engineer what makes their writing sing.
~ ''Pay attention to structure'', and learn how to report well; remember that most writing problems are actually structuring problems, and most structuring problems are actually reporting problems.
~ ''Embrace nuance, and convey uncertainty.'' Ignore easy answers in search for deeper truths, but don’t fall prey to cheap contrarianism.
~ Recognize that you will often know relatively little about what you’re writing about, so ''be humble'', and learn interview techniques that will delineate, probe, and stretch the limits of your own knowledge.
~ ''Be accurate and nuanced'', but know when to let a piece go and move on to the next thing.
~ Note that ''it is better to be right than to be first'', but it’s nice to be both.
~ ''Remember that you’re not writing to impress your sources or other journalists''; you’re writing to help your readers make sense of the world. Take that responsibility seriously; view journalism as a profession and a craft whose standards you must uphold.
~ ''Prize thoughtfulness'' over salaciousness, depth over volume, light over heat. When you make mistakes, correct them quickly and transparently.
~ Remember that women exist, that minorities exist, that disabled and queer and trans people exist; interview them, ''tell their stories'', and don’t do what the majority of journalists do which is to disproportionately give voice to loud white men.
~ ''Judge your peers for the quality of their work'', rather than judging their work based on who they are; aim to be judged according to the same standard.
~ ''Give your loyalty to people and not to institutions''; the former probably care about you and the latter probably do not.
~ ''Be extremely mindful about how you use social media'', reaping in all its benefits as a reporting tool while skirting around its pitfalls as an emotional void.
~ ''Be cautious about all the advice you receive'', including this, recognizing that everyone is speaking to you from some combination of luck and privilege.
~ ''Recognize your own luck and privilege'', and work to uplift others around you.
~ ''Accrue social capital so you can spend it on people''.
~ ''Be bold. Be fearless. Be kind. Be kind to yourself''.
</pre>
</td>
<td>
<pre>
~ ''Be professional'': submit your code on time, to spec.
~ ''Park downhill'' at the end of the day, leaving a bit of "unpolished", "rough", or "unoptimized"^^1^^ code so you don’t wake to an empty screen.
~ ''Cherish good co-developers'': Don’t be protective of your code, and find the people who make your programs better.
~ ''Actively deconstruct the work of good coders'' in an attempt to decipher and reverse-engineer what makes their code elegant^^1^^.
~ ''Pay attention to structure'', and learn how to [[abstract|http://worrydream.com/LadderOfAbstraction/]] well; remember that most coding problems are actually abstraction problems, and most structuring problems are actually abstraction problems.
~ ''Embrace nuance'', and aspire for generality. Solve the easy cases, BUT don't ignore complexity, and don’t fall prey to quick hacks (AKA [[kludges|https://en.wikipedia.org/wiki/Kludge]]).
~ Recognize that you will often (initially) know relatively little about the problems you are trying to solve and their complex context, so ''be humble'', and learn techniques that will delineate, probe, and stretch the limits of your own knowledge.
~ ''Be accurate and nuanced'', but know when to let "good enough code"^^2^^ be, and move on to the next thing.
~ Note that ''it is better to be right than to be first''^^2^^, but it’s nice to be both.
~ Remember that you’re not coding to impress your boss or other coders; you’re writing to solve problems in the real world and make people's lives better in some way. Take that responsibility seriously; ''view [[coding as a profession and a craft|https://en.wikipedia.org/wiki/Software_craftsmanship]] whose standards you must uphold''.
~ ''Prize thoughtfulness'' over bravado (or bro-vado^^3^^ :), depth over volume (LoC^^4^^), clarity over sophistication. When you make mistakes, correct them quickly and transparently.
~ Remember that women exist, that minorities exist, that disabled and queer and trans people exist; if applicable reflect their umwelt in your programs/solutions, and ''treat all humans fairly'' in your program designs and coding.
~ ''Judge your peers for the quality of their work'', rather than judging their work based on who they are; aim to be judged according to the same standard.
~ ''Give your loyalty to people and not to institutions''; the former probably care about you and the latter probably do not.
~ Be extremely mindful about how you use ''social media, reaping in all its benefits as a learning tool'' while skirting around its pitfalls as an emotional void.
~ ''Be cautious about all the advice you receive'', including this, recognizing that everyone is speaking to you from some combination of luck and privilege (and possibly, agenda).
~ ''Recognize your own luck and privilege'', and work to uplift others around you.
~ ''Accrue social capital so you can spend it on people''.
~ ''Be bold. Be fearless. Be kind''. Be kind to yourself.
</pre>
</td>
</tr>
</table>
</html>
----
^^1^^ Elegant code should be clean, concise and easy to understand. It’s not about showing how clever you are or how complicated you can make your code, it’s about finding the simplest and clearest way possible of making your idea work. As the famous writer [[Antoine de Saint-Exupery]] said, "perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away."
^^2^^ see [Make It Work; Make It Right; Make It Fast[|https://wiki.c2.com/?MakeItWorkMakeItRightMakeItFast]], and also as Kernighan and Plauger wrote:
> Make it right before you make it fast. Make it clear before you make it faster. Keep it right when you make it faster.
^^3^^ see [[brogrammer culture|https://en.wikipedia.org/wiki/Brogrammer]]
^^4^^ LoC = Lines of Code (see [[Measuring program and programmer effectiveness by lines of code is like measuring aircraft effectiveness by weight.]]
"""
Is it starting to rain?
Did the check bounce?
Are we out of coffee?
Is this going to hurt?
Could you lose your job?
Did the glass break?
Was the baggage misrouted?
Will this go on my record?
Are you missing much money?
Was anyone injured?
Is the traffic heavy?
Do I have to remove my clothes?
Will it leave a scar?
Must you go?
Will this be in the papers?
Is my time up already?
Are we seeing the understudy?
Will it affect my eyesight?
Did all the books burn?
Are you still smoking?
Is the bone broken?
Will I have to put him to sleep?
Was the car totaled?
Am I responsible for these charges?
Are you contagious?
Will we have to wait long?
Is the runway icy?
Was the gun loaded?
Could this cause side effects?
Do you know who betrayed you?
Is the wound infected?
Are we lost?
Can it get any worse?
"""
Afraid So...
[After you set a goal for yourself], you will spend every moment until you reach the goal—if you reach it at all—feeling as if you were short of your goal. In other words, goal-oriented people exist in a state of nearly continuous failure that they hope will be temporary. That feeling wears on you. In time, it becomes heavy and uncomfortable. It might even drive you out of the game…
[[Patrick O’Shaughnessy|http://investorfieldguide.com/about/]] quoting Scott Adams in his blogpost titled [["Growth without goals"|http://investorfieldguide.com/growth-without-goals/]].
''Age''
"""
As some people age
they kinden.
The apertures
of their eyes widen.
I do not think they weaken;
I think something weak strengthens
until they are more and more it,
like letting in heaven.
But other people are
mussels or clams, frightened.
Steam or knife blades mean open.
They hear heaven, they think boiled or broken.
"""
This reminds me of [[May Swenson]]'s poem [["View to the North"|As you grow older, it gets colder. You see through things.]]
<<list-links "[tag{!!title}]">>
Aging is about mind over matter. If you don't mind, it doesn't matter.
There is an “information theory” of aging, which says that an accumulation of epigenetic noise interferes with genetic data. The chaos eventually causes cells to become senescent and stop reproducing and influences adjacent cells to do the same. That is the experience we have come to know as aging.
The origins of this process can be found in the earliest era of microscopic life on Earth. Simple organisms evolved signals to reproduce cells when conditions were favorable and to shut down and attend to any damage when conditions were poor.
We suffer from aging, in short, as a side effect of a primeval program that helps to regulate and repair our cells. In this way, aging is not unlike cancer, which some scientists believe also initially evolved as a survival mechanism, allowing cells to abandon higher functionality in order to proliferate unchecked.
: -- from his article [[We May Not Have to Age So Fast|https://www.wsj.com/articles/we-may-not-have-to-age-so-fast-11572012999]], co-authored with Matthew D. LaPlante
Translated from the Portuguese (see below)
"""
Ah, the freshness in the face of leaving a task undone!
To be remiss is to be positively out in the country!
What a refuge it is to be completely unreliable!
I can breathe easier now that the appointments are behind me.
I missed them all, through deliberate negligence,
Having waited for the urge to go, which I knew wouldn't come.
I'm free, and against organized, clothed society.
I'm naked and plunge into the water of my imagination.
It's too late to be at either of the two meetings where I should have been at the same time,
Deliberately at the same time...
No matter, I'll stay here dreaming verses and smiling in italics.
This spectator aspect of life is so amusing!
I can't even light the next cigarette... If it's an action,
It can wait for me, along with the others, in the non-meeting called life.
"""
"""
Ah a frescura na face de não cumprir um dever!
Faltar é positivamente estar no campo!
Que refúgio o não se poder ter confiança em nós!
Respiro melhor agora que passaram as horas dos encontros.
Faltei a todos, com uma deliberação do desleixo,
Fiquei esperando a vontade de ir para lá, que eu saberia que não vinha.
Sou livre, contra a sociedade organizada e vestida.
Estou nu, e mergulho na água da minha imaginação.
É tarde para eu estar em qualquer dos dois pontos onde estaria
à mesma hora,
Deliberadamente à mesma hora…
Está bem, ficarei aqui sonhando versos e sorrindo em itálico.
É tão engraçada esta parte assistente da vida!
Até não consigo acender o cigarro seguinte… Se é um gesto,
Fique com os outros, que me esperam, no desencontro que é a vida.
"""
[enjoyment] [loafing] [free spirit] [shrugging off responsibilities]
Meditation teachers seem to love sharing paradoxes like these with an enigmatic smile: “Ah, to get better, one must let go of trying to get better.”^^1^^ “To get from point A to point B, you need to just really //be// at point B.”^^2^^ And so on.
These are half-true, but can seem to conflate being non-judgemental with being non-responsive in a way that is needlessly confusing.
: -- from [[a blog entry|http://rationaldharma.com/blog/i-wasted-8-years-of-meditation-because-i-didnt-understand-these-4-things/]] at [ext[rationaldharma.com]] (by Ollie.shinkai AKA RationalShinkai, AKA Ollie Bray?)
----
^^1^^ - the way I interpret this (half truth) is that you do need to try, but do it with equanimity and without "emotional drag/balast"^^2^^
^^2^^- similar to ^^1^^ above, the way I interpret this (half truth) is that you do need to move (you can't just BE there, unless you believe in miracles :), but you need to "travel light" (again, without "emotional drag/balast").
[contradiction] [paradox]
Ah! Vanitas Vanitatum! Which of us is happy in this world? Which of us has his desire? or, having it, is satisfied?
Come, children, let us shut up the box and the puppets, for our play is played out.
Compare to what [[Koheleth/Ecclesiastes had said|vanity of vanities says Ecclesiastes, all is vanity.]]
and [[also (from Ecclesiastes)|For man cometh in vanity, and departeth in darkness, and his name is covered with darkness.]]
<<list-links "[tag{!!title}]">>
Émile Chartier (1868–1951), French philosopher and antimilitarist commonly known as Alain.
<<list-links "[tag{!!title}]">>
[[Britain's most semicolon-happy philosopher|https://newrepublic.com/article/116420/11-most-alain-de-botton-sentences-news-users-manual]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Wrote the book //The Uncommon Reader//, and the play //The History Boys//.
<<list-links "[tag{!!title}]">>
Professor at Cambridge http://www.cl.cam.ac.uk/~afb21/
<<list-links "[tag{!!title}]">>
A "[[CS Sage|https://en.wikipedia.org/wiki/List_of_computer_scientists]]".
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
A "[[CS Sage|https://en.wikipedia.org/wiki/List_of_computer_scientists]]".
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
From his [[article in ZeroOne/Medium|https://onezero.medium.com/the-future-of-computing-is-analog-e758471fbfe1]]:
The history of computing can be divided into an Old Testament and a New Testament: before and after electronic digital computers and the codes they spawned proliferated across the earth. The Old Testament prophets, who delivered the underlying logic, included Thomas Hobbes and [[Gottfried Wilhelm Leibniz]]. The New Testament prophets included Alan Turing, John von Neumann, Claude Shannon, and Norbert Wiener. They delivered the machines.
Alan Turing wondered what it would take for machines to become intelligent. John von Neumann wondered what it would take for machines to self-reproduce. Claude Shannon wondered what it would take for machines to communicate reliably, no matter how much noise intervened. Norbert Wiener wondered how long it would take for machines to assume control.
: -- From John Brockman's book “Possible Minds - 25 Ways of Looking at AI”.
[Artificial Intelligence]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Alcohol, taken in sufficient quantities, produces all the effects of intoxication.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
The fictional mascot and cover boy of Mad, the American humor magazine.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
English mathematician and philosopher. He is best known as the defining figure of the philosophical school known as process philosophy, which today has found application to a wide variety of disciplines, including ecology, theology, education, physics, biology, economics, and psychology, among other areas.
In his early career Whitehead wrote primarily on mathematics, logic, and physics. His most notable work in these fields is the three-volume Principia Mathematica (1910–13), which he co-wrote with former student Bertrand Russell.
<<list-links "[tag{!!title}]">>
All anybody can do in bad times is Live. Hold out. Survive. I don’t know whether good times are coming back again. But I know that won’t matter if we don’t survive the bad times.
The Dhammapada is an ancient Buddhist scripture traditionally ascribed to the Buddha himself. It is one of the best-known of all Buddhist texts. The word 'Dhammapada' essentially means "the path of eternal truth." According to tradition, the Dhammapada's verses were spoken by the original Siddhārtha Gautama Buddha on various occasions around 500 BC.
Here are a few excerpts from [[http://www.floweringofgoodness.org/dhammapada.php]]:
"""
All experience is preceded by mind,
Led by mind,
Made by mind.
Speak or act with a corrupted mind,
And suffering follows
As the wagon wheel follows the hoof of the ox.
All experience is preceded by mind,
Led by mind,
Made by mind.
Speak or act with a peaceful mind,
And happiness follows
Like a never-departing shadow.
[...]
Hatred never ends through hatred.
By non-hate alone does it end.
This is an ancient truth.
Many do not realize that
We here must die.
For those who realize this,
Quarrels end.
[...]
Irrigators guide water;
Fletchers shape arrows;
Carpenters fashion wood;
Sages tame themselves.
[...]
"""
All gardeners live in beautiful places because they make them so.
All good work should have an edge of life and death to it, if not immediately apparent, then to be found by ardently exploring its greater context. Absent the edge, we drown in numbness.
:-- From: “Crossing the unknown sea: work as a pilgrimage of identity.”
''אני רוצָה - יוליה וינר ''
"""
זֶה אָדֹם
אַךְ אֲנִי רוֹצָה כָּחֹל
זֶה כָּחֹל אֲבָל כֵּהֶה מִדַּי
זֶה בָּהִיר אֲבָל גָּדוֹל מִדַּי
וְזֶה קָטָן מִדַּי
זֶה בַּמִּדָּה הַנְּכוֹנָה אֲבָל יָקָר מִדַּי
וְזֶה זוֹל מִדַּי וּבֶטַח לֹא שָׁוֶה
זֶה בְּהֶשֵּׂג יָדִי אֲבָל מְכֹעָר
וְזֶה יָפֶה אֲבָל יֵשׁ לוֹ רַגְלַיִם
וַאֲנִי רוֹצָה עַל גַּלְגַּלִּים
זֶה יָפֶה וְעַל גַּלְגַּלִּים אֲבָל לֹא אָפְנָתִי
וְזֶה אָפְנָתִי אֲבָל לֹא נוֹחַ
זֶה אָפְנָתִי וְנוֹחַ אֲבָל אָרֹךְ מִדַּי
אֲנִי רוֹצָה יוֹתֵר קָצָר
וְשֶׁתִּהְיֶה לוֹ יָדִית
וְזֶה יֵשׁ לוֹ יָדִית אֲבָל הוּא עוֹבֵד עַל סוֹלְלוֹת
וַאֲנִי רוֹצָה אַלְחוּטִי
וְזֶה אַלְחוּטִי, לֹא יָקָר וְאֶלֶגַנְטִי
אַךְ אִטִּי מִדַּי, וּבְנוֹסָף כֻּלּוֹ סִינְתֶּטִי
וְזֶה מֵחֹמֶר טִבְעִי
אֲבָל לֹא טָעִים וְדַל וִיטָמִינִים
וְגַם הָאַחְרָיוּת לַחֲצִי שָׁנָה בִּלְבַד
לְזֶה יֵשׁ אַחְרָיוּת לִשְׁנָתַיִם
אֲבָל הוּא הִיפֶּראָלֶרְגֶּנִי
וְזֶה הִיפּוֹאָלֶרְגֶּנִי אֲבָל מִשְׁפַּחְתִּי לֹא אוֹהֶבֶת
וְאֵין לוֹ מְגֵרוֹת
וַאֲנִי רוֹצָה מְגֵרוֹת מְזֻגָּגוֹת
לְזֶה יֵשׁ מְגֵרוֹת אֲבָל הוּא בּוּרְגָּנִי מִדַּי
הוּא גַּם לֹא עוֹמֵד בִּרְטִיבוּת
וְגַם עָצְמַת הַקּוֹל שֶׁלּוֹ נְמוּכָה מִדַּי
לְזֶה יֵשׁ קוֹל חָזָק אֲבָל נֶפַח הַזִּכָּרוֹן מְצֻמְצָם
וְגַם רֵיחַ לֹא נָעִים
לְזֶה זִכָּרוֹן מַסְפִּיק וְרֵיחַ נָעִים
אַךְ הוּא גּוֹרֵם לְהַשְׁמָנַת יֶתֶר
לֹא מְתַקְּנִים אוֹתוֹ בָּאָרֶץ
הוּא מַעֲלֶה עֹבֶשׁ
מִתְקַלֵּף מִמֶּנּוּ הַצֶּבַע
הַבִּטְנָה שֶׁלּוֹ מִתְפָּרֶקֶת
וְהַמִּכְסֶה נִפְתַּח בְּקֹשִׁי
וְרַק זֶה
יָפֶה
אָפְנָתִי
בְּטִיחוּתִי
חַמִּים
טָעִים
חֶסְכוֹנִי
לֹא בּוּרְגָּנִי
כַּפְרִי
טָרִי
בָּרִיא
קָרִיא
אוֹטוֹמָטִי
דִּיאֶטֶטִי
מְסַפֵּק
מְפַנֵּק
מֵזִין
מַלְבִּין
בְּשִׁמּוּשׁ קַל וְנוֹחַ
עִם יָדִית וְעִם רֵיחַ נִיחוֹחַ
לֹא גָּדוֹל וְלֹא קָטָן
לֹא אָרֹךְ וְלֹא קָצָר
לֹא זוֹל וְלֹא יָקָר
אֶקְסְקְלוּסִיבִי
אוּלְטִימָטִיבִי
וּבְנוֹסָף תּוֹצֶרֶת חוּ"ל
מַתְאִים לִי בּוּל
אֲבָל הוּא כָּחֹל
וַאֲנִי רוֹצֶה אָדֹם
"""
This an interesting contrast to the [[Poem - Possibilities - by Wislawa Szymborska]].
All I want to know is where I'm going to die so I'll never go there.
Compare to Woody Allen's [[I'm not afraid of death; I just don't want to be there when it happens.]]
''Alda's First Law of Laws'':
All laws are local.
In other words, something is always bound to come along and make you rethink what you know by forcing you to look at it in a broader context.
I don't mean that laws are not true and useful, especially when they have been verified by experiment. But they are likely to continue to be true only within a certain frame, once another frame is discovered.
Some scientists will probably find this idea heretical and others may find it obvious. According to this law, they'll both be right (depending on the frame they're working in).
Another way of saying this is that no matter how much we know about something, it is just the tip of the iceberg. And most disasters occur by coming in contact with the other part of the iceberg.
''Alda's Second Law of Laws'':
A law does not know how local it is.
When you're operating within the frame of a law, you can't know where the edges of the frame are—where dragons begin showing up.
I've just been interviewing astronomers about dark matter and dark energy in the universe. These two things make up something like 96% of the universe. The part of the universe we can see or in some way observe is only about 4%. That leaves a lot of universe that needs to be rethought. And some people speculate that dark energy may be leaking in from a whole other universe; an even bigger change of frame, if that turns out to be the case.
It’s now known that vast stretches of DNA once thought to be Junk DNA because they don’t code for proteins actually regulate or even silence conventional genes. The conventional genes—what we used to think were responsible for everything we knew about heritability—account for only 2% of our DNA. Apparently, it’s not yet known how much of the other 98% is active, but I think the frame has just shifted here.
: - the "laws" are described at edge.org in the post on [["What's your Law?" (2004 question)|https://www.edge.org/response-detail/11148]].
all mankind is of one author, and is one volume; when one man dies, one chapter is not torn out of the book, but translated into a better language; and every chapter must be so translated;
God employs several translators; some pieces are translated by age, some by sickness, some by war, some by justice; but God's hand is in every translation, and his hand shall bind up all our scattered leaves again, for that library where every book shall lie open to one another;
:-- from his [[Devotions Upon Emergent Occasions|http://www.luminarium.org/sevenlit/donne/meditation17.php]]
All of us are fortunate to have been born. [However] it cannot be said that not to be born is a misfortune.
All that we are is a result of what we have thought.
"""
All that you touch
You Change.
All that you Change
Changes you.
The only lasting truth
is Change.
God^^1^^
is Change.
"""
----
^^1^^ see [[her|Octavia E. Butler]] take [[On the nature of God]]
All those who believe in psychokinesis raise my hand.
We’re in the same position as any scientist. All we have to go on is experiential evidence. And sooner or later we have to trust our own experience, because that’s all we really have.
Otherwise it’s a vicious circle. If I fundamentally distrust my experience, then I must distrust even my capacity to distrust, since that is also an experience. So sooner or later I have no choice but to trust, trust my experience, trust that the universe is not fundamentally and persistently going to lie to me.
Of course we can be mistaken, and sometimes experiences are misleading, but on balance we have no choice but to follow them. It’s a type of phenomenological imperative. And especially mystical experiences—if anything, they are more real, not less real, than other experiences.
I was thinking of Hegel’s critique of Kant: you can’t question awareness since the only tool you have is awareness. Trying to do so, Hegel said, is like trying to go swimming without getting wet. We are drenched in awareness, in experience, and have no choice but to go with it on some profound level.
All you need is ignorance and confidence and success is assured.
A mix of 2 Shakespeare play titles.
Also, from a play/script "Four Plays for Coarse Actors" by Michael Green
Almost all of us often engage in a kind of tacit chronological exceptionalism. Unlike all those suckers who fell for the flat earth or the geocentric universe or cold fusion or the cosmological constant, we ourselves have the great good luck to be alive during the very apex of accurate human thought.
The literary critic Harry Levin put this nicely: "The habit of equating one's age with the apogee of civilization, one's town with the hub of the universe, one's horizons with the limits of human awareness, is paradoxically widespread."
(compare to what [[Michael Crichton]] had to say about [[our certainty about our knowledge|'wet streets cause rain' stories]])
Almost everybody thinking about spiritual growth has one deep, underlying concern, and that is everything they are going to have to give up. It almost never occurs to anybody that all they're going to give up is suffering.
Everything in life, contrary to Madison Avenue’s guarantees, can’t be cured or resolved or eliminated. Some things must simply be endured. Some things must simply be borne. Some things must simply be accepted. Community and relationships enable us to do that.
…It is in community where we find out who we really are. It is life with another that shows my impatience and life with another that demonstrates my possessiveness and life with another that gives notice to my nagging devotion to the self.
Life with someone else, in other words, doesn’t show me nearly as much about his or her shortcomings as it does about my own. In human relationships I learn how to soften my hard spots and how to reconcile and how to care for someone else besides myself.
In human relationships I learn that theory is no substitute for love. It is easy to talk about the love of God; it is another things to practice it. That’s how relationships sanctify me. They show me where holiness is for me. That’s how relationships develop me. They show me where growth is for me.
If I’m the passive-victim type, then assertiveness may have something to do with coming to wholeness. If I’m the domineering character in every group, then a willingness to listen and to be led may be my call to life.
''Alone, I am what I am, but in community I have the chance to become everything that I can be.''
And so, stability bonds me to this group of people and to these relationships so that resting in the security of each other we can afford to stumble and search, knowing that we will be caught if we fall and we will be led where we cannot see by those who have been there before us.
[growth]
From the book "Knowledge and Social Imagery" by David Bloor:
* To decide whether there can be an alternative mathematics it is important to ask: what would such things look like? By what signs could they be recognised, and what is to count as an alternative mathematics?
* An alternative mathematics would look like error or inadequacy. A real alternative to our mathematics would have to lead us along paths where we were not spontaneously inclined to go. At least some of its methods and steps in reasoning would have to violate our sense of logical and cognitive propriety. Perhaps we would see conclusions being reached with which we simply did not agree. Or we would see proofs accepted for results with which we agreed, but where the proofs did not seem to prove anything at all. We would then say that the alternative mathematics got the right answer for the wrong reason. Conversely we would perhaps see clear and compelling lines of reasoning-compel-ling from our standpoint-rejected or ignored. An alternative mathematics might also be embedded in a whole context of purposes and meanings which were utterly alien to our mathematics. Its point would perhaps seem to us to be barely intelligible.
* The Greeks said that one is not a number is because they saw it as the starting point or generator of number. Aristotle was offering his own version of this standard view when he said in his 'Metaphysics': "'one' means the measure of some plurality, and 'number' a measured plurality or a plurality of measures. Therefore, of course, one is not a number; the measure is not plural, but both it and the one are starting points".
* The standard early Greek classification of number is clearly different from ours. Different things will therefore count as violations of order and coherence, and so different things will count as confusions or contradiction.
* Part of the Greek classification of number is similar to ours. They too sorted numbers into odd and even. What, then, of the idea that one is to be classed as even-odd? This is because one generates both odd and even numbers, so it must partake of both natures. It stands astride and above the odd-even dichotomy representing its origin or source.
* A survey of Diophantus' work quickly yields differences between his thinking and that behind contemporary elementary algebra. For example all of Diophantus' algebra consists in looking for quite determinate numbers. The algebraic processes are not used with the same generality as we would use them. They are always subordinated to numerical problems. Thus in the example above quite specific assumptions were introduced in order to yield two numbers that would meet the required conditions. Wherever the algebra yields what we would call negative numbers Diophantus rejects the original problem as impossible or erroneously formulated. Similarly when he works on a problem which can be cast into a quadratic equation he typically only gives one of the two values which satisfy such equations. This is done even when both of these values are positive.
I had been sitting with Robinson in the space between these two scholarly endeavors — the study of words; the study of God — for several hours. The question she was in the process of answering was one I posed 40 minutes earlier; we were already at least a dozen steps into her answer.
Though Robinson has taught literature and writing for most of her life, and at the University of Iowa in its graduate program for the past 25 years, there is nothing pedantic about her expansiveness. Over the three days of our conversations, her responses consistently unfolded in this steadily accretive way. ''Although it wouldn’t be unfair to present anything she said as a stand-alone thought, it would be untrue to the remarkable way her mind skips the stones of a question across its ample surface.''
: -- Wyatt Mason describing his 3 day conversation with [[Marilynne Robinson]] in an article titled [["The Revelations of Marilynne Robinson"|https://www.nytimes.com/2014/10/05/magazine/the-revelations-of-marilynne-robinson.html]].
[style] [speaking] [explanation] [description]
(contrast with [[Alfred North Whitehead]]'s [[observation about style/content|He left the darkness of the subject unobscured.]]).
[[Nassim Nicholas Taleb|Nassim Taleb]] in his 2007 best seller “The Black Swan,” a book about the outsize impact on our lives of large, unpredictable events, in essence, claims that
although people tend to place a higher value on the things they know than on the things they don’t know, it is the things we don’t know, and therefore can’t see coming, that tend to shape our world most dramatically.
(this echoes astrophisical discoveries like black matter and black energy)
futurist
<<list-links "[tag{!!title}]">>
Always do right - this will gratify some and astonish the rest.
Or as [[Charles Caleb Colton]] riffed on it:
> Nothing so completely baffles one who is full of trick and duplicity himself, than straightforward and simple integrity in another.
Always give the benefit of the doubt; don't forget red flags.
from Kenneth Reitz [[webpage|https://www.kennethreitz.org/values/]]
<<comparequote "Mason Cooley" "Wisdom remembers. Happiness forgets." "remembering and forgetting">>
Always give without remembering and always receive without forgetting.
[[Haggai Mark]] adds: This guarantees joy for both the giver and receiver, in both cases.
<<comparequote "Mason Cooley" "Wisdom remembers. Happiness forgets." "remembering and forgetting">>
(also compare to [[Dag Hammarskjold]]'s advice that [[Forgiving is forgetting, in spite of remembering.]]).
Why be saddled with this thing called life expectancy? Of what relevance to an individual is such a statistic? Am I to concern myself with an allotment of days I never had and was never promised? Must I check off each day of my life as if I am subtracting from this imaginary hoard? No, on the contrary, I will add each day of my life to my treasure of days lived. And with each day, my treasure will grow, not diminish.
<<list-links "[tag{!!title}]">>
The old Latin root of the word desire, meaning de sider, of the stars. To have a desire in life literally means to keep your star in sight, to follow a glimmer, a beacon, a disappearing will-o'-the-wisp over the horizon into someplace you cannot yet fully imagine. A deeply held desire is a star that is particularly our own; it might disappear for a while, but when the skies clear we catch sight of it again and recognize the glimmer.
Ambition had come to feel less liberating, more confining, bereft of revelation, more like an artificial light I had shone across the water myself; you could direct the beam of ambition to help you see the immediate territory ahead but it would ultimately only illuminate things that were already known to you, and its glare would just as likely rob you of your peripheral night vision.
''Ambition kills our sense of the miraculous; ambition, ironically, could hide the stars.
Ambition also lacked surprise, it lacked a sense of belonging to the territory through which we travel, and it lacked a sense of the greater story of which we are a part. It lacked completely the understanding that no matter the self-conceited importance of our work, at the end of our lives we are compost for worlds we cannot yet imagine. Ambition takes us toward a horizon but not over it— that line would always recede before our reaching hands.''
But desire is a conversation between our physical bodies, our imaginations, and new worlds that is the territory we seek. Ambition takes willpower and constant applications of energy to stay on a perceived bearing; desire demands only a constant attention to the unknown gravitational field which surrounds us and from which we can recharge ourselves every moment, as if breathing from the atmosphere of possibility itself. A life's work is not a series of stepping-stones onto which we calmly place our feet, but more like an ocean crossing where there is no path, only a heading, a direction, which, of itself, is in conversation with the elements. Looking back for a sense of reference, we see the wake we have left as, only a brief, glimmering trace on the water.
:: -- From [[David Whyte]]'s “Crossing the unknown sea : work as a pilgrimage of identity.”
Author of, among others, the book [[The Unabridged Devil's Dictionary (Project Gutenberg)|https://www.gutenberg.org/files/972/972-h/972-h.htm]]
<<list-links "[tag{!!title}]">>
* ''Lottery'', n. A tax on people who are bad at math.
* ''Faith'', n. Belief without evidence in what is told by one who speaks without knowledge, of things without parallel.
* ''Egotist'', n. A person of low taste, more interested in himself than in me.
* ''Selfish'', adj. Devoid of consideration for the selfishness of others.
* ''Sweater'', n. Garment worn by child when its mother is feeling chilly.
* ''Corporation'', n. An ingenious device for obtaining individual profit without individual responsibility.
* ''Apologize'', v. To lay the foundation for a future offence. [cynicism]
* ''Bore'', n. A person who talks when you wish him to listen.
* ''Cogito cogito ergo cogito sum'' -- "I think that I think, therefore I think that I am;" as close an approach to certainty as any philosopher has yet made.
* ''Religion'', n. A daughter of Hope and Fear, explaining to Ignorance the nature of the Unknowable.
* ''Infidel'', n. In New York, one who does not believe in the Christian religion; in Constantinople, one who does.
* ''Self-evident'', adj. Evident to one's self and to nobody else.
* ''Friendship'', n.: A ship big enough for two in fair weather, but only one in foul. [nasty] [egotistic]
* ''politics'', n. A strife of interests masquerading as a contest of principles. The conduct of public affairs for private advantage.
* ''Cribbage'' (or football, or sports-talk, etc.), n. A substitute for conversation among those to whom nature has denied ideas.
* ''Consult'', v.t. To seek another’s approval of a course already decided on.
* ''Contempt'', n. The feeling of a prudent man for an enemy who is too formidable safely to be opposed.
* ''present'', n. That part of eternity dividing the domain of disappointment from the realm of hope.
* ''radicalism'', n. The conservatism of to-morrow injected into the affairs of to-day.
* ''discussion'', n. A method of confirming others in their errors.
* ''Optimist'', n. A proponent of the doctrine that black is white.
* ''ballot'', n. A simple device by which a majority proves to a minority the folly of resistance. Many worthy persons of imperfect thinking apparatus believe that majorities govern through some inherent right; and minorities submit, not because they must, but because they ought. [voting] [vote] [democracy] [majority]
* ''argue'', v.t. To tentatively consider with the tongue.
* ''air'', n. A nutritious substance supplied by a bountiful Providence for the fattening of the poor.
<<list-links "[tag{!!title}]">>
The goal of cybernetics was to create a tiny model of the system using “weak currents” to amplify and control “strong currents” of the real world. The central insight was that a control problem could be solved by building an analogous system in the information space of messages and then amplifying solutions into the larger world of reality. Inherent in the motion of a control system is the concept of amplification, which makes the small big and the weak strong. Amplification allows the difference that makes a difference to make a difference^^1^^.
: – From John Brockman's book “Possible Minds - 25 Ways of Looking at AI”.
----
^^1^^ See [[the context in which Gregory Bateson had said this|http://www.informationphilosopher.com/solutions/scientists/bateson/]]^^2^^.
^^2^^ [[Gregory Bateson]] had said: [[Information is a difference that makes a difference.]]
[Artificial Intelligence]
An education is the remaking of a person. You can submit to that remaking passively, or you can take an active part. To choose the second is to remake yourself. To choose the first is to be made by others.
(Compare to Joseph Addison's: "What sculpture is to a block of marble, education is to a human soul.").
An elder is someone who has come to a point of being able to understand his place in the world and the life he has lived in it.
[[Lewis Richmond]] mentions this in his book //Aging as a Spiritual Journey// and adds:
> [Elderhood is not just possession of] particular skills, but a way of being that takes a long time to grow into.
<<comparequote "Norman Fischer" "In the end, secure happiness comes only with the solid feeling we have when we know that we have become the person we were meant to be in this lifetime – that we have matured and used the life we have been given in the best way we could." "elderhood">>
There is an old joke about an engineer, a priest, and a doctor enjoying a round of golf.
Ahead of them is a group playing so slowly and inexpertly that in frustration the three ask the greenkeeper for an explanation. “That’s a group of blind firefighters,” they are told. “They lost their sight saving our clubhouse last year, so we let them play for free.”
The priest says, “I will say a prayer for them tonight.”
The doctor says, “Let me ask my ophthalmologist colleagues if anything can be done for them.”
And the engineer says, “Why can’t they play at night?”
An excellent app/program works flawlessly (as opposed to flaws worklessly).
: - [[Haggai Mark]] to a group of students in a CS class
(Compare to [[another form of "perfection"|Perfect - poem by Kenn Nesbitt]])
(Compare to [[Samuel Johnson's take on work|My congratulations to you, sir. Your manuscript is both good and original; but the part that is good is not original, and the part that is original is not good.]]).
An expert problem solver must be endowed with two incompatible qualities – a restless imagination and a patient pertinacity.
Pertinacity = a quality of sticking with something, no matter what. It's a type of persistent determination.
All too pat is an argument already heard in some quarters, holding that capitalist greed is responsible when a plane crashes but not when a million planes land safely. An explanatory principle that can’t distinguish cases explains nothing.
:: – from an article about the Boing 737 MAX crashes, in the WSJ
An investment in knowledge always pays the best interest.
But in education,
An investment in interest always pays off with the best knowledge.
An old man said to his grandson, “Boy, I have two tigers caged within me. One is love and compassion. The other is fear and anger”. The young boy asked, “Which one will win, grandfather?” The old man replied, “The one I feed”.
and Indian tale
from [[Forward Steps|http://www.forwardsteps.com.au/100TopInspiringQuotes.html]]
An optimist and a pessimist were arguing about philosophy. The optimist declares: "This is the best of all possible worlds." The pessimist sighs and says, "You're right."
This reflects on reality similarly to
> [[Given a glass with water up to the mid level, people from the West will either say it's half full or they'll say it's half empty. People from the East will say it's both half full and half empty. They are all right.]]
<<list-links "[tag{!!title}]">>
"""
It’s about
the ball,
the bat,
and the mitt.
Ball hits
bat, or it
hits mitt.
Bat doesn’t
hit ball, bat
meets it.
Ball bounces
off bat, flies
air, or thuds
ground (dud)
or it
fits mitt.
Bat waits
for ball
to mate.
Ball hates
to take bat’s
bait. Ball
flirts, bat’s
late, don’t
keep the date.
Ball goes in
(thwack) to mitt,
and goes out (thwack) back
to mitt.
Ball fits
mitt, but
not all
the time.
Sometimes
ball gets hit
(pow) when bat
meets it,
and sails
to a place
where mitt
has to quit
in disgrace.
That’s about
the bases
loaded, about 40,000
fans exploded.
It’s about
the ball,
the bat,
the mitt,
the bases
and the fans.
It’s done
on a diamond,
and for fun.
It’s about
home, and it’s
about run.
"""
(see also [[Ken Burns]]'s [[Baseball is a leisurely game that demands blinding speed... Most of all it is about time and timelessness, speed and grace, failure and loss, imperishable hope, and coming home.]]).
And sure enough, even waiting will end...if you can just wait long enough.
The music played,
And those who were seen dancing were thought to be insane by those who could not hear the music.
And tragic it’ll be when the dancers stop dancing to that beautiful music.
And thus we must never stop dancing, ever. Even if we be called insane.
And tomorrow, what shall tomorrow bring to the overprudent dog burying bones in the trackless sand as he follows the pilgrims to the holy city?
:-- from his poem [[On Giving|http://www.katsandogz.com/gibran/ongiving.php]]
Compare with [[The last shirt has no pockets.]]
"""
It's opener there
in the wide open air.
Out there things can happen
and frequently do
to people as brainy
and footsy as you.
And when things start to happen,
don't worry. Don't stew.
Just go right along.
You'll start happening too.
"""
: -- from [[his|Dr. Seuss]] book "//Oh, The Places You'll Go!//"
We were entrusted by nature with the ownership of this single thing, so fleeting and slippery that anyone who will can oust us from possession. What fools these mortals be! They allow the cheapest and most useless things, which can easily be replaced, to be charged in the reckoning, after they have acquired them; but they never regard themselves as in debt when they have received some of that precious commodity, — time!
''And yet time is the one loan which even a grateful recipient cannot repay.''
<<list-links "[tag{!!title}]">>
André Paul Guillaume Gide (22 November 1869 – 19 February 1951) was a French author and winner of the Nobel Prize in literature in 1947. Gide's career ranged from its beginnings in the symbolist movement, to the advent of anticolonialism between the two World Wars.
<<list-links "[tag{!!title}]">>
https://en.wikipedia.org/wiki/Andrew_Solomon
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
''Antimatter''
"""
On the other side of a mirror there's an inverse world,
where the insane go sane; where bones climb out of the
earth and recede to the first slime of love.
And in the evening the sun is just rising.
Lovers cry because they are a day younger, and soon
childhood robs them of their pleasure.
In such a world there is much sadness which, of course,
is joy.
"""
[reversal] [appreciation]
<<list-links "[tag{!!title}]">>
Argentinian poet
<<list-links "[tag{!!title}]">>
''We have to acknowledge our anxiety, but we must not fear.''
There is a great difference. The original anxiety is our birth anxiety (“narrowness” and “choking” ). It’s really a life-and-death struggle for both the mother and the child.
At that time, we do it fearlessly, because fear is the resistance and response to this anxiety. If you go with it (anxiety without fear), it brings you into birth. If you resist it (by responding with fear), you die in the womb, or your mother dies.
So anxiety is not just an understandable, but a reasonable response to a lot of human experience, and we are to acknowledge it and affirm it, because to deny our anxiety is another form of resistance.
But the fear is life-destroying.
''Anxiety is not optional in life. It’s part of life. We come into life through anxiety.''
And we look at it and remember it and say to ourselves: We made it. We got through it. We made it. In fact, the worst anxieties and the worst tight spots in our life, often, years later, when you look back at them, reveal themselves as the beginning of something completely new, a completely new life.
And that can teach us, and that can give us courage.
: -- from [[David Steindl-Rast]] in his conversation with [[Krista Tippett]] titled [["How to Be Grateful in Every Moment (But Not for Everything)"|https://onbeing.org/programs/david-steindl-rast-how-to-be-grateful-in-every-moment/#transcript]].
[being afraid]
Any hour whose demands we do not fulfill, or fulfill halfheartedly, this hour is forfeited, forfeited “for all eternity.”
Conversely, what we achieve by seizing the moment is, once and for all, rescued into reality, into a reality in which it is only apparently “canceled out” by becoming the past. In truth, it has actually been preserved, in the sense of being kept safe.
Having been is in this sense perhaps even the safest form of being. The “being,” the reality that we have rescued into the past in this way, can no longer be harmed by transitoriness.
: -- from [[his|Viktor Frankl]] book "//Yes to Life//".
(compare to what [[Norman Fischer]] said about [[the nothingness/insignificance of words|Language is, on the one hand, a prison: we’re locked inside it, created by it, defined by it, and can see only as far as we can say. On the other hand, language frees us: it unlocks our imagination, allowing us to reach out to the world, and to fly beyond it. This is what poets try to do. Of course, they always fail. The point is not to succeed but to make the attempt; in this there is already some freedom and some delight...]]).
Any live man is better than any dead man but no live or dead man is very much better than any other live or dead man.
Or my mathematical interpretation :)
"""
any person alive > any person dead
but
any one person alive == any other person alive
and
any one person dead == any other person dead
"""
[justice] [equality]
If all the parts of the universe are interchained in a certain measure, any one phenomenon will not be the effect of a single cause, but the resultant of causes infinitely numerous; it is, one often says, the consequence of the state of the universe the moment before.
If we think of DNA as something like a computer program directing the building of an embryo, then rough estimates of the complexity of the embryo program (which I'll pass over) reveal it to be grossly insufficient to delineate the trillions of connections in a human brain. These connections come largely from the experiences of a specific time and culture, and thus a large part of our identity is supplied to us by events outside our skulls. The intricate particularities of a brain's wiring have too much complexity to be the result of the DNA-driven program, which determines only the rough structure of the brain and its general patterns of response to the environment.
Another, more far-reaching conclusion can be drawn. However information is encoded in the brain, the brain's complexity—its factual knowledge, associations, reasoning ability—is necessarily limited. Once again, a rough number—three billion bits has been proposed can be attached to it, but here the existence of the number is more important than its value. The reason is that ''any phenomenon in nature more complex than the human brain is by definition too complex for us to comprehend. Alternatively, we cannot make predictions (generate binary sequences) of greater complexity than (the information encoded within) our brains. Regularities may exist that provide a key to understanding the universe, but they may be beyond what I term the human brain's "complexity horizon”'' (a notion that with time will likely gain much greater currency).^^1^^
In other words, ''there may be a relatively short “secret to the universe" program, a theory of everything having complexity, say, ten billion bits, that we're just too limited (i.e., too stupid) to understand. Although they differ ineradicably, both traditional religious and scientific approaches to a hoped-for theory of everything share the perhaps naive assumptions that such a theory can be found and that its complexity will be sufficiently limited to be understood by us. Why assume that?''
[...]
(I should interject here that in addition to the limited complexity of our brains, there is another reason that regularities may be beyond our capacities; this time the constraint is physical rather than information-theoretic. [[John Horgan]] in //The End of Science// writes about the necessarily speculative nature of much theory making in modern science, especially in physics. The energies required to test theories are too enormous and the distances and masses too infinitesimal to yield experimentally verifiable results. He calls the science which results “ironic science” and compares it to art, philosophy, or literary criticism in offering nothing more than possible, interesting new ways to view the world. Is our universe one of many? Do quarks have parts? What is the real meaning of quantum mechanics? Such questions cannot be answered empirically, and lead, according to Horgan, to various just-so stories and idle conjectures.)
(see [[Since any comprehensible entity is, by complexity theory, of less complexity than we are, such an entity is not, for that very reason, an appropriate deity-like entity. People generally don't worship that which is simpler than they are. This natural reluctance to deify the simple (except possibly as a symbol) is consistent with a tendency among some to identify God with the great unfathomable, the incomprehensibly complex. Reversing the letters in God and the lines of this thought, we note that it is also consistent with a dog's deifying its master (assuming, that is, that the master is of greater complexity than the dog).]]).
: -- from his book [[Once Upon a Number|http://movies2.nytimes.com/books/99/04/25/reviews/990425.25alexant.html]]
[limits] [cognition] [intelligence]
----
^^1^^ I'm not sure I agree with this conclusion, since it assumes that the "brain's complexity—its factual knowledge, associations, reasoning ability—is necessarily limited". But I don't think that this is true, if you take into account our __unlimited__ (?) ability to create new abstractions on top of existing abstractions (thus creating an "endlessly telescoping" hierarchy of new, on-the-fly generated knowledge and associations)
[We begin with the hypothesis that] any subject can be taught in some intellectually honest form to any child at any stage of development.
: -- from his book //The Process of Education//
[[I|Haggai Mark]] love the combination of [[Bruner|Jerome Bruner]]'s humility (it's a hypothesis), optimism (//any// child at //any// level), and integrity (intellectual honesty).
<<comparequote "Mark Kac" "Tell the truth, nothing but the truth, but not the whole truth." "intellectual honesty in teaching">>
(compare to [[Emily Dickinson]]'s [[poem about telling the truth|Tell All The Truth But Tell It Slant - poem by Emily Dickinson]])
Any sufficiently advanced technology is indistinguishable from magic.^^1^^
(see the [["flip side"|Any technology that does not appear magical is insufficiently advanced.]] version by [[Gregory Benford]]).
----
^^1^^ This is part of [[Arthur C. Clarke]]'s "3 Laws"^^2^^, which was used brilliantly by [[Rodney Brooks]] to [[refute dire predictions|Imagining Magic]] about deadly Artificial Intelligence.
^^2^^ The 3 adages are:
>1. When a distinguished but elderly scientist states that something is possible, he is almost certainly right. When he states that something is impossible, he is very probably wrong.
>
>2. The only way of discovering the limits of the possible is to venture a little way past them into the impossible.
>
>3.Any sufficiently advanced technology is indistinguishable from magic.
Benford's Modified [[(Arthur C.) Clarke|Arthur C. Clarke]] Law^^1^^:
Any technology that does not appear magical is insufficiently advanced.
----
^^1^^ based on [[the original statement|Any sufficiently advanced technology is indistinguishable from magic.]] by [[Arthur C. Clarke]].
to which [[Eric Raymond|https://www.edge.org/memberbio/eric_s_raymond]] (Observer-participant anthropologist in the Internet hacker culture) replied:
> Any sufficiently advanced system of magic would be indistinguishable from a technology.
כׇל הַדּוֹחֵק אֶת הַשָּׁעָה — שָׁעָה דּוֹחַקְתּוֹ, וְכׇל הַנִּדְחֶה מִפְּנֵי שָׁעָה — שָׁעָה עוֹמֶדֶת לוֹ.
Anyone who attempts to force the moment, the moment imposes on him in response, and conversely, anyone who is patient and yields to the moment, the moment accommodates him in response.
Similarly, from Steve Grand's book "//Creation: Life and How to Make It//":
> Control is as much an effect as a cause, and the idea that control is something you exert is a real handicap to progress.
[time] [Pirkei Avot] [Eruvin.13b.13]
Anyone who stops learning is old, whether at twenty or eighty. Anyone who keeps learning stays young.
[[E.B. White]]’s abiding wisdom on children’s books:
:{{imgquote}} Anyone who writes down to children is simply wasting his time. You have to write up, not down.
And [[Ursula K. Le Guin]]'s take on it:
:{{imgquote}} Sure, it's simple writing for kids…just as simple as bringing them up.
And [[Katherine Anne Porter]]'s take:
:{{imgquote}} You have to speak clearly and simply and purely in a language that a six-year-old child can understand; and yet have the meanings and the overtones of language, and the implications, that appeal to the highest intelligence.
Applying computer technology is simply finding the right wrench to pound in the correct screw.
Archimedes will be remembered when Aeschylus is forgotten, because languages die and mathematical ideas do not. "Immortality" may be a silly word, but probably a mathematician has the best chance of whatever it may mean.
: -- from //A Mathematician's Apology// (London 1941).
Arete is the art of expressing personal excellence; personal excellence and effectiveness to the highest degree that one is capable of. It’s an expression of all that we’re capable of in terms of living life to our fullest potential.
Arete is not Virtue; it’s Excellence. If you translate arete to virtue, then you miss out on all the flavor of arete.
‘Virtue,’ at least in modern English, is almost entirely a moral word; arete on the other hand, is used indifferently in all the categories, and simply means excellence.
Pirsig writes: Plato hadn't tried to destroy aretê. He had encapsulated it; made a permanent, fixed Idea out of it; had converted it to a rigid, immobile Immortal Truth. He made aretê the Good, the highest form, the highest Idea of all. It was subordinate only to Truth itself, in a synthesis of all that had gone before.
But,
The Good was not a form of reality. It was reality itself, ever changing, ultimately unknowable in any kind of fixed, rigid way.
:: -- From //Zen and the Art of Motorcycle Maintenance: An Inquiry Into Values// by Robert Pirsig
and
:: -- from //Arete is Personal Excellence in Action// by J.D. Meier
at https://arielfoxman.substack.com
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
"""
This is the beginning.
Almost anything can happen.
This is where you find
the creation of light, a fish wriggling onto land,
the first word of Paradise Lost on an empty page.
Think of an egg, the letter A,
a woman ironing on a bare stage
as the heavy curtain rises.
This is the very beginning.
The first-person narrator introduces himself,
tells us about his lineage.
The mezzo-soprano stands in the wings.
Here the climbers are studying a map
or pulling on their long woolen socks.
This is early on, years before the Ark, dawn.
The profile of an animal is being smeared
on the wall of a cave,
and you have not yet learned to crawl.
This is the opening, the gambit,
a pawn moving forward an inch.
This is your first night with her,
your first night without her.
This is the first part
where the wheels begin to turn,
where the elevator begins its ascent,
before the doors lurch apart.
This is the middle.
Things have had time to get complicated,
messy, really. Nothing is simple anymore.
Cities have sprouted up along the rivers
teeming with people at cross-purposes—
a million schemes, a million wild looks.
Disappointment unshoulders his knapsack
here and pitches his ragged tent.
This is the sticky part where the plot congeals,
where the action suddenly reverses
or swerves off in an outrageous direction.
Here the narrator devotes a long paragraph
to why Miriam does not want Edward’s child.
Someone hides a letter under a pillow.
Here the aria rises to a pitch,
a song of betrayal, salted with revenge.
And the climbing party is stuck on a ledge
halfway up the mountain.
This is the bridge, the painful modulation.
This is the thick of things.
So much is crowded into the middle—
the guitars of Spain, piles of ripe avocados,
Russian uniforms, noisy parties,
lakeside kisses, arguments heard through a wall—
too much to name, too much to think about.
And this is the end,
the car running out of road,
the river losing its name in an ocean,
the long nose of the photographed horse
touching the white electronic line.
This is the colophon, the last elephant in the parade,
the empty wheelchair,
and pigeons floating down in the evening.
Here the stage is littered with bodies,
the narrator leads the characters to their cells,
and the climbers are in their graves.
It is me hitting the period
and you closing the book.
It is Sylvia Plath in the kitchen
and St. Clement with an anchor around his neck.
This is the final bit
thinning away to nothing.
This is the end, according to Aristotle,
what we have all been waiting for,
what everything comes down to,
the destination we cannot help imagining,
a streak of light in the sky,
a hat on a peg, and outside the cabin, falling leaves.
"""
<<list-links "[tag{!!title}]">>
Arrogance in Computer Science is measured in nano Dijkstras.
(after [[Edsger Wybe Dijkstra]])
<<list-links "[tag{!!title}]">>
Art and science do not establish themselves despite failure but through it; [...] failure, always ineluctable [unavoidable], is in certain cases spared and in others not.
(see also [[Daniel Kahneman]]'s take on [[the value of errors|Correct performance tells you much less about the procedure than the errors do.]]).
[errors] [mistakes]
Art is the lie that shows us the truth.
This is quoted by Edward O. Wilson, in his book "The Meaning of Human Existence":
>in poetry and the other creative arts metaphor is everything. The creative writer, composer, or visual artist conveys, often obliquely by abstraction or deliberate distortion, his own perceptions and the feelings he hopes to evoke-about something, about anything, real or imagined. He seeks to bring forth in an original way some truth or other about the human experience. He tries to pass what he creates directly along the channel of human experience, from his mind to your mind. His work is judged by the power and beauty of its metaphors. He obeys a dictum ascribed to Picasso: art is the lie that shows us the truth.
The cartoonist (and Pulitzer Prize winner) creator of Maus
<<list-links "[tag{!!title}]">>
https://www.theatlantic.com/author/arthur-c-brooks/
<<list-links "[tag{!!title}]">>
known for his Science Fiction writing.
<<list-links "[tag{!!title}]">>
Sir Arthur Ignatius Conan Doyle (22 May 1859 – 7 July 1930) was a Scottish physician and writer, most noted for his stories about the detective Sherlock Holmes, which are generally considered a major innovation in the field of crime fiction, and for the adventures of Professor Challenger. He was a prolific writer whose other works include science fiction stories, historical novels, plays and romances, poetry, and non-fiction.
<<list-links "[tag{!!title}]">>
Sir Arthur Stanley Eddington, OM, FRS was a British astrophysicist of the early 20th century. He was also a philosopher of science and a popularizer of science.
Born: December 28, 1882, Kendal
Died: November 22, 1944, Cambridge
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Twenty-five years ago, Deep Blue beat the world chess champion, Garry Kasparov, and the meaning of chess changed after that event—it became a game with correct and incorrect decisions rather than an expression of style and vision.
That transformative moment has come for language, and for every aspect of commercial and quotidian life based in language—society, politics, the self. ''The period in which the defining human attribute was the ability to make language is passing if it has not already passed.''
[...]
The application of Machine Learning (ML) to Natural Language Processing (NLP) achieves the imitation of consciousness, not consciousness itself, and it is not science fiction. It is now.
[...]
Here’s where we’re at: Capable of imitating consciousness through machines but not capable of understanding what consciousness is. This gap will define the spiritual condition of the near future. Mathematics, the language of nature [and programming], is overtaking human language.
''Two grounding assumptions underlying human existence are about to be shattered, that language is a human property and that language is evidence of consciousness.'' The era we are entering is not posthuman, as so many hoped and feared, but on the edge of the human
: -- From [[The Imitation of Consciousness: On the Present and Future of Natural Language Processing|https://lithub.com/the-imitation-of-consciousness-on-the-present-and-future-of-natural-language-processing/]], where [[he|Stephen Marche]] Considers AI, Machine Learning, and “the Labyrinth of Another’s Being”
<<list-links "[tag{!!title}]">>
What if there was knowledge out there, things out there, that we couldn't possibly understand? Well, as a logical possibility, of course, it's always possible that there are incomprehensible things in the universe. But I have argued that taking that seriously is exactly the same as a belief in the supernatural, because you could never have an explanation of the form, this thing that can have an effect on us, can never be understood, because if it can have an effect, we can theorize about what causes the effect, and we can do an experiment to test the theory.
: -- from his conversation with Chris Anderson (of TED fame) titled [["On the infinite reach of knowledge"|https://www.ted.com/talks/the_ted_interview_david_deutsch_on_the_infinite_reach_of_knowledge/transcript]]
(compare to [[Richard Hamming]]'s take: [[Perhaps there are thoughts we cannot think]]).
(compare to [[John Updike]]'s take on [[the permanent mystery of existence|The mystery of being is a permanent mystery, at least given the present state of the human brain.]])
Quoted in [[James Gleick]]'s article in the NYT titled [["A Unified Theory"|https://www.nytimes.com/2014/08/24/books/review/geek-sublime-by-vikram-chandra.html]] , [[Vikram Chandra]] writes (and echos my feeling :)^^1^^ about the software world:
> “I work inside an orderly, simplified hallucination,”
which I feel is similar to Math, and different from the hardware world^^1^^.
----
^^1^^ which I suspect was one reason [[I|Haggai Mark]] (slowly but surely?) "drifted from hardware engineering to software.
As a teacher, I am paid about half as much as my previous high-tech salary, but I have about twice as much time to do things I love doing.
And the improvement is demonstrable :)
if $ is salary, and t is time to do exciting things (and both are positive values!), then
in high-tech I had $ + t, and in education I have 0.5$ + 2t
and the question is:
is 0.5$ + 2t bigger than or equal to $ + t (is the total of salary and exciting time in teaching bigger or equal to that in high-tech)?
that is: 0.5$ + 2t ?>? $ +t
or (shuffling like terms):
t ?>? 0.5$
But, if t > $ (you value your time more than your money, and again, both are positive values!)
then, surely, t > 0.5$
QED (Quod Erat Demonstrandum, meaning "which is what had to be proved")
And summing it up:
teaching is not about the income, it's about the outcome. (or stated somewhat differently: "Teachers don't teach for the income, they teach for the outcome.").
“The great Way is very simple; merely forgo opinion,” says the Taoist, and I know it’s true—but there’s a preacher in me who just longs to cram my lovely pot^^1^^ with my opinions, my beliefs, with Truths.
I have more trust in my Inner Teacher. She is subtle and humble because she hopes to be understood. She contains contradictory opinions without getting indigestion. She can mediate between the arrogant artist self who mutters, “I don’t give a damn if you don’t understand me,” and the preacher self who shouts, “Now hear this!” She doesn’t declare truth, but offers it. She takes a Grecian urn and says, “Look closely at this, study it, for study will reward you; and I can tell you some of the things that other people have found in this pot, some of the goodies you too may find in it.”
Since, like most artists, I long to share with others what my art has taught me, I need my Inner Teacher; but I can never fully trust her either. After all, she’s the one who taught the kids to expect a message^^2^^. Her instinct is to “be clear,” be explicit. Mine is to try to go past explication into a larger clarity.
My job is to keep the meaning completely embodied in the work itself, and therefore alive and capable of change. I think that’s how an artist can best speak as a member of a moral community: clearly, yet leaving around her words that area of silence, that empty space, in which other and further truths and perceptions can form in other minds.
----
^^1^^ see [[The use of the pot is where the pot is not. A poem of the right shape will hold a thousand truths. But it doesn’t say any of them.]]
^^2^^ students often ask (or are being asked) "what the message of a story/book/work of art is.
As human beings, don’t we need questions without answers as well as questions with answers?
:-- from his book //The Accidental Universe: The World You Thought You Knew//.
As measured by the millions of those who speak it fluently . . . , mathematics is arguably the most successful global language ever spoken. . . . Equations are like poetry: They speak truths with a unique precision, convey volumes of information in rather brief terms. . . . And just as conventional poetry helps us to see deep within ourselves, mathematical poetry helps us to see far beyond ourselves.
: — from his book //Five Equations That Changed the World//
(compare to [[Janna Levin]]'s take on the [[universality (and practicality) of mathematics|On the universality and practicality of mathematics]]).
As melancholy is sadness that has taken on lightness, so humor is comedy that has lost its bodily weight.
[...]
Jacques in As You Like It (IV.i.15-18), defines melancholy in these terms: “but it is a melancholy of mine own, compounded of many simples, extracted from many objects, and indeed the sundry contemplation of my travels, which, by often rumination, wraps me in a most humorous sadness.” It is therefore not a dense, opaque melancholy, but a veil of minute particles of humours and sensations, a fine dust of atoms, like everything else that goes to make up the ultimate substance of the multiplicity of things.
:-- from his lecture [["Lightness"|https://zerogravity.empac.rpi.edu/lightness/]].
Our biggest mistake, however, and really, the only thing that makes us into fools, is that we don’t acknowledge our foolishness. Although regarding ourselves as smart and clever may have some evolutionary benefits, it is also a cause of our suffering. For instance, it was a very stupid idea to rename our species “homo sapiens sapiens,” which means twice wise humans. The scientists say this designation means that not only do we know, we also know that we know. But that sets up an ideal that hardly any members of our species can achieve, at least for any length of time.
People who practice meditation know how difficult it is to be twice knowing, which may, in fact, be another name for “mindfulness”. We have also discovered how tricky it is to make knowing itself the object of knowing. As someone who has personally struggled with “twice knowing,” I think maybe we’d all be better off if we let the designation “sapiens sapiens” just mean that we have to learn something at least twice before we know it.
: -- from his article [[A Fool's Paradise |http://www.wesnisker.com/a-fools-paradise/]]
"""
"""
Compare to [[Terry Pratchett's take on levels of thoughts|First Thoughts are the everyday thoughts. Everyone has those. Second Thoughts are the thoughts you think about the way you think. People who enjoy thinking have those. Third Thoughts are thoughts that watch the world and think all by themselves. They’re rare, and often troublesome. Listening to them is part of witchcraft.]]
As teachers, we cannot claim to have taught problem solving just because we have given students many problems to solve.
We have to also teach: protocols, procedures, methods, a discipline and framework of problem solving.
Shriram Krishnamurthi at [[a keynote on "Curriculum Design as an Engineering Problem."|https://youtu.be/rM_E2IwlprY]]
As we express our gratitude, we must never forget that the highest appreciation is not to utter words, but to live by them.
From [[her|May Swenson]] poem "View to the North":
"""
As you grow older, it gets colder.
You see through things.
[...]
Day by day the scene opens,
[...]
Soon it will be wide, stripped,
entirely unobstructed.
I'll see right through
the twining^^1^^ waves, to
the white horizon, to the place
where the North begins.
Magnificent! I'll be thinking
while my eyeballs freeze.
"""
This reminds me of [[Age - poem by Kay Ryan]].
----
^^1^^ twine - cause to wind or spiral round something.
At a party given by a billionaire on Shelter Island, the late [[Kurt Vonnegut]] informs his pal, the author [[Joseph Heller]], that their host, a hedge fund manager, had made more money in a single day than Heller had earned from his wildly popular novel Catch 22 over its whole history. Heller responds, “Yes, but I have something he will never have: //Enough//.
: -- [[as told|https://jamesclear.com/great-speeches/enough-by-john-c-bogle]] by John C. Bogle
I think students of the history of ideas feel their work requires a weeding out of junk ideation, as if the true life of thought existed in and was carried forward by whatever in retrospect seems sound and viable.
At any present moment, before retrospect can make its exclusions, the cultural atmosphere is thick with junk ideation, which is, in that moment, indisputably influential, even dominant, and therefore not to be excluded from any meaningful understanding of what we are and how we proceed over time. It is the collective expression of the individual capacity for error, which is continuous with our gift for hypothesis and no doubt crucial to our ability to learn and to imagine.
My analogy breaks down because while “junk” was clearly a misnomer when applied to DNA, humankind can burst out of the constraining efficiencies of nature and generate ideas that, however potent, are really, truly, and at very best worthless.
: -- from [[Robinson|Marilynne Robinson]]'s essay //Cosmology//, in her book //When I was a Child I Read Books//.
At first, we realize that we do not control the world outside us. I don't decide when it rains. Then we realize that we do not control what's happening inside our own body. I don't control my blood pressure. Next, we understand that we don't even govern our brain. I don't tell the neurons when to fire. That's more difficult. Ultimately we should realize that we do not control our desires, or even our reactions to these desires.
- from his book //"21 Lessons for the 21^^st^^ Century"//
When you recognize that we are the product of purposeless, mindless laws of physics playing themselves out on our particles — because we are, all, bags of particles — it changes the way you search for meaning and purpose: You recognize that looking out to the cosmos to find some answer that’s sort of floating out there in the void is just facing the wrong direction.
At the end of the day, we have to manufacture our own meaning, our own purpose — we have to manufacture coherence… to make sense of existence. And when you manufacture purpose, that doesn’t make it artificial — that makes it so much more noble than accepting purpose that is thrust upon you from the outer world.
: -- from a [[conversation with Janna Levin|https://www.brainpickings.org/2020/04/24/brian-greene-janna-levin-conversation/]]
Consider the strangely persistent materialism of new atheist science. Its great confidence seems to be based on a fundamental error. It takes whatever has been observed and described as having been explained. To describe the processes of ontogeny or mortality does not explain why we are born or why we die. Users of the Internet have downloaded instructions for making compost and instructions for making truck bombs. Both involve nitrogen. Their differences are vastly more important than their similarities, however. If their components and their assembly are described, and even if their effects are noted, they are still not explained.
Explanation would necessarily involve an account of the intention behind their making. So perhaps the very idea of explanation is an error of anthropomorphism when it is applied to things that do not involve human intention. The belief that divine purpose lies behind nature of course invites anthropomorphism because of the presumed likeness between God and humankind, the idea that the making of the cosmos was intentional in a sense meaningful to us.
This may be where the habit arose of looking for the reason behind existence and event. Still, there is intention to be explained, human motive, which takes me back to that ancient question, the nature of humankind: Why do the things we do seem to demand to be explained, and why do they so often seem to defeat every attempt at explanation?
I want to suggest a different strategy. I want to suggest it not just for myself but, as it were, for our own times, and that's a strategy of stealing from religions, that atheists should learn to inform themselves about what religions are up to and then selectively steal the best bits.
Now, this has been described to me sometimes as a bit of a pick-and-mix approach, and the truth is, that's exactly what it is, and I'm very, very proud of pick-and-mix when it comes to religion.
I think that if you'd believe, as I do, that religions are essentially cultural products, that they were made by humans, then there seems to be nothing wrong with choosing among them like one would with any work of culture.
: -- from [[his talk at the Sydney Opera House|https://www.youtube.com/watch?v=Br8m2S98HU4&feature=emb_rel_pause]]
<<comparequote "John Updike" "The inner spaces that a good story lets us enter are the old apartments of religion." "learning from religions">>
From an [[interview Ezra Klein did with Johann Hari|https://www.nytimes.com/2022/02/11/podcasts/transcript-ezra-klein-interviews-johann-hari.html]]:
Attention is the most precious resource we have — it’s the window through which we experience our lives. And for many of us, that window is fogging.
Attention rebels against rigidity [and monotony and boredom]. It wants curiosity — to be interested, to be surprised.
I don’t think time is the right way to measure whatever it is I have left — attention is.
I only have so much attention left to give. And it’s how I use that attention that will decide what I make of that time [and my life].
James Williams argues there are three layers of attention:
* the first layer of attention, he argued, is what’s called your __spotlight__. This is called the spotlight, because it involves narrowing down your focus. And if your spotlight gets distracted or disrupted, you’re prevented from carrying out near-term actions.
* The second layer of your attention is what he calls your __starlight__. Your starlight is the focus you can apply to your longer term goals — your projects over time. And if you become distracted from your starlight, then what you lose is a sense of your longer term goals. You start to forget where you’re headed.
*And the third layer of your attention is your __daylight__. And that’s the form of focus that makes it possible for you to know what your longer term goals even are in the first place. And he gave it that name, daylight, because it’s only when it’s scene is flooded with daylight that you can see the things around you most clearly. And if you get so distracted that you lose your sense of your daylight, he said, in many ways, it’s like you can’t even figure out who you are, what you want to do, where you want to go. It’s like you become lost in your own life.
Professor Marcus Reichel and other people discovered is that __mind-wandering__ is a crucial form of attention. Mind-wandering is when you process things that have happened in the past, it’s when you anticipate the future, it’s when you make connections between things you’ve experienced.
And what we’ve done in our culture is we’re in this awful state where we’re not doing spotlight focusing. We’re not deep focusing. But nor are we mind-wandering.
[effectiveness] [innovation] [associations] [ creativity]
https://austinkleon.com/
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Translated from the Portuguese (see below)
"""
Autopsychography^^*^^
The poet is a faker
Who's so good at his act
He even fakes the pain
Of pain he feels in fact.
And those who read his words
Will feel in his writing
Neither of the pains he has
But just the one they're missing.
And so around its track
This thing called the heart winds,
A little clockwork train
To inflame our minds.
"""
"""
AUTOPSICOGRAFIA
O poeta é um fingidor.
Finge tão completamente
Que chega a fingir que é dor
A dor que deveras sente.
E os que lêem o que escreve,
Na dor lida sentem bem,
Não as duas que ele teve,
Mas só a que eles não têm.
E assim nas calhas da roda
Gira, a entreter a razão,
Esse comboio de corda
Que se chama o coração.
"""
----
^^*^^ - An account of one's psychological outlook or development written by oneself.
Autumn is a second spring when every leaf is a flower.
''Avoid Seeking Exact Definitions''
Most English descriptions of unique Japanese words like ikigai are one person’s best attempt to convey their own unique understanding of a complex and highly personal concept. The results are often vague, frustrating, or disappointing.
What you can learn from this is that you should let go of a desire for exact definitions and instead embrace the idea of having long discussions on these concepts to understand their ambiguity, and acknowledge that they are cultural, unique and personal, and therefore cumulatively multifaceted.
If you can do this, you open yourself up to a world of learning about the various nuanced interpretations of, and approaches to, ikigai — and about the Japanese language in general, which features many words that hold a deep and philosophical meaning yet are used in everyday conversation.
: -- from [["Ikigai — Not a Special Word"|https://medium.com/japonica-publication/ikigai-not-a-special-word-762fe6d8c0fd]] by [[Nicholas Kemp]]
On the other hand, compare to what [[Marilynne Robinson]] had to say [[On the perfect aptness of words]].
> Self-awareness is a supreme gift, a treasure as precious as life. This is what makes us human. But it comes with a costly price: the wound of mortality. Our existence is forever shadowed by the knowledge that we will grow, blossom, and, inevitably, diminish and die.
:: -- [[Irvin Yalom]] in his book "//Staring at the Sun"//
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
* Life is an endless struggle, full of frustrations and challenges. But eventually you find a hairstylist you like.
* To be in your children's memories tomorrow, you have to be in their lives today.
*Never let a problem to be solved become more important than a person to be loved.
*Life is hard and then we die!
*Cheer Up the worst is yet to come!
*Hope is not the conviction that something will turn out well, but the certainty that something makes sense regardless of how it turns out.
*There's only one way to deal with misery...I say Avoid it.
* If you can forgive the person you were, accept the person you are, and believe in the person you will become, you are headed for joy.
* Life is a refining process. Our response to it determines whether we'll be ground down or polished up. On a piano, one person sits down and plays sonatas, while another merely bangs away at "Chopsticks." The piano is not responsible. It's how you touch the keys that makes the difference. It's how you play what life gives you that determines your joy and shine.
* Laughter is to life what shock absorbers are to automobiles. It won't take the potholes out of the road, but it sure makes the ride smoother.
* Laughing is like changing a baby's diaper. It doesn't solve any problems permanently, but it makes things more acceptable for awhile.
* Attitude is the mind's paintbrush; it can color any situation.
* It never hurts your eyesight to look on the bright side of things.
** or as [[Winston Churchill]] had said: I have never developed indigestion from eating my words.
* The secret of growing younger is counting blessings, not birthdays.
* How will you use the years God [or Life] gives you? Will you be remembered for being a fault-finder? Or will you be known for your quick smile, the laugh lines around your eyes, and the twinkle deep within? After all, God [or Nature] gives you your face, but you provide the expression!
"""
Base words are uttered only by the base
And can for such at once be understood;
But noble platitudes — ah, there's a case
Where the most careful scrutiny is needed
To tell a voice that's genuinely good
From one that's base but merely has succeeded.
"""
: -- Base words are uttered (1940), lines 1–5
It is played everywhere: in parks and playgrounds, prison yards, in back alleys and farmers’ fields; by small boys and old men, raw amateurs and millionaire professionals.
It is a leisurely game that demands blinding speed; the only game in which the defense has the ball. It follows the seasons, beginning each year with the fond expectancy of springtime and ending with the hard facts of autumn.
[...]
At its heart lie mythic contradictions: a pastoral game born in crowded cities, an exhilarating democratic sport that tolerates cheating, and has excluded as many as it has included. A profoundly conservative game that often manages to be years ahead of its time. It is an American Odyssey that links sons and daughters to fathers and grandfathers, and it reflects a host of age-old American tensions; between workers and owners, scandal and reform, the individual and the collective.
It is a haunted game in which every player is measured with the ghosts of those who have gone before. Most of all it is about time and timelessness, speed and grace, failure and loss, imperishable hope, and coming home.
: -- The narrator, John Chancellor, in the 18 hour documentary //Baseball//.
(see also [[Analysis Of Baseball - poem by May Swenson]]).
Matsuo Bashō (1644 – November 28, 1694), born Matsuo Kinsaku, then Matsuo Chūemon Munafusa was the most famous poet of the Edo period in Japan. During his lifetime, Bashō was recognized for his works in the collaborative haikai no renga form; today, after centuries of commentary, he is recognized as a master of brief and clear haiku. His poetry is internationally renowned, and within Japan many of his poems are reproduced on monuments and traditional sites.
From [[Inquiring Mind|https://www.inquiringmind.com/article/2602_32_mcmahon/]]:
Rare, polished, costly, the worldly jewel is not the same as the Dharma jewel, by contrast common, rough-cut and without market value. The Dharma jewel is so unremarkable that it takes a person of unusual insight to remark it, and remark so vividly that others see it as a treasure. Basho, the seventeenth-century Zen poet and pilgrim walking the back roads of Japan, is such a person, and the haiku that record his journeys, geographic and spiritual, are gems as works of art, as insights—the two one thing. Buddhists of all schools, we are Basho’s Dharma heirs, not of the art of the poetry alone, but more the art of the direct perception that reveals the jewels in our own lives.
<<list-links "[tag{!!title}]">>
Be brave. It is okay and even good that you are afraid. Do not strive for fearlessness, for the world is a dangerous place, and to be fearless is to be stupid. Bravery is not the absence of fear, but courage in the face of it.
: -- from [[her|Iris Smyles]] interview [["Iris Has A Lot Less Free Time (And Another Book Next Month)"|https://jameslanepost.com/iris-has-a-lot-less-free-time-and-another-book-next-month/05/24/2022/Hamptons-News-Happenings]]
Be calm, witty, and alert (while navigating through life).
Which I fully accept as good ("most excellent" :) advice for skillful and mindful living.
*Stay calm (and [[patient|The ultimate perfection of patience does not come from endurance or a re-evaluation of a situation. Rather it comes from the absence of our habitual, automatic triggers and reactive hooks to the challenges of life. Fully mature, patience is effortless. It is not a doing at all.]], but [[you may be disturbed|When you are not disturbed, it's only because you are not disturbed, not because nothing is disturbing. It is true that nothing is intrinsically disturbing, but as long as you can be disturbed, you can't know that.]])
*Keep your wits (think and don't lose [[hope|Hope is not the same thing as optimism. It is not the conviction that something will turn out well, but the certainty that something makes sense, regardless of how it turns out.]])
* Be alert ([[pay attention|If you are bored, you are not paying attention.]], and [[stay curious|The cure for boredom is curiosity. There is no cure for curiosity.]], and [[be prepared|The secret of success in life is for a man to be ready for his opportunity when it comes.]])
Be careful what you pretend to be because you are what you pretend to be.
Be careful whose advice you buy, but be patient with those who supply it. Advice is a form of nostalgia. Dispensing it is a way of fishing the past from the disposal, wiping it off, painting over the ugly parts and recycling it for more than it's worth.
: -- from [[her commencement speech|http://scripting.com/specials/commencement.html]], which erroneously was attributed to [[Kurt Vonnegut]].
Be interested. Everyone wants to be interesting^^1^^ – but the vitalizing thing is to be interested. Keep a sense of curiosity. Discover new things. Care. Risk failure. Reach out.
[[John W. Gardner]] speaking about [[Personal Renewal|http://www.pbs.org/johngardner/sections/writings_speech_1.html]]
Or as [[Howard Thurman]] had said:
[[Don’t ask what the world needs. Ask what makes you come alive, and go do it. Because what the world needs is people who have come alive.]]
(compare to [[Arthur C. Brooks]]'s: [[One of the secrets to happiness: It’s better to consume humor than to supply it. It’s also a lot easier.]]).
----
^^1^^ [[Wilson Mizner]] commented on this:
> Don't talk about yourself; it will be done when you leave.
or, similarly (and anonymously):
> Those who can't laugh at themselves leave the job to others.
[life advice]
Be kind whenever possible. It is always possible.
or, as [[William Makepeace Thackeray]] wrote:
>Never lose a chance of saying a kind word.
(Compare to [[Calvin Trillin]]'s advice [[on being kind|You might as well be a mensch.]]).
Or as [[Kurt Vonnegut]] (in //If This Isn't Nice, What Is?: Advice for the Young//) had said:
>There’s only one rule I know of—Goddam it, you’ve got to be kind.
Be kind, for everyone you meet is fighting a great battle.
Also compare to [[Ram Das's take|When all is said and done, we're really just all walking each other home.]]
And also [[Jack Kornfield's take|Life is so hard, how can we be anything but kind?]]
Be not afraid of growing slowly. Be afraid only of standing still.
- Chinese proverb
Franklin D. Roosevelt Instructions for making a speech: Be sincere; be brief; be seated.
Be thankful we're not getting all the government we're paying for.
Be yourself; everyone else is already taken.
(compare to [[G. H. Hardy]]'s [[logic on this|It is not worth an intelligent person's time to be in the majority. By definition, there are already enough people to do that.]])
[individuality]
Beauty is no quality in things themselves: It exists merely in the mind which contemplates them; and each mind perceives a different beauty.
Compare to [[John O’Donohue]]'s: [[Beauty is that, in the presence of which, we feel more alive.]]
Compare to [[Quality is the source of subjects and objects; subjects and objects are not the source of quality.]]
Beauty is that, in the presence of which, we feel more alive.
Compare to [[David Hume]]'s: [[Beauty is no quality in things themselves: It exists merely in the mind which contemplates them; and each mind perceives a different beauty.]]
:{{imgquote}} Because children grow up, we think a child’s purpose is to grow up. But a child’s purpose is to be a child. Nature doesn’t disdain what only lives for a day. It pours the whole of itself into each moment. . . . Life’s bounty is in its flow, later is too late.
:: -- adapted by Tom Stoppard in “The Coast of Utopia”
The original: Russian philosopher Alexander Herzen said, after the unimaginable loss of a child drowned:
:{{imgquote}} We think the purpose of a child is to grow up because it does grow up. But its purpose is to play, to enjoy itself, to be a child. If we merely look to the end of the process, the purpose of life is death.
In Western rhetoric, the ancient art of speaking, appropriateness is the core concept. Your speech, so the idea goes, can only be effective if it is in right relation to yourself (the speaker), your audience, the subject matter, and the situation in which the speech is given. Zen more or less shares this idea but extends it beyond speech to any expression. Any thought, speech, or action is supposed to be appropriate not only for the four variables listed above but for the complexity of the entire world – the “ten thousand dharmas” as the tradition refers to it. The questions then become; How can we tune ourselves to the ten thousand dharmas? How can we let the ten thousand dharmas gather within us and inform our responses?
Because everything is complex and changing at all times, there is no way to prescribe the “right” response in advance. Each moment is unique and fundamentally unpredictable. To “know” means to live the present based on the experiences of the past. There are some who will argue that big data is changing this situation. It is slowly and eerily becoming common knowledge that your social media account “knows” you better than your friends, your spouse, and even you yourself do. While statistical probabilities are good enough for certain applications—whether motivated by good or manipulative intentions—they say nothing definitive about this one singular action now. What brings me into accord with this very situation now? What action is appropriate, and with what words and gestures should it be enacted?
: -- from [[his|Christian Dillo]] post titled [["‘An Appropriate Response’: Christian Dillo on the Nature of Buddhist Wisdom"|https://thedewdrop.org/2022/10/10/what-is-wisdom-christian-dillo/]]
>Our hopes of ongoing life encourage us to create illusions of comfort like the idea of immortality. Because of the strong motivation to deceive ourselves about the reality of death, we should confront at least the possibility, if not the high probability, that death is ‘it’. Many would disregard this view as being bleak and offering no redemption, but as I will explain, it is quite the opposite. Acknowledging the truth of death reveals life as being the most precious thing we have. Indeed, it is the only thing.
and, as an example of the above-mentioned tendency/motivation, Hawken quotes a great passages about death from Leo Tolstoy in ''The Death of Ivan Ilych'':
>The syllogism he had learnt from Kiesewetter’s Logic: ‘Caius is a man, men are mortal, therefore Caius is mortal,’ had always seemed to him correct as applied to Caius, but certainly not as applied to himself. That Caius – man in the abstract – was mortal, was perfectly correct, but he was not Caius, not an abstract man, but a creature quite, quite separate from all others.
from [[a passage by Tim Hawken|https://www.litkicks.com/DenialDeath]]
Because philosophy arises from awe, a philosopher is bound in his way to be a lover of myths and poetic fables. Poets and philosophers are alike in being big with wonder.
Because the Internet is so new, we still don't really understand what it is. We mistake it for a type of publishing or broadcasting, because that's what we're used to.
So people complain that there's a lot of rubbish online, or that it's dominated by Americans, or that you can't necessarily trust what you read on the Web.
(compare to [[what Groucho Marx had to say about the media|I find television very educating. Every time somebody turns on the set, I go into the other room and read a book.]])
Because the signs of time's coming and going are obvious, people do not doubt it. Although they do not doubt it, they do not understand it.
Because we are not designed to be more orderly than anything else ..., if you can’t ever end things neatly, can’t ever put them back quite the way you found them, surely the alternative is to remain stubbornly carbonated with possibility, to never rest from your rotation. To keep assembling stories ... about how everything was everything, about how much [love is essential].
"""
Sparrows were feeding in a freezing drizzle
That while you watched turned into pieces of snow
Riding a gradient invisible
From silver aslant to random, white, and slow.
There came a moment that you couldn't tell.
And then they clearly flew instead of fell.
"""
[transformation] [metamorphosis] [metaphor]
Before one studies Zen, mountains are mountains and rivers are rivers;
after practicing Zen for a while, one sees that mountains are not really mountains and rivers are not really rivers;
after a long effort and practice, one sees that mountains are mountains again and rivers are rivers again.
One interpretation:
Before you study Buddhism, you see everything as their literal form. When you begin to study Buddhism, you come to realize that all things are manifestations of the same truth. When you gain enlightenment, you can appreciate things for what they are, knowing their form is both impermanent and eternal.
This idea/sense expressed in a Western-style (- Neil Gaiman and Terry Pratchett, Good Omens):
Nothing much has changed; except everything.
Or as the [["The Platform Sutra, by Hui-neng & Red Pine" claims|http://buddhaspace.blogspot.com/2012/06/review-platform-sutra-by-hui-neng-red.html]] :
"""
"The body is a bodhi tree
the mind is like a standing mirror
always try to keep it clean
don't let it gather dust."
(Ibid. p.6)
"Bodhi doesn't have any trees
this mirror doesn't have a stand
our buddha nature is forever pure
where do you get this dust?"
(Ibid. p.8)
"The mind is the body tree
the body is the mirror's stand
the mirror itself is so clean
dust has no place to land"
(Ibid. p.8)
"""
Before you speak, pause and establish in yourself:
Do I speak at the right time, or not?
Do I speak of facts, or not?
Do I speak gently or harshly?
Do I speak profitable words or not?
Do I speak with a kindly heart, or inwardly malicious?
Being attentive to the needs of others might not be the point of life, but it is the work of life.
: -- from his article [[How not to be Alone|https://www.nytimes.com/2013/06/09/opinion/sunday/how-not-to-be-alone.html]].
Being forced to write comments actually improves code, because it is easier to fix a crock than to explain it.
(compare to what [[Pete Goodliffe]] had said about [[code commenting|Let's not overstate the case - there are things far more important to get right than comments. When you've written truly good code your comments are the icing on the cake, delicately placed to add aesthetics and value, rather than liberally slapped on to cover up all the cracks and blemishes.]])
Being reliable does not mean being constant, or the same every and all the time. Being reliable means being appropriate, regardless of the shifts and changes in the situation.
Or as [[Carlo Rovelli]] had said:
> Lack of certainty is precisely what makes conclusions more reliable than the conclusions of those who are certain: because the good scientist will be ready to shift to a different point of view if better elements of evidence, or novel arguments emerge. Therefore certainty is not only something of no use, but is in fact damaging, if we value reliability.
Being resilient doesn't mean feeling good all the time - it means you're good with feeling bad sometimes.
(see also [[Hope is not the same thing as optimism. It is not the conviction that something will turn out well, but the certainty that something makes sense, regardless of how it turns out.]]).
(and [[In order to be hopeful we needn’t believe that everything will turn out well, we need only believe that we are on the right path.]]).
[Being smart about being wise:] The most foolish of all errors is for clever young men to believe that they forfeit their originality in recognizing a truth which has already been recognized by others.
<<list-links "[tag{!!title}]">>
The Basque essayist [[Miguel de Unamuno]] wrote in 1913 that belief in God ‘without anguish in mind, without uncertainty, without doubt, without an element of despair’ is not belief in God at all, but belief in a mere idea of God.
On these terms, [[Martin Buber]] was a true believer, describing himself as ‘a man struggling ever anew for God’s light and ever anew vanishing into God’s abysses’. He distrusted the systemisation of the spiritual instinct. In the same way that Leo Tolstoy was a passionate Christian who came to loathe his national church, Buber was a self-described ‘arch-Jew’ who thought that institutionalised faith ossified and corrupted the life of the spirit.
: -- from [[his|M M Owen]] article [[I and Thou|https://aeon.co/essays/all-real-living-is-meeting-the-sacred-love-of-martin-buber]]
Belief is one of the most powerful organic forces in the multiverse. It may not be able to move mountains, exactly. But it can create someone who can. People get exactly the wrong idea about belief. They think it works back to front. They think the sequence is, first object, then belief. In fact, it works the other way.
Believe none of what you hear, half of what you read, and a little of what you see.
: -- from [[Icarusfalling's blog|http://icarus-falling.blogspot.com/2011/08/map-is-not-territory-and.html]]
[rumors] [misinformation] [credibility]
Believe those who are seeking the way; doubt those who find it.
See also: [[Basho Matsuo|I do not seek to follow the footsteps of the men of old; I seek what they sought.]]
As for faith, I’ve always called myself an agnostic. Were [[Ambrose Bierce]] alive today, he would no doubt have added to his Devil’s Dictionary: “An agnostic is a cowardly atheist.” Perhaps. But perhaps I do believe there is a God deposited in each of us ever since the Big Bang.
''I secretly envy those who believe in the hereafter and with it the idea that they may once again meet dear ones. They cannot prove beyond a reasonable doubt that there is such a place. Neither can I disprove it. I cannot find the bookmaker [gamble maker; bookie] willing to take my bet on it. How will one who guesses right be able to collect his winnings? So speaking on behalf of the bookies of the world, all bets are off.''
: -- from his [[Forward|https://www.npr.org/books/titles/138227302/this-i-believe-the-personal-philosophies-of-remarkable-men-and-women]] to the book [[This I believe: The Personal Philosophies of Remarkable Men and Women|https://www.npr.org/books/titles/138227302/this-i-believe-the-personal-philosophies-of-remarkable-men-and-women]]
<<comparequote "Ian McEwan" "Those who believe in the afterlife will never be disappointed. That's because if they're wrong, they'll never know about it." "the afterlife">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
British philosopher, mathematician, historian, and social critic.
<<list-links "[tag{!!title}]">>
Better safe than sorry, from natural selection’s point of view. “False positives” are a feature, not a bug, even though they make you suffer by fostering an illusion.
from his book “Why Buddhism Is True: The Science and Philosophy of Meditation and Enlightenment”
(or "shouldn't you put your money where your mouth is?")
It is said that in Niels Bohr's (the great Danish physicist) house there was a horseshoe hanging over one door, and a friend asked him, “What’s this all about?”
Bohr answered, “Well, horseshoes are supposed to bring good luck, so we put it up there.”
The friend then said, “Come now — surely you don’t believe it brings good luck, do you?”
Bohr laughed and said, “Of course not!”
And then he added, “But they say it works even if you don’t believe in it.”
"""
"""
or as Andrew W. Mathis said:
> It is bad luck to be superstitious.
"""
"""
This reminds me of a story about the philosopher [[Sidney Morgenbesser|https://en.wikiquote.org/wiki/Sidney_Morgenbesser]]:
A few weeks before his death, he asked another Columbia philosopher, David Albert, about God. "Why is God making me suffer so much?" he asked. "Just because I don't believe in him?"
Between stimulus and response, there is a space. In that space lies our freedom and power to choose our response. In our response lies our growth and freedom.
[[Carl Bard]] expressed a [[similar idea|Though no one can go back and make a brand new start, anyone can start from now and make a brand new ending.]].
An interesting angle on this by [[Ursula K. Le Guin]]:
:{{imgquote}} Between thought and spoken word is a gap where intention can enter, the symbol twisted aside, and the lie come to be. (from her book "//City of Illusions//").
This echoes [[Vidyamala Burch]]'s observation:
> [[The behavioural outcome of meditation and mindfulness is choice.]]
(compare to what [[Seneca]] had to say about this [[gap/space|We can often insert attention and will and monitor “impulsive impressions” and the quick bodily responses that follow — nip them in the bud — before we yield to them in irrational ways.]])
"""
American operatic soprano whose peak career was between the 1950s and 1970s. In her prime she was the only real rival to Joan Sutherland as the leading bel canto stylist.
Born: May 25, 1929, Brooklyn
Died: July 2, 2007, New York City
"""
<<list-links "[tag{!!title}]">>
[[Donald Knuth]] (dryly?) commenting:
Beware of bugs in the above code; I have only proved it correct, not tried it.
versus an average programmer's reality:
Beware of bugs in the above code; I have only tried it, not proved it correct.
[modesty] [humility]
The creator of Microsoft.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
https://www.ted.com/speakers/bj_miller
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
from https://www.newharbinger.com/author/robert-alberti
author of //Rebuilding//.
<<list-links "[tag{!!title}]">>
http://english.unt.edu/people/bonnie-friedman-mfa
<<list-links "[tag{!!title}]">>
Book collecting is an obsession, an occupation, a disease, an addiction, a fascination, an absurdity, a fate. It is not a hobby. Those who do it must do it. Those who do not do it, think of it as a cousin of stamp collecting, a sister of the trophy cabinet, bastard of a sound bank account and a weak mind.
From [[the BrainPickings entry|https://www.brainpickings.org/2016/05/04/duck-death-and-the-tulip-wolf-erlbruch/]]:
One day, Duck turns around to find Death standing behind her. Terrified, she asks whether he has come to take her, but he remarks rather matter-of-factly that he has been there her entire life.
At first chilled by the notion of Death’s lifelong proximity, Duck slowly, cautiously, curiously acquaints herself with him.
Death gave her a friendly smile.
Actually he was nice (if you forgot for a moment who he was).
Really quite nice.
!! The full book text:
"""
For a while now, Duck had had a feeling.
"Who are you? What are you up to, creeping along behind me?"
"Good," said Death, "you finally noticed me. I am Death."
Duck was scared stiff, and who could blame her?
"You've come to fetch me?"
"Oh, I've been close by all your life -- just in case."
"In case of what?" asked Duck.
"In case something happens to you. A nasty cold, an accident -- you never know."
"Are you going to make something happen?"
"Life takes care of that: the coughs and colds and all the other things that happen to you ducks. //Fox//, for example."
Duck tried not to think about that. It gave her goosebumps.
Death gave her a friendly smile.
Actually he was nice (if you forgot for a moment //who// he was).
Really quite nice.
"Shall we go down to the pond?" she asked.
Death had been dreading that.
Before long, Death decided that he had his limits.
"Forgive me," he said. "I really must get away from this damp."
"Are you cold?" Duck asked. "Shall I warm you a little?"
Nobody had ever offered to do that for Death.
Duck woke first, very early in the morning.
"I'm not dead," she thought to herself.
She poked Death in the ribs. "I'm not dead!" she quacked, utterly delighted.
"I'm pleased for you," Death said, stretching.
"And if I'd died?"
"Then I wouldn't have been able to sleep in," Death Yawned.
That wasn't a nice thing to say, thought Duck.
For a while she refused to speak, but soon she was chattering again.
"Some ducks say you become and angel and sit on a cloud, looking over the earth."
"Quite possibly." Death rose to his feet. "You have the wings already."
"Some ducks say that deep in the earth there's a place where you'll be roasted if you haven't been good."
"You ducks come up with some amazing stories, but who knows?"
"So you don't know either," Duck snapped.
Death just looked at her.
"What shall we do today?" Death asked.
"Well, let's not go back to the pond. Let's do something really exciting."
Death was relieved. "Shall we climb a tree?" he teased.
They could see the pond far below.
There it lay. So still. And so lonely.
"That's what it will be like when I'm dead," Duck thought.
"The pond alone, without me."
Death could sometimes read minds. "When you are dead, the pond will be gone, too -- at least for you."
"Are you sure?" Duck was astonished.
"As sure as sure can be," Death said.
"That's a comfort. I won't have to mourn over it when ..."
"... when you're dead." Death finished the sentence. He wasn't coy about the subject.
"Let's climb down," Duck pleaded after a bit. "You can start having strange thoughts in trees."
Summer was ending and they went less and less often to the pond.
They sat together in the grass, saying little.
When a cool wind ruffled her feathers, Duck felt its chill for the first time.
"I'm cold," she said one evening. "Will you warm me a little?"
Snowflakes drifted down.
Something had happened. Death looked at the duck.
She'd stopped breathing. She lay quite still.
Death stroked a few rumpled feathers back into place,
then he carried her to the great river.
He lay her gently on the water and nudged her on her way.
For a long time he watched her.
When she was lost to sight, he was almost a little moved.
"But that's life," thought Death.
"""
Books not only help to reveal who we are; they help us to transcend who we were.
Found on [[Loren Webster's blog|http://www.lorenwebster.net/In_a_Dark_Time/why-blog/]]
Boredom is just the reverse side of fascination: both depend on being outside rather than inside a situation, and one leads to the other.
[attention] [engagement]
(compare to [[If you are bored, you are not paying attention.]])
The importance of time is rather practical than theoretical, rather in relation to our desires than in relation to truth. A truer image of the world, I think, is obtained by picturing things as entering into the stream of time from an eternal world outside, than from a view which regards time as the devouring tyrant of all that is. ''Both in thought and in feeling, even though time be real, to realise the unimportance of time is the gate of wisdom.''
That this is the case may be seen at once by asking ourselves why our feelings towards the past are so different from our feelings towards the future. The reason for this difference is wholly practical: our wishes can affect the future but not the past, the future is to some extent subject to our power, while the past is unalterably fixed. But every future will some day be past: if we see the past truly now, it must, when it was still future, have been just what we now see it to be, and what is now future must be just what we shall see it to be when it has become past.
''The felt difference of quality between past and future, therefore, is not an intrinsic difference, but only a difference in relation to us: to impartial contemplation, it ceases to exist.''
And impartiality of contemplation is, in the intellectual sphere, that very same virtue of disinterestedness which, in the sphere of action, appears as justice and unselfishness. Whoever wishes to see the world truly, to rise in thought above the tyranny of practical desires, must learn to overcome the difference of attitude towards past and future, and to survey the whole stream of time in one comprehensive vision.
[…]
The beliefs of to-day may count as true to-day, if they carry us along the stream; but to-morrow they will be false, and must be replaced by new beliefs to meet the new situation. All our thinking consists of convenient fictions, imaginary congealings of the stream: reality flows on in spite of all our fictions, and though it can be lived, it cannot be conceived in thought.
Both religion and literature are narratives whose purpose is to put human life, causality, and meaning in relation, to make each of them in some degree intelligible in terms of the other two.
Shuzan held up his staff and waved it before his monks.
“If you call this a staff,” he said, “you deny its eternal life. If you do not call this a staff, you deny its present fact. Tell me just what do you propose to call it?”
[paradox] [context] [usefulness] [poetry]
[[עירובין י״ג ב|https://www.sefaria.org/Eruvin.13b.10?ven=William_Davidson_Edition_-_English&vhe=William_Davidson_Edition_-_Vocalized_Aramaic&lang=bi&with=all&lang2=en]]:
"""
אָמַר רַבִּי אַבָּא אָמַר שְׁמוּאֵל: שָׁלֹשׁ שָׁנִים נֶחְלְקוּ בֵּית שַׁמַּאי וּבֵית הִלֵּל, הַלָּלוּ אוֹמְרִים: הֲלָכָה כְּמוֹתֵנוּ, וְהַלָּלוּ אוֹמְרִים: הֲלָכָה כְּמוֹתֵנוּ. יָצְאָה בַּת קוֹל וְאָמְרָה: אֵלּוּ וָאֵלּוּ דִּבְרֵי אֱלֹהִים חַיִּים הֵן, וַהֲלָכָה כְּבֵית הִלֵּל.
Rabbi Abba said that Shmuel said: For three years Beit Shammai and Beit Hillel disagreed. These said: The halakha is in accordance with our opinion, and these said: The halakha is in accordance with our opinion. Ultimately, a Divine Voice emerged and proclaimed: Both these and those are the words of the living God. However, the halakha is in accordance with the opinion of Beit Hillel.
וְכִי מֵאַחַר שֶׁאֵלּוּ וָאֵלּוּ דִּבְרֵי אֱלֹהִים חַיִּים, מִפְּנֵי מָה זָכוּ בֵּית הִלֵּל לִקְבּוֹעַ הֲלָכָה כְּמוֹתָן? מִפְּנֵי שֶׁנּוֹחִין וַעֲלוּבִין הָיוּ, וְשׁוֹנִין דִּבְרֵיהֶן וְדִבְרֵי בֵּית שַׁמַּאי, וְלֹא עוֹד אֶלָּא שֶׁמַּקְדִּימִין דִּבְרֵי בֵּית שַׁמַּאי לְדִבְרֵיהֶן.
The Gemara asks: Since both these and those are the words of the living God, why were Beit Hillel privileged to have the halakha established in accordance with their opinion? The reason is that they were agreeable [pleasant] and forbearing [patient and restrained; also humble], showing restraint when affronted, and when they taught the halakha they would teach both their own statements and the statements of Beit Shammai. Moreover, when they formulated their teachings and cited a dispute, they prioritized the statements of Beit Shammai to their own statements, in deference to Beit Shammai.
( אלו ואלו דברי אלהים חיים: Elu ve-elu divrei elohim chaim)
[[Eruvin 13b:10-11|https://www.sefaria.org/Eruvin.13b.10?ven=William_Davidson_Edition_-_English&vhe=William_Davidson_Edition_-_Vocalized_Aramaic&lang=bi&with=all&lang2=en]]
For three years, the House of Hillel and the House of Shammai argued. One said, 'The halakha is like us,' and the other said, 'The halakha is like us.'
A heavenly voice spoke: "These and these are the words of the living God, and the halakha is like the House of Hillel."
A question was raised: Since the heavenly voice declared: "Both these and those are the words of the Living God," why was the halacha established to follow the opinion of Hillel?
It is because the students of Hillel were kind and gracious. They taught their own ideas as well as the ideas from the students of Shammai. Not only for this reason, but they went so far as to teach Shammai's opinions first.
"""
Rabbi Joseph Telushkin, The Book of Jewish Values: A Day-By-Day Guide to Jewish Living, New York: Random House, 2000, pp. 186-7:
Significantly, the heavenly voice ruled in favor of Hillel and his disciples, even in areas of ritual dispute, for moral reasons: he and his followers were “kindly and humble.”
The wording of the passage suggests that Shammai’s followers had grown somewhat arrogant. Certain that they possessed the truth, they no longer bothered to listen to, or discuss the arguments of, their opponents. Their overbearing self-confidence led them to become morally less impressive (the language of the Talmud suggests by implication that they were not “kindly and humble”) and probably led them to become intellectually less insightful (after all, how insightful can you be if you are studying only one side of the issue?)
Because the School of Hillel studied their opponent’s arguments, when they issued a ruling, they were fully cognizant of all the arguments to be offered against their own position. Thus, their humility not only led to their being more pleasant people, but also likely caused them to have greater intellectual depth.
We can all learn a lesson from the behavior of Hillel and his followers: Don’t read only books and publications that agree with and reinforce your point of view. If you do so, and many people do, you will never learn what those who disagree with you believe (at best, you will hear a caricature of their position, presented by people who, like you, disagree with it). It would be a good thing in Jewish life if Jews in the different denominations, or in different political camps, started reading newspapers and magazines of the groups with which they disagree, on a regular basis.
If you seldom hear, read, or listen to views that oppose your own, and if almost everyone you talk to sees the world just as your do, your thinking will grow flabby and intolerant. That is often the case with ideologues on the right and left, both in religion and in politics.
As this text teaches us, humble people are not only more pleasant human beings, but in the final analysis, they may well be the only ones who will have something eternally important to teach.
[Pirkei Avot]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
http://worrydream.com/
<html>
<table>
<tr>
<td width="40%">
<a href="./resources/bret.png" target="new"><img src="./resources/bret.png" width="100%" height="100%" /></a>
</td>
<td width="60%">
<pre>
In the schools, I trained in the way of the Electron.
On the streets, I learned the way of the Algorithm
And I mastered these paths, but they were false paths. Their followers knew only the Yang of Technology, and worshiped the Code. But technology has no soul, and code no conscience. And I despaired.
Yet I sought, and after many seasons, I found the Yin of Design. It spoke of people, not things. I studied the way of the Interface, of human perception and understanding.
And I mastered this path, but it was a false path. Its followers were taught to answer questions. They could not question the questions themselves. And I despaired.
Yet I sought, and I thought, and I pursued my own path. And with time, I was enlightened.
The True Way transcends the minutiae of Skill. There is no "Technology”. There is no "Design". There is only a vision of how humanity could be, and the relentless resolve to make it so. The rest is details.
</pre>
</td>
</tr>
</table>
</html>
<<list-links "[tag{!!title}]">>
Author of the book "The Most Human Human" about his experiences participating in a Turing Test competition.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Professor at UC Berkeley
Inventor (with Jens Mönig) of the Snap! programming environment (modeled after Scratch from MIT).
<<list-links "[tag{!!title}]">>
http://bit-player.org/about-the-author
<<list-links "[tag{!!title}]">>
[[Brian Kernighan|http://en.wikipedia.org/wiki/Kernighan]] (a "[[CS Sage|https://en.wikipedia.org/wiki/List_of_computer_scientists]]")
<<list-links "[tag{!!title}]">>
from: https://en.wikipedia.org/wiki/Brian_Martin_(social_scientist)
Brian Martin (born 1947) is a social scientist in the School of Humanities and Social Inquiry, Faculty of Arts, Social Sciences and Humanities, at the University of Wollongong (UOW) in NSW, Australia.
<<list-links "[tag{!!title}]">>
motivational speaker.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
The essence of Buddhism is responding appropriately to the particularity of every situation.
: -- from a Zen Koan
<<list-links "[tag{!!title}]">>
Buddhism is a clever way to enjoy life.
<<list-links "[tag{!!title}]">>
Bureaucrats cut red tape - - lengthwise.
-- Unix fortune
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
My perspective on this is that we’re really not surprised nearly often enough, because one of the things that really happens, as soon as an event occurs, we have a story. That’s automatic, that System 1 generates stories. It looks for causes; it looks for stories; and it generates its tentative stories that, if endorsed by System 2, become beliefs and opinions.
But the speed at which we find explanations for things that happened makes it difficult for us to learn the deep truth. And the deep truth is that the world is much more uncertain than we feel it is. We see a version of the world that is simplified and just a lot simpler and a lot more certain than the world really is.
When people use the word “rational,” I think, what they mean by this is that there is a good reason for what you believe and what you do. If there is a good reason for it, you believe in what you do, then you are rational.
But if we accept that in general, our more important beliefs are not rooted in arguments, that there is no good reason for why we have this religion or that religion or this politics or that politics; it’s just something that happened to us — that changes the nature [of how we think and feel about it].
We shouldn’t be looking for rationality so much, because by using the word, we seem to expect it to happen. And I think that’s just not the way the mind works.
In the first sutta in the Samyutta Nikaya (the Connected Verses), the Buddha is asked how he “crossed the flood,” meaning, how he became enlightened. His answer is so simple:
“By not halting and not straining, I crossed the flood.” Then he’s asked how that worked. “When I halted I sank; when I struggled I was swept away.”
This was a perfect characterization of what you may want to try to follow in your own practice—just keep showing up no matter what, without striving too hard.
: -- from his essay [["Bad Meditator"|https://www.inquiringmind.com/article/2202_24_griffin_bad-meditator/]]
From [[her Gifford lecture|https://www.giffordlectures.org/lectures/life-mind]]:
<<<.tc-big-quote
By posing the unanswerable questions of meaning, men establish themselves as question-asking beings. Behind all the cognitive questions for which men find answers, there lurk the unanswerable ones that seem entirely idle and have always been denounced as such.
It is more than likely that men, if they were ever to lose the appetite for meaning we call thinking and cease to ask unanswerable questions, would lose not only the ability to produce those thought-things that we call works of art but also the capacity to ask all the answerable questions upon which every civilization is founded…
While our thirst for knowledge may be unquenchable because of the immensity of the unknown, the activity itself leaves behind a growing treasure of knowledge that is retained and kept in store by every civilization as part and parcel of its world. The loss of this accumulation and of the technical expertise required to conserve and increase it inevitably spells the end of this particular world.
<<<
[[Carl Sagan]] would come to echo the same sentiment, twelve years later in [[his own Gifford lecture|https://www.giffordlectures.org/lectures/search-who-we-are]] — “If we ever reach the point where we think we thoroughly understand who we are and where we came from, we will have failed.”
[[David Deutsch]] expressed a similar sentiment on knowledge creation: [[The most important of all limitations on knowledge–creation is that we cannot prophecy: we cannot predict the content of ideas yet to be created, or their effects. This limitation is not only consistent with the unlimited growth of knowledge, it is entailed by it.]]
And [[Stanislaw Lem]] echoed this:
> A man craves ultimate truths. Every mortal mind, I think, is that way. But what is ultimate truth? It's the end of the road, where there is no more mystery, no more hope. And no more questions to ask, since all the answers have been given. But there is no such place.
>The Universe is a labyrinth made of labyrinths. Each leads to another.
It is certainly conceivable that the clarity we perceive in the world is something we bring to the world, not something that is there independent of us. The clarity of the natural world is a metaphysical belief that we unconsciously impose on the situation. We consider it to be obvious that the natural world is something exterior of us and independent of our thoughts and sense impressions; we believe in a mind-independent reality.
Paradoxically, we do not recognize that the belief in a mind-independent reality is itself mind-dependent. Logically, we cannot work our way free of the bubble we live in, which consists of all of our sense impression and thoughts. The pristine world of clarity, the natural world independent of the observer, is merely a hypothesis that cannot, in principle, ever be verified. To say that the natural world is ambiguous is to highlight this assumption. It is to emphasize that the feeling that there is a natural world 'out there' that is the same for all people at all times, is an assumption that is not self-evident. This is not to embrace a kind of solipsism and to deny the reality of the world. It is to emphasize that the natural world is intimately intertwined with the world of the mind. In consequence, the natural world is a flow just like the inner world.
''By stabilizing the inner world through language, logic, mathematics, and science, we simultaneously stabilize the outer world. The result of all this is the recognition that the clarity we assume to be a basic feature of the natural world merely masks a deeper ambiguity. One of the functions of mathematics and science is precisely to deny this ambiguity. This is really the motivation behind the science of certainty.''
: -- from [[his|William Byers]] book //“The Blind Spot”//
<<list-links "[tag{!!title}]">>
https://www.nytimes.com/2000/07/04/sports/stanley-ogilvy-87-sailor-and-writer-dies.html
<<list-links "[tag{!!title}]">>
Charles Antony (Tony) Richard Hoare (a "[[CS Sage|https://en.wikipedia.org/wiki/List_of_computer_scientists]]").
<<list-links "[tag{!!title}]">>
Calmness of mind does not mean you should stop your activity. Real calmness should be found in activity itself. We say, "It is easy to have calmness in inactivity, it is hard to have calmness in activity, but calmness in activity is true calmness.
<<list-links "[tag{!!title}]">>
Care more than others think wise.
<<list-links "[tag{!!title}]">>
Caring is a fundamental feature of being in the world … Controlling for all other variables, those given a potted plant to look after consistently lived longer than those who were not.
: ― from his book //The Moves That Matter: A Chess Grandmaster on the Game of Life//
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Video clip from the new Cosmos series ("[[Cosmos: A Spacetime Odyssey|http://channel.nationalgeographic.com/cosmos-a-spacetime-odyssey/]]" presented by Neil deGrasse Tyson) [[A Pale Blue Dot|https://www.youtube.com/watch?v=p86BPM1GV8M]] and [[Wikipedia|http://en.wikipedia.org/wiki/Pale_Blue_Dot]]:
!!!!Sagan's original text (from his book; also accompanying the video):
>From this distant vantage point, the Earth might not seem of any particular interest. But for us, it's different. Consider again that dot. That's here. That's home. That's us. On it everyone you love, everyone you know, everyone you ever heard of, every human being who ever was, lived out their lives. The aggregate of our joy and suffering, thousands of confident religions, ideologies, and economic doctrines, every hunter and forager, every hero and coward, every creator and destroyer of civilization, every king and peasant, every young couple in love, every mother and father, hopeful child, inventor and explorer, every teacher of morals, every corrupt politician, every "superstar," every "supreme leader," every saint and sinner in the history of our species lived there – on a mote of dust suspended in a sunbeam.
>The Earth is a very small stage in a vast cosmic arena. Think of the rivers of blood spilled by all those generals and emperors so that in glory and triumph they could become the momentary masters of a fraction of a dot. Think of the endless cruelties visited by the inhabitants of one corner of this pixel on the scarcely distinguishable inhabitants of some other corner. How frequent their misunderstandings, how eager they are to kill one another, how fervent their hatreds. Our posturings, our imagined self-importance, the delusion that we have some privileged position in the universe, are challenged by this point of pale light. Our planet is a lonely speck in the great enveloping cosmic dark. In our obscurity – in all this vastness – there is no hint that help will come from elsewhere to save us from ourselves.
>The Earth is the only world known, so far, to harbor life. There is nowhere else, at least in the near future, to which our species could migrate. Visit, yes. Settle, not yet. Like it or not, for the moment, the Earth is where we make our stand. It has been said that astronomy is a humbling and character-building experience. There is perhaps no better demonstration of the folly of human conceits than this distant image of our tiny world. To me, it underscores our responsibility to deal more kindly with one another and to preserve and cherish the pale blue dot, the only home we've ever known.
>>-- Carl Sagan, Pale Blue Dot: A Vision of the Human Future in Space, 1997 reprint, pp. xv–xvi
(see [[Marilynne Robinson]]'s take on [[the uniqueness of planet Earth|We should feel awe at the power of this little world to somehow remake time and scale so that we can wander and work and learn and finally grow old, and feel that the dimensions of our lives have been wide indeed.]]).
(see what [[Terry Pratchett]] had said about [[wondering about the miracle of life|You want fantasy? Here's one... There's this species that lives on a planet a few miles above molten rock and a few miles below a vacuum that'd suck the air right out of them...]]).
In an article titled [[The Fine Art of Baloney Detection|http://www.inf.fu-berlin.de/lehre/pmo/eng/Sagan-Baloney.pdf]] (see [[summery at BrainPickings|https://www.brainpickings.org/2014/01/03/baloney-detection-kit-carl-sagan/]]), Carl Sagan opens with this very personal, touching, and compassionate paragraph:
>My parents died years ago. I was very close to them. I still miss them terribly. I know I always will. I long to believe that their essence, their personalities, what I loved so much about them, are -- really and truly -- still in existence somewhere. I wouldn't ask very much, just five or ten minutes a year, say, to tell them about their grandchildren, to catch them up on the latest news, to remind them that I love them. There's a part of me -- no matter how childish it sounds -- that wonders how they are. "Is everything all right?" I want to ask. The last words I found myself saying to my father, at the moment of his death, were "Take care."
>
>Sometimes I dream that I'm talking to my parents, and suddenly -- still immersed in the dreamwork -- I'm seized by the overpowering realization that they didn't really die, that it's all been some kind of horrible mistake. Why, here they are, alive and well, my father making wry jokes, my mother earnestly advising me to wear a muffler because the weather is chilly. When I wake up I go through an abbreviated process of mourning all over again. Plainly, there's something within me that's ready to believe in life after death. And it's not the least bit interested in whether there's any sober evidence for it.
>
>So I don't guffaw at the woman who visits her husband's grave and chats him up every now and then, maybe on the anniversary of his death. It's not hard to understand. And if I have difficulties with the ontological status of who she's talking to, that's all right. That's not what this is about. This is about humans being human. More than a third of American adults believe that on some level they've made contact with the dead. The number seems to have jumped by 15 percent between 1977 and 1988. A quarter of Americans believe in reincarnation.
>
>But that doesn't mean I'd be willing to accept the pretensions of a "medium," who claims to channel the spirits of the dear departed, when I'm aware the practice is rife with fraud. I know how much I want to believe that my parents have just abandoned the husks of their bodies, like insects or snakes molting, and gone somewhere else. I understand that those very feelings might make me easy prey even for an unclever con, or for normal people unfamiliar with their unconscious minds, or for those suffering from a dissociative psychiatric disorder. Reluctantly, I rouse some reserves of skepticism.
(compare to [[Susan Moon]]'s [[experience and longing for her dead parents|Even after my parents' death I still have a relationship with them, and it's a relationship that can change, even though they keep on being dead. How I relate to them now is up to me.]]).
I would suggest that science is, at least in part, informed worship. My deeply held belief is that if a god of anything like the traditional sort exists, then our curiosity and intelligence are provided by such a God^^1^^. We would be unappreciative of those gifts if we suppressed our passion to explore the universe and ourselves.
On the other hand if such a traditional God does not exist, then our curiosity and our intelligence are the essential tools for managing our survival in an extremely dangerous time. In either case the enterprise of knowledge is consistent surely with science; it should be with religion, and it is essential for the welfare of the human species.
----
^^1^^ see [[Stanislaw Lem]]'s [[take on men-made gods|Man does not create gods, in spite of appearances. The times, the age, impose them on him. Man can serve his age or rebel against it, but the target of his cooperation or rebellion comes to him from outside.]].
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
"""
The waters deep, the waters dark,
Reflect the seekers, hide the sought,
Whether in water or in air to drown.
Between them curls the silver spark,
Barbed, baited, waiting, of a thought—
Which in the world is upside down,
The fish hook or the question mark?
"""
<<list-links "[tag{!!title}]">>
My realism about the subjective domain in all its forms implies a belief in the existence of facts beyond the reach of human concepts. Certainly it is possible for a human being to believe that there are facts which humans never will possess the requisite concepts to represent or comprehend. Indeed, it would be foolish to doubt this, given the finiteness of humanity's expectations. After all, there would have been transfinite numbers even if everyone had been wiped out by the Black Death before Cantor discovered them.
But one might also believe that there are facts which could not ever be represented or comprehended by human beings, even if the species lasted forever -- simply because our structure does not permit us to operate with concepts of the requisite type.
This impossibility might even be observed by other beings, but it is not clear that the existence of such beings, or the possibility of their existence, is a precondition of the significance of the hypothesis that there are humanly inaccessible facts. (After all, the nature of beings with access to humanly inaccessible facts is presumably itself a humanly inaccessible fact.)
: -- from his essay [[What is it like to be a bat|https://warwick.ac.uk/fac/cross_fac/iatl/study/ugmodules/humananimalstudies/lectures/32/nagel_bat.pdf]].
"""
"""
(Compare to Richard Hamming's [[Perhaps there are thoughts we cannot think]]).
(Also compare to Thomas Nagel's [[There are facts that do not consist in the truth of propositions expressible in a human language. We can be compelled to recognize the existence of such facts without being able to state or comprehend them.]]).
The multiverse hypothesis is attractive to them [the atheists] because it answers, potentially, the questions raised by the apparent fine-tuning of this universe to suit it to supporting life.
If there are any number of universes, odds are that one of them will have these properties. One of them will be of a kind to produce and sustain creatures like us, so it is no coincidence that that one is the very universe in which we find ourselves.
If a positivist test were brought to bear on this idea, the multiverse, it would be discarded as meaningless because it can never be falsified. But in fact the idea is interesting and relevant for just this reason.
Given what we think we know about the origins of the universe, there is nothing implausible in the idea that like phenomena of creation might have occurred any number of times.
Biblical and traditional conceptions of God have enough of grandeur in them to accommodate the theory without difficulty, so there are no religious grounds for rejecting it. Its importance to the new atheist argument lies precisely in the fact that, true or not, falsifiable or not, it amounts to a statement of the fact that our experience of being is special and parochial (like religion! ha!), no basis for grand extrapolations from the structure of the carbon atom or the fortunate placement of our planet relative to its star.
An even grander extrapolation, of course, is the one that proceeds from the observed importance of genes in transacting the business of organic life on this odd little planet to the insistence that, QED, there is no God.
The being, or reality, that expresses itself in everything we know and are able to know may well find an infinitude of other expressions, unlike the reality of our experience in ways we cannot begin to conceive. Fine. But what is being described here, inconceivable and unknowable as it may be, is nevertheless the reality of which we are a part. If we do not know the character of being itself-I have never seen anyone suggest that we do know it-then there is an inevitable superficiality in any claim to an exhaustive description of anything that participates in being. And the assertion of the existence, or the nonexistence, of God is the ultimate exhaustive description.
The difference between theism and new atheist science is the difference between mystery and certainty. ''Certainty is a relic, an atavism, a husk we ought to have outgrown. Mystery is openness to possibility, even at the scale now implied by physics and cosmology. The primordial human tropism toward mystery may well have provided the impetus for all that we have learned.''
: -- from [[Robinson|Marilynne Robinson]]'s essay //Cosmology//, in her book //When I was a Child I Read Books//.
<<list-links "[tag{!!title}]">>
Change is inevitable....except from vending machines.
See also [[A Buddhist nun went into a bookstore.]]
Changing where you are (in the Solar System, on different planets, with different mass/pull) can change how much you matter (matter -> mass -> weight :) .
from the book //The Twelve Lives of Samuel Hawley// by Hannah Tinti ([[recommended by Ruth Ozeki|http://www.ruthozeki.com/weblog/2017/5/18/pcdypz4apy0mzdbujfwn6h38aefb47]] of //A Tale for the Time Being// fame)
Entropy according to Sir Terry:
chaos is found in greatest abundance wherever order is being sought. It always defeats order, because it is better organised.
Chaos is merely order waiting to be deciphered.
<<list-links "[tag[character]]">>
Character consists of what you do on the third and fourth tries.
[ [[My|Haggai Mark]] [[torqued|On torquing expressions into new meanings]]^^1^^ version:] Charity means pardoning the //seemingly// unpardonable, or it is no virtue at all. Hope means hoping when things //seem// hopeless, or it is no virtue at all. And faith means believing the //seemingly// incredible, or it is no virtue at all.
[[G. K. Chesterton]]'s original wording:
:{{imgquote}} Charity means pardoning the unpardonable, or it is no virtue at all. Hope means hoping when things are hopeless, or it is no virtue at all. And faith means believing the incredible, or it is no virtue at all.
----
^^1^^ I think that the modified/[[torqued|On torquing expressions into new meanings]] wording makes sense, since by pardoning, it makes it pardonable, and by hoping it makes it hopeful, and by believing it makes it believable.
[generosity]
From her book //I am not a Buddhist//:
Charity Seraphina Fields was born in Dublin, Ireland. She grew up in England and currently lives a peripatetic life, splitting her time between England, America, and the snowy foothills of the Himalayas. You cannot find her anywhere. For how can you find her, when even she finds herself only now and then? You will, however, get to know her a wee bit in the pages of this book.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
* The study of mathematics [and Computer Science], like the Nile, begins in minuteness but ends in magnificence.
* Corruption is like a ball of snow, once it's set a rolling it must increase.
** another take on: power corrupts, and absolute power corrupts absolutely.
** and said differently: Power will intoxicate the best hearts, as wine the strongest heads. No man is wise enough, nor good enough to be trusted with unlimited power.
* The greatest friend of truth is Time, her greatest enemy is Prejudice, and her constant companion is Humility.
* Patience is the support of weakness; impatience the ruin of strength.
* War kills men, and men deplore the loss; but war also crushes bad principles and tyrants, and so saves societies.
** this may be a good response to the bumper sticker: war is not the answer.
*** which I always felt deserves the ending: but a strong army may well be.
**** or as [[John Andrew Holmes]] had observed: Yes, we love peace, but we are not willing to take wounds for it, as we are for war.
* If you would be known, and not know, vegetate in a village; if you would know, and not be known, live in a city.
** a possibly good answer to the question: which is better, to be a big fish in a small pond or a small fish in a big pond?
* Suicide sometimes proceeds from cowardice, but not always; for cowardice sometimes prevents it; since as many live because they are afraid to die, as die because they are afraid to live.
* Wealth after all is a relative thing since he that has little and wants less is richer than he that has much and wants more.
** or as he also said: True contentment depends not upon what we have; a tub was large enough for Diogenes, but a world was too little for Alexander.
* No company is preferable to bad. We are more apt to catch the vices of others than virtues, as disease is far more contagious than health.
* Those who visit foreign nations, but associate only with their own country-men, change their climate, but not their customs. They see new meridians, but the same men; and with heads as empty as their pockets, return home with traveled bodies, but untravelled minds.
* There is nothing more imprudent than excessive prudence. [over-caution] [boldness] [daring] [adventure]
* We own almost all our knowledge not to those who have agreed but to those who have differed.
* Moderation is the inseparable companion of wisdom, but with it genius has not even a nodding acquaintance.
* Silence is foolish if we are wise, but wise if we are foolish. [ [[Tikkun Olam]] ]
** I like this much better than: speech is silver, but silence is gold. :)
* He that has energy enough to root out a vice should go further, and try to plant a virtue in its place. [ [[Tikkun Olam]] ]
* Justice to my readers compels me to admit that I write because I have nothing to do; justice to myself induces me to add that I will cease to write the moment I have nothing to say. [writing] [character]
* The present time has one advantage over every other - it is our own.
* Of present fame think little, and of future less; the praises that we receive after we are buried, like the flowers that are strewed over our grave, may be gratifying to the living, but they are nothing to the dead.
* It is always safe to learn, even from our enemies; seldom safe to venture to instruct, even our friends. [teaching] [learning] [humility]
* About content-free writing [and speaking]: Many books require no thought from those who read them, and for a very simple reason; they made no such demand upon those who wrote them.
* ‘Defendit numerus’ [there is safety in numbers] is the maxim of the foolish; ‘Deperdit numerus’ [there is ruin in numbers] of the wise. [language] [logic] [mathematics]
<<list-links "[tag{!!title}]">>
Computer Scientist at Cornell University.
<<list-links "[tag{!!title}]">>
http://www.charlesfernyhough.com/about.html
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
AKA Charlie Munger - long-time business partner of Warren Buffett
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Cheri Huber (born c. 1944) is an independent Soto Zen teacher and guide.
[[Cheri Huber|http://en.wikipedia.org/wiki/Cheri_Huber]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Chess is just a game in the way that the heart is just a muscle.
Chess simulates a truth that we tend to suppress, namely that life is hazardous and we are always at risk. The game is fun but is not entirely innocent fun which is why we tend to reach for chess metaphors in tense situations with high stakes.
: ― from his book //The Moves That Matter: A Chess Grandmaster on the Game of Life//
What chess taught me about life is, among other things, that:
* Concentration is freedom
* It’s the mattering that matters
* Our autopilots need our tender loving care
* Escapism is a trap
* Algorithms are puppeteers
* We need to make peace with our struggle
* There is another world, and it is in this world
* Happiness is not the most important thing
These distilled answers have emerged from a thirty-five-year relationship with chess that is still evolving.
: ― from [[Jonathan Rowson]]'s book //The Moves That Matter: A Chess Grandmaster on the Game of Life//
Chess taught me that the real purpose of planning^^1^^ in life is not so much to get to where you want to be, but to strengthen the willpower that you will need to get to a good place of any kind.
Clarifying purpose through plans is about knowing how you want relationships to change. When you begin to feel the relationships moving in the right way because of how you set your intent in motion, purpose grows at compound interest, just like the grains of rice on the chessboard squares.
: ― from [[Jonathan Rowson]]'s book //The Moves That Matter: A Chess Grandmaster on the Game of Life//
This is echoed by what [[St. Francis of Assisi]] had said:
> [[Start by doing what's necessary; then do what's possible; and suddenly you are doing the impossible.]]
[purpose] [serendipity] [stretch goals]
----
^^1^^ It has been said that we don't plan to fail, we just fail to plan, but the observation/insight above may be a deeper reason to plan.
Parallels between chess and programming (specifically, [[bricolaging|On Bricolage in programming]]):
(the original text is stroked-out, and the additions are in [square brackets] )
The weapons we wield are civil and symbolic, ~~but their function is brutality~~. All the emergent details of the ~~battle~~ [problem] feel ripe with meaning, and they need not be dramatic; a hunch, a trap, a transition – it all feels important ~~when your figurative life is on the line, just as a cracking twig may tell us a predator is near~~.
We search for good moves, but the process is as much tactile as visual – we are trying to feel our way through with intuition. The setting for a ~~chess~~ [programming] idea is always a confluence of the rules of the ~~game~~ [programming language], the strategic purposes of the moment and resistance from the ~~opponent~~ [Golem, namely the computer]; while the plot of a ~~chess~~ [programming] idea will be a sequence of ~~moves~~ [code] in which one state of affairs is transformed into another, leading to an evaluation of whether the change is desirable.
There is no particular algorithm for finding good ideas, so mostly we amble among whatever seems interesting, trusting the important to reveal itself.
: ― from [[Jonathan Rowson]]'s book //The Moves That Matter: A Chess Grandmaster on the Game of Life//
Chi Po lived in a province full of mountains, grass, weather, and people.
It lay deep in China, far from the sea, a little south of where it might have been, and all in all a little west of where it was.
from the book [[Chi Po and the Sorcerer -- a Chinese tale for philosophers and children|https://web.archive.org/web/20100628062143/http://caltechbook.library.caltech.edu/204/3/Chi_Po_for_Caltechpubversion.pdf]] by Oscar Mandel
Chögyam Trungpa Rinpoche (February 28, 1939 – April 4, 1987) was a Buddhist meditation master and holder of both the Kagyu and Nyingma lineages, the eleventh Trungpa tülku, a tertön, supreme abbot of the Surmang monasteries, scholar, teacher, poet, artist, and originator of a radical re-presentation of Shambhala vision.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Curator, TED conferences, TED Talks; author, TED Talks
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
In 2011, he wrote ([[Vanity Card No. 327]]) from Israel, where he said he felt strangely at home.
“[F]or the first time in my life, I’m surrounded with DNA much like my own,” he wrote. “Until I got here … I didn’t realize how much my double helix yearned to be around similar strands.”
<<list-links "[tag{!!title}]">>
https://cindyrosstraveler.com/about/
<<list-links "[tag{!!title}]">>
H. G. Wells: Civilization is in a race between education and catastrophe.
[[Alan Kay|https://en.wikipedia.org/wiki/Alan_Kay]] (a "[[CS Sage|https://en.wikipedia.org/wiki/List_of_computer_scientists]]"), at OOPSLA 1997, gave an [[insightful talk|https://www.youtube.com/watch?v=oKg1hTOQXoY]] titled "The computer revolution hasn't happened yet" ([[the 2007 transcript|http://www.vpri.org/pdf/m2007007a_revolution.pdf]]), modifies it and explains:
Perhaps “education” is too vague a term here. I would replace it with “a race between education of outlook and catastrophe” because it is not knowledge per se that makes the biggest difference, but outlook or point of view which provides the context in which rational thinking actually matches up with the real world in the service of humanity.
(see [[a different (more pessimistic?)|It takes two people to make you, and one people to die. That's how the world is going to end.]] take by [[William Faulkner]]).
Civilization, let me tell you what it is. First the soldier, then the merchant, then the priest, then the lawyer. The merchant hires the soldier and priest to conquer the country for him. First the soldier, he is a murderer; then the priest, he is a liar; then the merchant, he is a thief; and they all bring in the lawyer to make their laws and defend their deeds, and there you have your civilization!
Wrote the Sci-Fi Trilogy "The Three Body Problem", "The Dark Forest", and "Death's End".
<<list-links "[tag{!!title}]">>
The ‘father of information theory’
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
"""
Clear, unscalable, ahead
Rise the Mountains of Instead,
From whose cold, cascading streams
None may drink except in dreams.
"""
(compare to [[Robert Frost]]'s [[The Road Not Taken]]).
[wishing] [regrets] [planning]
American anthropologist
<<list-links "[tag{!!title}]">>
https://www.clivethompson.net/
<<list-links "[tag{!!title}]">>
''CLOSE''
is what we almost always are: close to happiness, close to another, close to leaving, close to tears, close to God, close to losing faith, close to being done, close to saying something or close to success, and even, with the greatest sense of satisfaction, close to giving the whole thing up.
Our human essence lies not in arrival, but in being almost there: we are creatures who are on the way, our journey a series of impending anticipated arrivals. We live by unconsciously measuring the inverse distances of our proximity: an intimacy calibrated by the vulnerability we feel in giving up our sense of separation.
Human beings do not find their essence through fulfillment or eventual arrival but by staying close to the way they like to travel, to the way they hold the conversation between the ground on which they stand and the horizon to which they go. We are, in effect, always close, always close to the ultimate secret: that we are more real in our simple wish to find a way than any destination we could reach; the step between not understanding that and understanding that is as close as we get to happiness.
```
# code poems inspired by https://laiyiohlsen.com/
from person import *
def think(thought):
print(thought)
##########################################################
# poem 001: Good deal! (or 'time is money'; actually, time is better than ... :)
# this is [[my own|Haggai Mark]] formula (for happiness :)
##########################################################
# ---- initialize ----------------------------------
current_salary = 100000
quality_of_life = 100
# ---- poem ----------------------------------------
quality_time = current_salary + quality_of_life
# now, I have a salary and twice the quality time:
current_state = current_salary + 2 * quality_time
# before, I had twice the salary, and some quality time
past_state = 2 * current_salary + quality_time
if current_state > past_state:
think('happy now :)')
else:
think('happier then :(')
###################################
# poem 010: Spinning
###################################
# ---- initialize ----------------------------------
expectation = 10
worry = 1
progress = 1
# ---- poem ----------------------------------------
x = expectation
while worry > 0 and progress < x:
think('looping')
progress -= 1
worry += 1
###################################
# poem 011: Exhaustion
###################################
# ---- initialize ----------------------------------
energy = 100
# ---- poem ----------------------------------------
def do(a_thing):
global energy
if energy > 0:
energy -= 100
think('done')
def today_I_will(do_all):
do('work')
do('something else')
today_I_will('do it all')
###################################
# poem 100: Expectation is ...
###################################
reality = [1, 2, 3, 4, 5, 6, 7, 8, 9]
#expectation = reality[10]
###################################
# poem 101: Aim high
###################################
reality = [1, 2, 3, 4, 5, 6, 7, 8, 9]
try:
expectation = reality[10]
except: # NotImplementedError(yet):
think('try one step at a time')
###################################
# poem 110: Relationship
###################################
# inspired by https://mdole.com/code-poem/
# ---- initialize ----------------------------------
i_am = Person()
me = i_am
you_are = Person()
you = you_are
we = Person()
# ---- poem ----------------------------------------
our_relationship = 'normal'
while our_relationship is 'normal':
if (i_am.happy_without(you)):
we.worryAbout(our_relationship)
elif (you_are.happy_without(me)):
we.question(our_relationship)
elif (i_am.happy_with(you) and you_are.happy_with(me) and i_am.happy_alone() and you_are.happy_alone()):
we.enjoy(our_relationship)
# one important conclusion: happy_without() is not equal to happy_alone() !
```
Coincidence is God's way of remaining anonymous.
: -- [[Albert Einstein]]
The somewhat controversial [[ex-superintendent of Santa Clara County School District|https://jointventure.org/component/content/article?id=165:colleen-wilcox]]
<<list-links "[tag{!!title}]">>
College is a place where a professor’s lecture notes go straight to the students’ lecture notes, without passing through the brains of either.
(erroneously) attributed to Mark Twain.
A different version attributed to Edwin Emery Slosson (a scientist, editor, and author):
Lecturing is that mysterious process by means of which the contents of the note-book of the professor are transferred through the instrument of the fountain pen to the note-book of the student without passing through the mind of either.
One way to view the high-level goals of an introductory Computer Science (CS) elective course/sequence is:
* enable students to experience the joy and beauty of creating meaningful computing artifacts
* expose them to concepts and principles which will avoid bewilderment if/when studying CS in college (AKA "the steamroller effect", "deer in the headlights freeze", "blowup on the exponential speed curve")
* prevent them from labeling themselves as "not good in computing" (so damaging and equivalent to saying "I'm not good at the ABC's")
Come here till I comb your hair, said Grandma. Look at that mop, it won't lie down. You didn't get that hair from my side of the family. That's that North of Ireland hair you got from your father. That's the kind of hair you see on Presbyterians. If your mother had married a proper decent Limerickman you wouldn't have this standing up, North of Ireland, Presbyterian hair.
: ― in [[his|Frank McCourt]] book //Angela's Ashes//
[imagery]
<<list-links "[tag{!!title}]">>
Comedy deals with that portion of our suffering that is exempt from tragedy.
Why do you go away? So that you can come back. So that you can see the place you came from with new eyes and extra colors. And the people there see you differently, too. Coming back to where you started is not the same as never leaving.
― from [[his|Terry Pratchett]] book [[A Hat Full of Sky|http://discworld.wikia.com/wiki/A_Hat_Full_of_Sky]] (about the journey of a young witch ([[Tiffany Aching|http://discworld.wikia.com/wiki/Tiffany_Aching]]) )
<<comparequote "Cindy Ross" "Returning home is the most difficult part of long-distance hiking; You have grown outside the puzzle and your piece no longer fits." "expanding your horizons and spirit">>
(see also [[Ithaka - poem by Constantine P. Cavafy]]).
Compare to [[David Whyte]]'s take on [[Ambition|A life’s work is not a series of stepping-stones, onto which we calmly place our feet, but more like an ocean crossing where there is no path, only a heading, a direction, in conversation with the elements. Looking back, we see the wake we have left as only a brief glimmering trace on the waters.]] and it's drive:
> a true vocation calls us out beyond ourselves, breaks our heart in the process and then humbles, simplifies and enlightens us about the hidden, core nature of the work that enticed us in the first place. We find that, all along, we had what we needed from the beginning and that in the end we have returned to its essence, an essence we could not understand until we had experienced the actual heartbreak of the journey.
: -- from [[his|David Whyte]] book //"Consolations -- The Solace, Nourishment, and Underlying Meaning of Everyday Words"//
... ordinary hope is based in wanting an outcome that could well be different from what might actually happen.
If we look deeply, we realize that anyone who is conventionally hopeful has an expectation that always hovers in the background, the shadow of fear that one’s wishes will not be fulfilled.
Ordinary hope then is a form of suffering, and this kind of hope is a partner with dread.
Wise hope, I have learned, is unprescribed, spontaneous, and can’t be attached to an outcome. It is a response of imagination so free that one has no idea of where it comes from and where it will lead and land.
Thus, wise hope is not the belief that everything will turn out well. But rather that we find ourselves responding from the groundlessness of possibility and improbability.
We have to understand that wise hope is not a story based on optimism, that everything will be ok.
Optimists imagine that everything will turn out positively.
This point of view is dangerous; being an optimist means one doesn’t have to bother; one doesn’t have to act.
Also, if things don’t turn out well, cynicism or futility can follow.
And, as we might expect, optimists are excused from engagement. And this is really an important point!
Wise hope means that we open ourselves to what we do not know, what we cannot know; that we open ourselves to Not Knowing and act from a place of astonishment.
Yes, I believe that wise hope appears through our courage to be in the field of radical uncertainty, and in a space of groundless adaptivity to things as they are.
It’s when we look deeply and courageously that we realize we don’t know what will happen next; this is when wise hope comes alive, in this groundless landscape between improbability and possibility, in this groundless landscape of imagination, and from this groundlessness, the imperative to act rises up.
Also wise hope is not seeing things unrealistically but rather seeing things as they are, including the truth of impermanence…. Everything changes, and we cannot know what or how….
As [[Vaclav Havel]] had said: [[Hope is not the same thing as optimism. It is not the conviction that something will turn out well, but the certainty that something makes sense, regardless of how it turns out.]]
[...] coming from wise hope might at some point show us that what we do matters, even though how and when it may matter, who and what it may impact, or even recognizing that it matters, are not things we can know beforehand.^^1^^
The Bodhisattva Vows at the heart of my tradition are, if nothing else, a powerful expression of radical and wise hope and hope against all odds; it takes great imagination and wise hope to chant these vows and not be totally confused.
This kind of hope is free of desire, free from any attachment to outcome; it is a species of hope that has no fear. What else could be the case as we chant:
Creations are numberless, I vow to free them. Delusions are inexhaustible, I vow to transform them. Reality is boundless, I vow to perceive it. The awakened way is unsurpassable, I vow to embody it.
:-- from [[her|Joan Halifax]] blogpost titled [["Understanding Wise Hope"|https://www.upaya.org/2021/09/understanding-wise-hope/]].
[kindness] [generosity] [giving]
----
^^1^^ this may also be good "career advice"
From [[his|Julian Barnes]] book [["Levels of Life"|https://www.npr.org/2013/09/26/225836464/julian-barnes-levels-with-us-on-love-loss-and-ballooning]] (the 3^^rd^^ and last part titled "The Loss of Depth."), about the death of his wife Pat Kavanagh.
The book opens:
>You put together two things that have not been put together before. And the world is changed...
It took a while, but I remember the moment – or rather, the suddenly arriving argument – which made it less likely that I would kill myself. I realised that, insofar as she was alive at all, she was alive in my memory. Of course, she remained powerfully in other people’s minds as well; but I was her principal rememberer. If she was anywhere, she was within me, internalised. This was normal. And it was equally normal – and irrefutable – that I could not kill myself because then I would also be killing her. She would die a second time, my lustrous memories of her fading as the bathwater turned red. So it was, in the end (or, at least, for the time being), simply decided. As was the broader, but related question: how am I to live? I must live as she would have wanted me to.
[...]
This is what those who haven’t crossed the tropic of grief often fail to understand: the fact that someone is dead may mean that they are not alive, but doesn’t mean that they do not exist.
So I talk to her constantly. This feels as normal as it is necessary. I comment on what I am doing (or have done in the course of the day); I point out things to her while driving; I articulate her responses. I keep alive our lost private language. I tease her and she teases me back; we know the lines by heart. Her voice calms me and gives me courage.
[...]
I externalise her easily and naturally because by now I have internalised her. The paradox of grief: if I have survived what is now four years of her absence, it is because I have had four years of her presence. And her active continuance disproves what I earlier pessimistically asserted. Grief can, after all, in some ways, turn out to be a moral space.
[...]
[After your life partner dies, shared/past memories are changed/uncertain] because it can no longer be corroborated by the one who was there at the time. What we did, where we went, whom we met, how we felt. How we were together. All that. ‘We’ are now watered down to ‘I’. Binocular memory has become monocular. There is no longer the possibility of assembling from two uncertain memories of the same event a surer, single one, by triangulation, by aerial surveying. And so that memory, now in the first person-singular, changes. Less the memory of an event than the memory of a photograph of the event. And nowadays – having lost height, precision, focus – we are no longer sure we trust photography as we once did. Those old familiar snaps of happier times have come to seem less primal, less like photographs of life itself, more like photographs of photographs.
[...]
Studies of cancer patients show that attitudes of mind have very little effect on clinical outcome. We may say we are fighting cancer, but cancer is merely fighting us; we may think we have beaten it, when it has only gone away to regroup. It is all just the universe doing its stuff, and we are the stuff it is being done to. And so, perhaps, with grief. We imagine we have battled against it, been purposeful, overcome sorrow, scrubbed the rust from our soul, when all that has happened is that grief has moved elsewhere, shifted its interest. We did not make the clouds come in the first place, and have no power to disperse them. All that has happened is that from somewhere – or nowhere – an unexpected breeze has sprung up, and we are in movement again.
{{The fundamental problem of communication is that of reproducing at one point either exactly or approximately a message selected at another point. Frequently the messages have meaning.}}
: — [[Claude Shannon]] (1948)
<<list-links "[tag{!!title}]">>
>Compare ‘now’ with ‘here’. ‘Here’ designates the place where a speaker is: for two different people ‘here’ points to two different places. Consequently ‘here’ is a word the meaning of which depends on where it is spoken. The technical term for this kind of utterance is ‘indexical’. ‘Now’ also points to the instant in which the word is uttered and is also classed as ‘indexical’. But no one would dream of saying that things ‘here’ exist, whereas things that are not ‘here’ do not exist. So then why do we say that things that are 'now' exist and that everything else doesn't?
and he adds:
>This is the disconcerting conclusion that emerges from Boltzmann’s work: the difference between the past and the future refers only to our own blurred vision of the world. It’s a conclusion that leaves us flabbergasted: is it really possible that a perception so vivid, basic, existential—my perception of the passage of time—depends on the fact that I cannot apprehend the world in all of its minute detail? On a kind of distortion that’s produced by myopia? Is it true that, if I could see exactly and take into consideration the actual dance of millions of molecules, then the future would be “just like” the past?
: ― from [[his|Carlo Rovelli]] book "//Seven Brief Lessons on Physics//"
<<list-links "[tag{!!title}]">>
That’s right. And families are at this kind of test bed of love, because we can’t entirely quit them. And this is what makes families so fascinating, because you’re thrown together with a group of people who you would never pick, if you could simply pick on the grounds of compatibility.
''Compatibility is an achievement of love. It shouldn’t be the precondition of love'', as we nowadays, in a slightly spoiled way, imagine it must be.
: -- from a conversation with [[Krista Tippett]] on [["The True Hard Work of Love and Relationships"|https://onbeing.org/programs/alain-de-botton-the-true-hard-work-of-love-and-relationships/#transcript]].
[marriage] [relationship]
(see also the way [[he|Alain de Botton]] [[said it elsewhere|The person who is best suited to us is not the person who shares our every taste (he or she doesn’t exist), but the person who can negotiate differences in taste intelligently — the person who is good at disagreement. Rather than some notional idea of perfect complementarity, it is the capacity to tolerate differences with generosity that is the true marker of the “not overly wrong” person. Compatibility is an achievement of love; it must not be its precondition.]]).
Complete possession is proved only by giving. All you are unable to give possesses you.
Mathematics and science^^1^^, too often are presented as a bagful of arcane techniques that sprang full-blown out of no one's told where. The implicit pedagogical strategy in many mathematics and science classes remain: Just shut up and do the problems. (This is not to say that there should not be computational drills, but merely to remind so called math fundamentalists that computational facility is a vastly overrated skill, especially nowadays. Just as no one would confuse a good speller with someone who writes well, no one should equate a whiz at arithmetic with someone who understands and can effectively employ mathematical ideas).
: -- from his book [[Once Upon a Number|http://movies2.nytimes.com/books/99/04/25/reviews/990425.25alexant.html]]
----
^^1^^ - and very similarly, it can be said about computer science and programming, where, I think, it is less important, especially in high school, to "master the programming language syntax", and more important to experience the "beauty, joy, and usefulness" of computing.
With searching comes loss
and the presence of absence:
File on disk not found.
: -- from [[Gnu Humor|https://www.gnu.org/fun/jokes/error-haiku.en.html]]
Computer programming is an art, because it applies accumulated knowledge to the world, because it requires skill and ingenuity, and especially because it produces objects of beauty. A programmer who subconsciously views himself as an artist will enjoy what he does and will do it better.
Compare to [[Knuth's other saying|Science is knowledge which we understand so well that we can teach it to a computer; and if we don't fully understand something, it is an art to deal with it.]]
Computer programs are good, they say, for particular purposes, but they aren't flexible. Neither is a violin, or a typewriter, until you learn how to use it.
<<list-links "[tag{!!title}]">>
Computer Science is among the sciences of the artificial^^1^^. Where natural sciences focus on questions concerning "what there is", sciences of the artificial are concerned with "what there can be".
(in an article titled "Empirical Computer Science" in the [ext[ACM publication Inroads|inroads.acm.org]] (Dec. 2017)
----
^^1^^ - from a book by [[Herbert Simon]] titled [ext["The Sciences of the Artificial"|https://monoskop.org/images/9/9c/Simon_Herbert_A_The_Sciences_of_the_Artificial_3rd_ed.pdf]].
"What would we like our children—the general public of the future—to learn about computer science in schools? We need to do away with the myth that computer science is about computers. Computer science is no more about computers than astronomy is about telescopes, biology is about microscopes or chemistry is about beakers and test tubes. Science is not about tools, it is about how we use them and what we find out when we do."
: -- (Mis)attributed to Edsger Wybe Dijkstra
{{Computer science is not about computers, any more than astronomy is about telescopes, or biology about microscopes.}}
From [[Quote Investigator|https://quoteinvestigator.com/2021/04/02/computer-science/]]: The earliest close match located by QI appeared in the 1986 book “Machinery of the Mind: Inside the New Science of Artificial Intelligence” by science journalist George Johnson. The attribution was anonymous.
> The possibility of a science in which all the world is thought of computationally casts the study of computers in an important new light. As its practitioners are fond of saying, computer science is not about computers, any more than astronomy is about telescopes, or biology about microscopes. These devices are tools for observing worlds otherwise inaccessible. The computer is a tool for exploring the world of complex processes, whether they involve cells, stars, or the human mind.
<<list-links "[tag{!!title}]">>
Computers are to computing as instruments are to music. Software is the score whose interpretations amplifies our reach and lifts our spirits. Leonardo da Vinci called music the shaping of the invisible, and his phrase is even more apt as a description of software.
See also [[The computer is an instrument whose music is ideas.]]
Apropos instruments vs. music vs. musicians:
There’s a story about Jascha Heifetz, the famously dyspeptic Russian violinist and giant of the golden age of recording: After a concert one evening, an admirer went to visit the soloist in his dressing room. “Mr. Heifetz,” he gushed, “what a performance! Your violin has such a gorgeous tone!” Heifetz picked up his instrument, held it to his ear and knit his brow. “I don’t hear anything.”
Computers are useless. They can only give you answers.
Computers have replaced the typewriter, the delete key has replaced the wastebasket, and various other keys insert, move and rearrange whole chunks of text. But nothing has replaced the writer. He or she is still stuck with the same old job of saying something that other people will want to read.
[...]
Any invention that reduces the fear of writing is up there with air-conditioning and the lightbulb. But, as always, there’s a catch. Nobody told all the new computer writers that the essence of writing is rewriting. Just because they’re writing fluently doesn’t mean they’re writing well.
[…]
Two opposite things happened: good writers got better and bad writers got worse. Good writers welcomed the gift of being able to fuss endlessly with their sentences—pruning and revising and reshaping — without the drudgery of retyping. Bad writers became even more verbose because writing was suddenly so easy and their sentences looked so pretty on the screen. How could such beautiful sentences not be perfect?
[...]
Scientific and technical material can be made accessible to the layman. It’s just a matter of putting one sentence after another. The “after,” however, is crucial. Nowhere else must you work so hard to write sentences that form a linear sequence. This is no place for fanciful leaps or implied truths. Fact and deduction are the ruling family.
: -- from his book //"On Writing Well: An Informal Guide to Writing Nonfiction"// (1976)
Studying chess in the era of cheap computation is like being able to slow the Matrix down to bullet-time: You can avoid bad futures because you can actually see them. A chess engine can easily tell you that a given move will be a mistake, and it can show you why, say by pointing to the moment where you’d lose a key piece. By training your own vision against the computer’s this way, players are developing a deeper intuition about the game than had ever before been possible.
[...]
[Computing can give us] an entirely new kind of vision. We don’t often think of computation that way, as a visual aid, because it’s somewhat difficult to describe what it helps us see.
Where telescopes and microscopes show us the very far and the very small, the computer shows us the very much, all at once. It makes time available to the mind and eye.
Computation, in that sense, is a kind of compacting of imagination: It helps us generate and explore a zillion scenarios and digest them into a representation that’s easy to play around with.^^1^^
: -- from an article in the Atlantic titled [["Don't Use the Force, Luke—Use the Targeting Computer"|https://www.theatlantic.com/technology/archive/2017/04/force-computer-vision/522720/]].
{{Computer science is not about computers, any more than astronomy is about telescopes, or biology about microscopes.}}
----
^^1^^ This is what [[Bret Victor]] is demonstrating in [["Up and Down the Ladder of Abstraction"|http://worrydream.com/#!2/LadderOfAbstraction]].
From [[Epictetus|http://en.wikipedia.org/wiki/Epictetus]]'s "the Stoic":
>Conceit lies in thinking you want nothing.
Confession is good for the soul only in the sense that a tweed coat is good for dandruff - it is a palliative rather than a remedy.
<<list-links "[tag{!!title}]">>
Greek poet who lived in Alexandria and worked as a journalist and civil servant.
<<list-links "[tag{!!title}]">>
George Bernard Shaw’s 1913 play Pygmalion anticipated the social reality of artificial language. When Henry Higgins and Colonel Pickering undertake to transform Eliza Doolittle, a flower girl, into a proper English lady.
Shaw gives Eliza the real wisdom at how her changed language has transformed her innate being. “You know what began my real education?” she says to Pickering. “Your calling me Miss Doolittle that day when I first came to Wimpole Street. That was the beginning of self-respect for me. You see, the difference between a lady and a flower girl isn’t how she behaves. It’s how she’s treated.”
Just so: In a world of imitation games, it is the network that gives meaning^^1^^, not the expression.
: -- From [[The Imitation of Consciousness: On the Present and Future of Natural Language Processing|https://lithub.com/the-imitation-of-consciousness-on-the-present-and-future-of-natural-language-processing/]], where [[he|Stephen Marche]] Considers AI, Machine Learning, and “the Labyrinth of Another’s Being”
----
^^1^^ The network, or the context, or what the interpreter (meaning-seeker) brings to the situation determines a lot of the meaning. See an example about [[How to tell a joke]].
>Conway's Game of Life is completely deterministic; it needs only simple rules about having two and three neighbors. Thus all the future generations of every pattern must exist whether we simulate them or not. They can't die. Pulling the plug before a computer counts up to a million (generations) doesn't harm the number one million.
And
>That's what a deterministic universe is like. Such a universe exists without needing to be simulated, in the same sense that as any number exists without needing to be named.
Later Knuth says:
>Since classical physics deals with infinite-precision real numbers, deterministic models are not realizable on actual computers.
>There's also a classical question, “If a tree falls in the forest and nobody can witness it (because maybe the forest is in a black hole) did the tree really fall?" In the setup I talked about there’s a similar but maybe more subtle question: “If nobody has ever named the numbers up to Super K (10^^^^3), do they exist?"
>
>I'm quite willing to believe that the number five exists, and six and seven and so on, and all the numbers I can count up to. But does that mean that all finite numbers have an independent existence? I implied as much when I said that the deterministic results of the Game of Life need not be simulated because they have always been present.
>
>It’s something like if all the jokes in the world were numbered, and a person would come up to you and say " 37!" and you would roar with laughter. Our universe would be number such-and-such in an appropriate encoding system, if it were finite, yet nobody could ever know that number.
:-- In [[Donald Knuth]]'s book [[Things a Computer Scientist Rarely Talks About|https://en.wikipedia.org/wiki/Things_a_Computer_Scientist_Rarely_Talks_About]].
<<list-links "[tag{!!title}]">>
If you want to characterize how something is done, then one of the most powerful ways of characterizing how the mind does anything is by looking at the errors that the mind produces while it’s doing it because the errors tell you what it is doing. ''Correct performance tells you much less about the procedure than the errors do.''
: -- quoted in [[an entry in BrainPickings|https://www.brainpickings.org/2013/10/30/daniel-kahneman-intuition/]]
(this, BTW, seems to me, is also true about observing/learning/analyzing software programs, especially maze-walking algorithms :)
(see also [[Simone de Beauvoir]]'s take on [[the value of failures|Art and science do not establish themselves despite failure but through it; (...) failure, always ineluctable, is in certain cases spared and in others not.]])
About [[Martin Gardner]]'s "The Magic Numbers of Dr. Matrix":
"Numbers, you know, have a mysterious life of their own. It would be naive," claims Dr. Irving Joshua Matrix [or I. J. Matrix to Computer Science cognoscenti :)], "to suppose that there is such a thing as a randomly arranged group of symbols."
Consider, for example, the decimal expansion of pi. Long considered a random series, it is actually rich with remarkable patterns. "Correctly interpreted," says Dr. Matrix, "pi conveys the entire history of the human race." Dr. Matrix uncovers patterns and signs that will astound you.
As Dr. Matrix demonstrates, we need only look to find clues all around us in number and language "coincidences" that will unlock the mysteries of the universe.
In The Magic Numbers of Dr. Matrix, Martin Gardner introduces us to this extraordinary man, Dr. Irving Joshua Matrix. Believed by many to be the greatest numerologist who ever lived, Dr. Matrix claims to be a reincarnation of Pythagoras. He was, however, completely unknown to the scientific community until Gardner wrote about him in Scientific American in 1960.
Or as [[Donald Knuth]] writes in [[The Art of Computer Science - Volume 2, page 41|https://doc.lagout.org/science/0_Computer%20Science/2_Algorithms/The%20Art%20of%20Computer%20Programming%20%28vol.%202_%20Seminumerical%20Algorithms%29%20%283rd%20ed.%29%20%5BKnuth%201997-11-14%5D.pdf]] (see also local copy):
[When asked to come up with a random sequence of digits] People tend to avoid things that seem nonrandom, such as pairs of equal adjacent digits (although about one out of every ten digits should equal its predecessor). And if we would show [someone] a table of truly random digits, [they] would quite probably tell us they are not random at all; [our] eye would spot certain apparent regularities.
According to Dr. I. J. [Irving Joshua] Matrix (as quoted by Martin Gardner in Scientific American, January, 1965), “Mathematicians consider the decimal expansion of ''pi'' a random series, but to a modern numerologist it is rich with remarkable patterns.” Dr. Matrix has pointed out, for example, that the first repeated two digit number in his expansion is 26, and its second appearance comes in the middle of a curious repetition pattern [notice the full (!) symmetry of the two digit pairs 79, 32, 38, and their adjacency(!) :) ]:
<a href="./resources/pi digits.png" target="new"><img src="./resources/pi digits.png" width="55%" height="55%" /></a>
After listing a dozen or so further properties of these digits, he observed that ''pi'', when correctly interpreted, conveys the entire history of the human race!^^1^^
We all notice patterns in our telephone numbers, license numbers, etc., as aids to memory. The point of these remarks is that we cannot be trusted to judge by ourselves whether a sequence of numbers is random or not. Some unbiased mechanical tests must be applied.
But [[Wait! There is more (and different :) |Why Is 137 the Most Magical Number?]] :)
----
^^1^^ on finding meanings (on a smaller scale :) :
As pattern- and/or meaning-seeking creatures, we tend to assign significance to all sorts of sets, combinations, series, and events.
I came across (incidentally? I don't think so! :) an interesting tool called [[RIES - Find Algebraic Equations, Given Their Solution|http://mrob.com/pub/ries/]], which is an Inverse Equation Solver.
The author of the web-based tool has a long page of "[[interesting numbers|http://mrob.com/pub/math/numbers.html]]" and their relationships.
Cornelia "Corrie" ten Boom (Amsterdam, April 15, 1892 – Orange, California, April 15, 1983) was a Dutch Christian Holocaust survivor who helped many Jews escape the Nazis during World War II. In 1970, ten Boom co-wrote her autobiography, The Hiding Place, released in 1971 and which was made into a film of the same name two years later starring Jeannette Clift as Corrie.
<<list-links "[tag{!!title}]">>
''Could Have''
"""
It could have happened.
It had to happen.
It happened earlier. Later.
Nearer. Farther off.
It happened, but not to you.
You were saved because you were the first.
You were saved because you were the last.
Alone. With others.
On the right. The left.
Because it was raining. Because of the shade.
Because the day was sunny.
You were in luck—there was a forest.
You were in luck—there were no trees.
You were in luck—a rake, a hook, a beam, a brake,
a jamb, a turn, a quarter inch, an instant.
You were in luck—just then a straw went floating by.
As a result, because, although, despite.
What would have happened if a hand, a foot,
within an inch, a hairsbreadth from
an unfortunate coincidence.
So you’re here? Still dizzy from another dodge, close shave, reprieve?
One hole in the net and you slipped through?
I couldn’t be more shocked or speechless.
Listen,
how your heart pounds inside me.
"""
Courage is rightly esteemed the first of human qualities... because it is the quality which guarantees all others.
compare with [[Robert Brault]]:
The tricky thing about cowardice is that it loves to pose as the common sense thing to do.
Courage (from the old Norman French coeur, or heart) is the measure of our heartfelt participation with life, with another, with a community, a work; a future. To be courageous is not necessarily to go anywhere or do anything, except to make conscious those things we already feel deeply and then to live through the unending vulnerabilities of those consequences.
To be courageous is to seat our feelings deeply in the body and in the world: to live up to and into the necessities of relationships that often already exist, with things we find we already care deeply about: with a person, a future, a possibility in society, or with an unknown that begs us on – and always has begged us on. To be courageous is to stay close to the way we are made.
: -- from [[his|David Whyte]] book //"Consolations -- The Solace, Nourishment, and Underlying Meaning of Everyday Words"//
Courage is what it takes to stand up and speak; courage is also what it takes to sit down and listen.
<<timelineCreated limit:20000>>
One can cultivate the feeling of positive emotions and the well-being as a result of this mindset by striving to:
* Be open
* Be appreciative
* Be curious
* Be kind
* Be real
: -- from [[her|Barbara Fredrickson]] talk [["Barbara Fredrickson: The Positivity Ratio"|https://youtu.be/_hFzxfQpLjM?t=270]] (~8:40 min. video clip)
Any ability based on guessing must include means of correcting one’s guesses, since most guesses will be wrong at first. (There are always many more ways of being wrong than right.) Bayesian updating is inadequate, because it cannot generate novel guesses about the purpose of an action, only fine-tune—or, at best, choose among—existing ones. Creativity is needed.
As the philosopher [[Karl Popper]] explained, ''creative criticism, interleaved with creative conjecture, is how humans learn one another’s behaviors, including language, and extract meaning from one another’s utterances. Those are also the processes by which all new knowledge is created: They are how we innovate, make progress, and create abstract understanding for its own sake.''
: -- from: [[John Brockman]]'s book “Possible Minds - 25 Ways of Looking at AI.”
''Creativity is merely a plus name for regular activity''; the ditchdigger, dentist and artist go about their tasks in much the same way, and ''any activity becomes creative when the doer cares about doing it right, or better.''
: -- from [[QuoteInvestigator|https://quoteinvestigator.com/2021/04/03/creative-doer/]]
[purpose] [intention]
To live with sincerity in our culture of cynicism is a difficult dance — one that comes easily only to the very young and the very old.
''Critical thinking without hope is cynicism. Hope without critical thinking is naïveté.''
Finding fault and feeling hopeless about improving the situation produces resignation — cynicism is both resignation’s symptom and a futile self-protection mechanism against it. Blindly believing that everything will work out just fine also produces resignation, for we have no motive to apply ourselves toward making things better. But in order to survive — both as individuals and as a civilization — and especially in order to thrive, we need the right balance of critical thinking and hope.
[naivety] [cynicism]
- from [[Some Thoughts on Hope, Cynicism, and the Stories We Tell Ourselves|https://www.brainpickings.org/2015/02/09/hope-cynicism/]] on brainpickings.org
<<list-links "[tag{!!title}]">>
Cultivate an attitude of inquiry about everything, be alert and aware to learn something from every experience, and keep your eyes open for simple pleasures.
: -- from his book //Aging as a Spiritual Practice//
[curiosity]
''Culturally'', notes Spiegelman, he is ''totally Jewish, but “religiously not so much.''” His wife converted to please his father. “Secular Jewish elders are part of the mix of my life, but I have no use for Jewish ritual. ''I derive comfort from the discomfort of being alienated from the religious rituals. I like being inside a culture but outside of it.''”
-- from an [[interview in the Hadassah Magazine|http://www.hadassahmagazine.org/2009/08/23/profile-art-spiegelman/]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Curiosity is antifragile, like an addiction; magnified by attempts to satisfy it.
!! [[This TiddlyWiki modifications]]
!!Entering a new quote
*create a new tiddler
* tag it ''first'' with the quote author name (using the tags link displaying a drop-down, or)
**if a new name, and more than a single word, make sure to enclose it in double square brackets ({{{[[ ]]}}})
**if a new name, make it a tiddler, and tag it as "author", and optionally the author's occupation (e.g., writer, politician)
*tag the quote with one or more ''categories'' (e.g., learning, character) (using the tags link displaying a drop-down, or)
**if a new category, and more than a single word, make sure to enclose it in double square brackets ({{{[[ ]]}}})
**if a new category, make it a tiddler, and tag it as a "category"
*lastly, tag it as a "quote" (''important'' for exporting the quotes to a text/XML file)
!!Formatting
* Cheatsheet: [[TiddlerWiki Formatting Cheatsheet]]
* To color text with a certain font color use {{{@@color(red):your (red) text goes here@@}}} to get: @@color(red):your (red) text goes here@@
* To change font size use {{{@@font-size:14pt;your (BIG) text goes here@@}}} to get: @@font-size:14pt;your (BIG) text goes here@@
* and you can combine font size and color like {{{@@font-size:14pt;color(red):your BIG (red) text goes here@@}}} to get: @@font-size:14pt;color(red):your BIG (red) text goes here@@
* To change the font's background color use {{{@@background-color: #99aaee;background color@@}}} to get: @@background-color: #99aaee;(strange) background color@@
* To create @@color(red): ''borderless'' ~TiddlyWiki tables@@ in a content tiddler, you need to create a Tiddler called StyleSheet
** in the StyleSheet tiddler, you put the line:
*** .viewer table.borderless,.viewer table.borderless * {border: 0;}
** in the actual table (in the content tiddler) you put:
*** |!column1|column2|
*** |borderless|k
* More on @@color(red): tables:@@
You can create a table by enclosing text in sets of vertical bars (||, or shift-backslash on your keyboard).
|!Headings: add an exclamation point (!) right after the vertical bar.|!Heading2|!Heading3|
|Row 1, Column 1|Row 1, Column 2|Row 1, Column 3|
|>|>|Have one row span multiple columns by using a >|
|Have one column span multiple rows by using a ~|>| Use a space to right-align text in a cell|
|~|>| Enclose text in a cell with spaces to center it |
|>|>|bgcolor(green):Add color to a cell using bgcolor(yourcolorhere):|
|Add a caption by ending the table with a vertical bar followed by a c|c
!!HTML tables - embedded HTML tags
for example:
<html>
<table style="border:none;">
<tr style="border:none;">
<td style="border:none;">
<pre>
print loop_path
print is_loopy(loop_path)
print
print straight_path
print is_loopy(straight_path)
</pre>
</td>
<td style="border:none;">
<pre>
print loop_path
print is_loopy(loop_path)
print
print straight_path
print is_loopy(straight_path)
</pre>
</td>
</tr>
</table>
</html>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
"""
Submit to a daily practice.
Your loyalty to that
is a ring on the door.
Keep knocking, and the joy inside
will eventually open a window
and look out to see who's there.
"""
[patience] [persistence]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Info at http://www.danielgoleman.info/biography/
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
an English poet, illustrator, painter and translator, and member of the Rossetti family. He founded the Pre-Raphaelite Brotherhood in 1848 with William Holman Hunt and John Everett Millais.
<<list-links "[tag{!!title}]">>
"""
Doubting Thomas and loving John,
Behind the others walking on:
"Tell me now, John, dare you be
One of the minority?
To be lonely in your thought,
Never visited nor sought,
Shunned with secret shrug, to go
Through the world esteemed its foe;
To be singled out and hissed,
Pointed at as one unblessed,
Warned against in whispers faint,
Lest the children catch a taint;
To bear off your titles well,--
Heretic and infidel?
If you dare, come now with me,
Fearless, confident and free."
"Thomas, do you dare to be
Of the great majority?
To be only, as the rest,
With Heaven's common comforts blessed;
To accept, in humble part,
Truth that shines on every heart;
Never to be set on high,
Where the envious curses fly;
Never name or fame to find,
Still outstripped in soul and mind;
To be hid, unless to God,
As one grass-blade in the sod;
Underfoot with millions trod?
If you dare, come with us, be
Lost in love's great unity."
"""
: -- [[His|Edward Rowland Sill]] poem [[Dare You?|https://allpoetry.com/Dare-You-]]
Daring ideas are like chessmen moving forward. They may be beaten, but they may start a winning game.
genetic researcher
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
[[his blog|http://www.dbschlosser.com/]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Author of [[Soul Search: A Scientist Explores the Afterlife|https://www.kirkusreviews.com/book-reviews/david-darling/soul-search/]]
and [[Equations of Eternity|https://www.kirkusreviews.com/book-reviews/david-darling/equations-of-eternity/]]
<<list-links "[tag{!!title}]">>
“ the founder of the field of quantum computation, whose 1985 paper on universal quantum computers was the first full treatment of the subject; the Deutsch-Jozsa algorithm was the first quantum algorithm to demonstrate the enormous potential power of quantum computation. When he initially proposed it, quantum computation seemed practically impossible. But the explosion in the construction of simple quantum computers and quantum communication systems never would have taken place without his work. He has made many other important contributions in areas such as quantum cryptography and the multiverse interpretation of quantum theory.
In a philosophic paper (with Artur Ekert), he appealed to the existence of a distinctive quantum theory of computation to argue that our knowledge of mathematics is derived from, and subordinate to, our knowledge of physics (even though mathematical truth is independent of physics). Because he has spent a good part of his working life changing people’s worldviews, his recognition among his peers as an intellectual goes well beyond his scientific achievement.”
: -- from [[John Brockman]]'s “Possible Minds - 25 Ways of Looking at AI.”
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
David Epstein's book "Range - Why generalists triumph in a specialized world"^^1^^ covers multiple topics around professional skills, expertise, human ability, and more.
Epstein is talking about "match quality" - a term economists use to describe the degree of fit between the work someone does and who they are -- their abilities and proclivities.
He argues that in many cases and professions, and in situations/environments called "wicked"^^2^^ (where the rules are not clear, and narrow expertise is not necessarily an advantage), a range of skills and expertise, and the ability to draw on wide (not just deep) knowledge and skills and do "far transfers", connections, and analogies, is a distinct advantage.
He also reviews the work of psychologist Angela Duckworth on grit, and disspells the hype around it (which, to her credit, Duckworth has been trying to do^^3^^ too, after her work got a lot of overexcited press).
Here are some excerpts:
* on switching career paths/interests:
>No one in their right mind would argue that passion and perseverance are unimportant, or that a bad day is a cue to quit. But the idea that a change of interest, or a recalibration of focus, is an imperfection and competitive disadvantage leads to a simple, one-size-fits-all Tiger [Woods] story: pick a [golf] stick [and stick to it], as soon as possible.
>Responding to lived experience with a change of direction, like Van Gogh did habitually, like West Point graduates have been doing since the dawn of the knowledge economy [, and like Charles Darwin did (see below)], is less tidy but no less important. It involves a particular behavior that improves your chances of finding the best match, but that at first blush sounds like a terrible life strategy: short-term planning.
"""
"""
* on pursuing different interests/paths:
> don't consider the [professional/career] path fixed. People realize things about themselves halfway through medical school.” Take Charles Darwin, for example:
>At his father's behest he planned to be a doctor, but he found medical lectures “intolerably dull,” and partway through his education he walked out of an operation at the grind of the surgical saw. “Nor did I ever attend again,” Darwin wrote, "for hardly any inducement would have been strong enough to make me do so.”
>Darwin was a Bible literalist at the time, and figured he would become a clergyman. He bounced around classes, including a botany course with a professor who subsequently recommended him for an unpaid position aboard the HMS Beagle. After convincing his father (with his uncle's help) that he would not become a deadbeat if he took this one detour, Darwin began perhaps the most impactful post-college gap year in history. His father's wishes eventually “died a natural death.” Decades later, Darwin reflected on the process of self-discovery. “It seems ludicrous that I once intended to be a clergyman,” he wrote.
[career] [profession] [work advice] [broad-based] [cross-disciplinary] [interdisciplinary]
----
^^1^^ Also see what [[Michael Crichton]] had to say about [["super-specialization" and narrow focus|Some people don’t have intelligence. They have “thintelligence.” They see the immediate situation. They think narrowly and they call it “being focused.” They don’t see the surround. They don’t see the consequences.]]
^^2^^ per the article [["The Two Settings of Kind and Wicked Learning Environments"|https://pdfs.semanticscholar.org/5c5d/33b858eaf38f6a14b3f042202f1f44e04326.pdf]] by Robin M. Hogarth, et al.
^^3^^ In an article titled [["Researchers Urge Caution in Using Measures of Students' 'Non-Cognitive' Skills for Teacher Evaluation, School Accountability, or Student Diagnosis"|https://www.aera.net/Newsroom/News-Releases-and-Statements/Researchers-Urge-Caution-in-Using-Measures-of-Students-Non-Cognitive-Skills-for-Teacher-Evaluation-School-Accountability-or-Student-Diagnosis]], Duckworth had written:
> "Given the intense visibility and enthusiasm around growth mindset, grit, and other personal skills, it is important for school leaders and policymakers to realize that while there is great benefit to studying and assessing these attributes, the measures should not, currently, be used for broader accountability purposes [...]
>There really is no perfect measure for any aspect of personal skills. What we have are measures that have their distinct advantages and limitations. Developing better measures, and understanding which currently available measures are appropriate for which uses, are top priorities we should have as an education community.”
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
https://www.davidhochman.com/
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
I recently attended an evening of poetry reading by [[David Whyte|http://www.davidwhyte.com/]] at Stanford University, and was inspired by his insistence that it is critical for us as human beings to have ''real conversations'' with ourselves and with each other, and ask "real questions", that get at the heart of things, and for which we don't have ready-made and well-rehearsed answers.
So who could express it better than Whyte himself (but, [[a different, but related take on questions|John O’Donohue - questions]] is given by [[John O'Donohue|https://www.johnodonohue.com/]], whom [[Whyte|http://www.davidwhyte.com/]] knew).
>The marvelous thing about a good question is that it shapes our identity as much by the asking as it does by the answering. Nine years ago, I wrote a poem called [["Sometimes"|Sometimes - by David Whyte]] in which I talked about the "questions that can make or unmake a life ... questions that have no right to go away."
>I still work with this idea. Questions that have no right to go away are those that have to do with the person we are about to become; they are conversations that will happen with or without our conscious participation. They almost always have something to do with how we might be more generous, more courageous, more present, more dedicated, and they also have something to do with timing: when we might step through the doorway into something bigger, better, both beyond ourselves and yet more of ourselves at the same time.
>If we are sincere in asking, the eventual answer will give us both a sense of coming home to something we already know as well a sense of surprise not unlike returning from a long journey to find an old friend sitting unexpectedly on the front step, as if she'd known, without ever being told, not only the exact time and date of your arrival but also your need to be welcomed back.
!!!!And his 10 Questions That Have No Right to Go Away (referred to in his [[poem "Sometimes"|Sometimes - by David Whyte]]):
* Do I know how to have real conversations?
** A real conversation always contains an invitation. You are inviting another person to reveal herself or himself to you, to tell you who they are or what they want. To do this requires vulnerability. Now we tend to think that vulnerability is associated with weakness, but there's a kind of robust vulnerability that can create a certain form of strength and presence too.
* What can I be wholehearted about?
** So many of us aren't sure what we're meant to do. We wonder if we're simply doing what others are doing because we feel we don't have enough ideas or even enough strength of our own. What do I care most about in my vocation, in my family life, in my heart and mind? This is a conversation that we all must have with ourselves at every stage of our lives, a conversation that we so often don't want to have. We will get to it, we say, when the kids are grown, when there is enough money in the bank, when we are retired, perhaps when we are dead; it will be easier then. But we need to ask it now: What can I be wholehearted about now?
* Am I harvesting from this year's season of life?
**"Youth is wasted on the young" is the old saying. But it might also be said that midlife is wasted on those in their 50s and eldership is very often wasted on the old. Most people, I believe, are living four or five years behind the curve of their own transformation. I see it all the time, in my own life and others. The temptation is to stay in a place where we were previously comfortable, making it difficult to move to the frontier that we're actually on now. People usually only come to this frontier when they have had a terrible loss in their life or they've been fired or some other trauma breaks open their story. Then they can't tell that story any more. But having spent so much time away from what is real, they hit present reality with such impact that they break apart on contact with the true circumstance. So the trick is to catch up with the conversation and stay with it -- where am I now? -- and not let ourselves become abstracted from what is actually occurring around us.
* Where is the temple of my adult aloneness?
** Gaston Bachelard, a French philosopher, said that one of the beautiful things about a home is that it is a place where you can dream about your future, and that a good home protects your dreams; it is a place where you feel sheltered enough to risk yourself in the world.
* Can I be quiet even inside?
** All of our great traditions, religious, contemplative and artistic, say that you must a learn how to be alone and have a relationship with silence. It is difficult, but it can start with just the tiniest quiet moment. You may not want to confront it at first. But a long way down the road, when you inhabit a space fully, you no longer feel awkward and lonely. Silence turns, in effect, into its opposite, so it becomes not only a place to be alone but also a place that's an invitation to others to join you, to want to know who's there, in the quiet.
* Am I too inflexible in my relationship to time?
** If you've got a wonderful memory of your childhood, it should live within you. If you've got a challenging relationship with a parent, that should be there as part of your identity now, both in your strengths and weaknesses. The way we anticipate the future forms our identity now. Time taken too literally can be a tyranny. We are never one thing; we are a conversation everything we have been, everything we are now and every possibility we could be in the future.
* How can I know what I am actually saying?
** Poetry is often the art of overhearing yourself say things you didn't know you knew. It is a learned skill to force yourself to articulate your life, your present world or your possibilities for the future. We need that same skill as an art of survival. We need to overhear the tiny but very consequential things we say that reveal ourselves to ourselves.
* How can I drink from the deep well of things as they are?
** To me, a well, a place where the water springs eternal all year round, is a very real, blessed place to stop and think. Almost always, when I'm struggling over a particular situation, I realize that I am only looking at the surface of the problem and refusing to go for the deeper dynamic that caused all the tension in the first place. All intimate relationships close friendships and good marriages are based on continued and mutual forgiveness. You will always trespass upon your friend's sensibilities at one time or another, or your spouse's. The only question is, Will you forgive the other person? And more importantly, Will you forgive yourself? We have to deepen our understanding, make ourselves more equal to circumstances, more easy with what we have been given or not given. We must drink from the deep well of things as they are.
* Can I live a courageous life?
** The word "courage" comes from the old French word coeur meaning "heart." So "courage" is the measure of your heartfelt participation in the world. Human beings are constantly trying to take courageous paths in their lives: in their marriages, in their relationships, in their work and with themselves. But the human way is to hope that there's a way to take that courageous step without having one's heart broken. And it's my contention that there is no sincere path a human being can take without breaking his or her heart. There is no marriage, no matter how happy, that won't at times find you wanting and break your heart. In raising a family, there is no way to be a good mother or father without a child breaking that parental heart. In a good job, a good vocation, if we are sincere about our contribution, our work will always find us wanting at times. In an individual life, if we are sincere about examining our own integrity, we should, if we are really serious, at times, be existentially disappointed with ourselves. So it can be a lovely, merciful thing to think, "Actually, there is no path I can take without having my heart broken, so why not get on with it and stop wanting these extra-special circumstances which stop me from doing something courageous?"
* Can I be the blessed saint that my future happiness will always remember?
** Here's the explanation for what sounds like a strange question. I have a poem called "Coleman's Bed" about a place in the West of Ireland where the Irish saint Coleman lived. The last line of that poem calls on the reader to remember "the quiet, robust and blessed saint that your future happiness will always remember." We go to places of pilgrimage where saints have lived, or even to Graceland, where Elvis lived, because these people gave something to the rest of us music or good works that has carried on down the years and that was a generous gift to the future. But that blessed saint could also be yourself the person who, in this moment, makes a decision that can make a bold path into the years to come and whom your future happiness will always remember. What could you do now for yourself or others that your future self would look back on and congratulate you for something it could view with real thankfulness because the decision you made opened up the life for which it is now eternally grateful?
''dawn'', n. The time when men of reason go to bed. Certain old men prefer to rise at about that time, taking a cold bath and a long walk with an empty stomach, and otherwise mortifying the flesh. They then point with pride to these practices as the cause of their sturdy health and ripe years; the truth being that they are hearty and old, not because of their habits, but in spite of them. The reason we find only robust persons doing this thing is that it has killed all the others who have tried it.
:-- [[Ambrose Bierce]], The Unabridged Devil's Dictionary
[iron-clad logic and deduction by elimination :) ]
Day and night, gifts keep pelting down on us. If we were aware of this, gratefulness would overwhelm us. But we go through life in a daze. A power failure makes us aware of what a gift electricity is; a sprained ankle lets us appreciate walking as a gift, a sleepless night, sleep. How much we are missing in life by noticing gifts only when we are suddenly deprived of them.
Dealing with failure is easy: Work hard to improve. Success is also easy to handle: You've solved the wrong problem. Work hard to improve.
<<list-links "[tag{!!title}]">>
Death destroys a man, but the idea of Death saves him.
: -- from his book //"Howard's End"//
Where [[he|E. M. Forster]] also wrote:
"""
[Leonard Bast:] "... the real thing's money, and all the rest is a dream."
[Helen Schlegel:] "You're still wrong. You've forgotten Death."
Leonard could not understand.
"If we lived forever, what you say would be true. But we have to die, we have to leave life presently. Injustice and greed would be the real thing if we lived for ever. As it is, we must hold to other things, because Death is coming. I love Death--not morbidly, but because He explains. He shows me the emptiness of Money. Death and Money are the eternal foes. Not Death and Life. Never mind what lies behind Death, Mr. Bast, but be sure that the poet and the musician and the tramp will be happier in it than the man who has never learnt to say, 'I am I.'"
"I wonder."
"We are all in a mist -- I know, but I can help you this far -- men like the Wilcoxes are deeper in the mist than any. Sane, sound Englishmen! building up empires, levelling all the world into what they call common sense. But mention Death to them and they're offended, because Death's really Imperial, and He cries out against them for ever."
"I am as afraid of Death as any one."
"But not of the idea of Death."
"But what is the difference?"
"Infinite difference," said Helen, more gravely than before.
Leonard looked at her wondering, and had the sense of great things sweeping out of the shrouded night. But he could not receive them, because his heart was still full of little things. As the lost umbrella had spoilt the concert at Queen's Hall, so the lost situation was obscuring the diviner harmonies now. Death, Life, and Materialism were fine words, but would Mr. Wilcox take him on as a clerk? Talk as one would, Mr. Wilcox was king of this world, the superman, with his own morality, whose head remained in the clouds.
"I must be stupid," he said apologetically.
While to Helen the paradox became clearer and clearer. ''"Death destroys a man: the idea of Death saves him."'' Behind the coffins and the skeletons that stay the vulgar mind lies something so immense that all that is great in us responds to it. Men of the world may recoil from the charnel-house [bone-storage vault] that they will one day enter, but Love knows better. Death is his foe, but his peer, and in their age-long struggle the thews of Love have been strengthened, and his vision cleared, until there is no one who can stand against him.
"So never give in," continued the girl, and restated again and again the vague yet convincing plea that the Invisible lodges against the Visible. Her excitement grew as she tried to cut the rope that fastened Leonard to the earth. Woven of bitter experience, it resisted her. Presently the waitress entered and gave her a letter from Margaret. Another note, addressed to Leonard, was inside. They read them, listening to the murmurings of the river.
"""
Death is just infinity closing in.
Death is not extinguishing the light; it is putting out the lamp because the dawn has come.
Maybe. A beautiful thought :)
[the afterlife]
The founder and former CEO of the Visa credit card association.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Describing how a process works is valuable for two reasons. It forces you to make sure you know how it works. Then it forces you to take the reader through the same sequence of ideas and deductions that made the process clear to you. I’ve found it to be a breakthrough for many students whose thinking was disorderly.
(compare to what [[Alan Perlis]] had said [[about understanding|You think you KNOW when you learn, are more sure when you can write, even more when you can teach, but certain when you can program.]].)
''Destiny''
Two people, simply by looking at the future in radically different ways, have completely different futures awaiting them, no matter their immediate course of action. Even the same course of action, coming from a different way of shaping the conversation, will result in a different outcome. We are shaped by our shaping of the world and are shaped again in turn. The way we face the world alters the face we see in the world.
Strangely, every person always lives out their destiny, no matter what they do, according to the way they shape the conversation, but that destiny may be lived out on the level of consummation or complete frustration, through experiencing a homecoming or a distant sense of exile, or more likely some gradation along the spectrum that lies between.
: -- from [[his|David Whyte]] book //"Consolations -- The Solace, Nourishment, and Underlying Meaning of Everyday Words"//
[perspective] [viewpoint] [unpredictability] [randomness]
One of [[several essential conditions of creativity|https://www.brainpickings.org/2014/04/21/jerome-bruner-on-knowing-left-hand-creativity/]] identified by Jerome Bruner, in his book "On Knowing: Essays for the Left Hand":
''Detachment and commitment'': A willingness to divorce oneself from the obvious is surely a prerequisite for the fresh combinatorial act that produces effective surprise. there must be as a necessary, if not a sufficient, condition a detachment from the forms as they exist…
But it is a detachment of commitment. For there is about it a caring, a deep need to understand something, to master a technique, to render a meaning. So while the poet, the mathematician, the scientist must each achieve detachment, they do it in the interest of commitment. And at one stroke they, the creative ones, are disengaged from that which exists conventionally and are engaged deeply in what they construct to replace it.
[[Christopher Hitchens]] told the following story in an interview:
I was once asked by the Vatican to testify against the beatification (nominating to sainthood) of Mother Teresa. And I said "Yes! Of course!".
I was very honored to be asked. And this was the first, and last time, I said: "yes, your holiness!".
It used to be an established practice of the Catholic Church, that in the arguments about sainthood nominations, they had a Devil's Advocate, or [[advocatus diaboli|https://www.newadvent.org/cathen/01168b.htm]]. But the last Pope scrapped this role and office.
So, I had to testify in a seminary room, just with a monsignor, and a deacon, and a priest, and a tape recorder and a bible.
And at that point I realized that I was basically representing the Devil [[pro bono|https://en.wikipedia.org/wiki/Pro_bono]].
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Something I heard from [[my father|Alfred Mark]]; not sure where it's from.
In Yiddish:
Die Welt is a shekerdik, nur Tsures sind emesdik. (העולם הוא שיקרי, אבל צרות הן אמיתיות)
The world is falsehood (illusion), but troubles are real (true).
Compare to the Buddhist belief that [[Life is a joyful participation in a world of sorrows.]]
<<comparequote "Sallustius" "One may call the world a myth, in which bodies and things are visible, but souls and minds hidden. Besides, to wish to teach the whole truth about the Gods to all produces contempt in the foolish, because they cannot understand, and lack of zeal in the good, whereas to conceal the truth by myths prevents the contempt of the foolish, and compels the good to practice philosophy." "the nature of the world">>
Disputes often have nothing to do with what is true and everything to do with what "true" is.
- Robert Laughlin in his book "A Different Universe: Reinventing Physics From the Bottom Down"
- compare to [[Truth is to be judged on the basis of its practical consequences, on its ability to negotiate and enrich human experience.]]
Do not be daunted by the enormity of the world's grief. Do justly, now. Love mercy, now. Walk humbly, now. You are not obligated to complete the work, but neither are you free to abandon it.
:-- from the Talmud
Do not do an immoral thing for moral reasons.
Do not hurry; do not rest.
In German:
>Ohne Hast, aber ohne Rast.
(Compare to [[Shunryu Suzuki]]'s take on [[balanced living|You are perfect the way you are, and you can use a little improvement.]]).
Pay no attention to appearing. Being is alone important.
[...]
Do not seek to //be// through the vain desire to //appear//; but rather because it is fitting to be so.
[...]
We appear because we are.
The two must be joined in a mutual dependence. Then you get the desired imperative. One must be to appear.
: -- from [[his diary|https://www.brainpickings.org/2015/03/13/andre-gide-journals-sincerity/]] titled //The Journals of André Gide//
''Do Not Stand at My Grave and Weep - poem by Mary Elizabeth Frye''
"""
Do not stand
By my grave, and weep.
I am not there,
I do not sleep—
I am the thousand winds that blow
I am the diamond glints in snow
I am the sunlight on ripened grain,
I am the gentle, autumn rain.
As you awake with morning’s hush,
I am the swift, up-flinging rush
Of quiet birds in circling flight,
I am the day transcending night.
Do not stand
By my grave, and cry—
I am not there,
I did not die.
"""
Do stuff. Be clenched, curious. Not waiting for inspiration's shove or society's kiss on your forehead. Pay attention. It's all about paying attention. Attention is vitality. It connects you with others. It makes you eager. Stay eager.
[action] [aliveness] [engagement]
Actor [[Joel Gray|https://en.wikipedia.org/wiki/Joel_Grey]] offers a common analysis when he says that “it [Fiddler] works in so many languages — and everyone thinks it’s about them.”
Author [[Joseph Stein|https://en.wikipedia.org/wiki/Joseph_Stein]] recalls attending a Tokyo production where an audience member asked him: “Do they understand ‘Fiddler’ in America? It’s so Japanese.”
Since it debuted on Broadway in 1964, not a day has passed when [[“Fiddler on the Roof”|https://en.wikipedia.org/wiki/Fiddler_on_the_Roof]] was not being performed somewhere on Earth.
[Jewish]
The HEARTMATH Solution.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Documentation is like term insurance: It satisfies because almost no one who subscribes to it depends on its benefits.
[[He|Reginald Horace Blyth]] used nine words to distill his own version of the intimate relationships among Zen, poetry, and haiku:
in Zen, he said, “Doer is deed.”
In poetry, “Word is thing.”
In haiku, “Meaning is sensation.”
Does character develop over time? In novels, of course it does: otherwise there wouldn't be much of a story. But in life? I sometimes wonder. Our attitudes and opinions change, we develop new habits and eccentricities; but that's something different, more like decoration. Perhaps character resembles intelligence, except that character peaks a little later: between twenty and thirty, say. And after that, we're just stuck with what we've got. We're on our own. If so, that would explain a lot of lives, wouldn't it? And also—if this isn't too grand a word—our tragedy.
: ― in //The Sense of an Ending//
[destiny] [humanity]
The founder of the Soto Zen school of Buddhism in Japan.
<<list-links "[tag{!!title}]">>
Dogs look up to you, cats look down on you. Pigs look you in the eye and treat you as an equal.
(and [[Ursula K. Le Guin]] said about cats:
> Cats are intensely opportunistic, practical anarchists.
)
Don't ask for things, that you might enjoy life. You were given life, so that you might enjoy things.
Don't be afraid, the darkness you're in is no greater than the darkness inside your own body, they are two darknesses separated by a skin, I bet you've never thought of that, you carry a darkness about with you all the time and that doesn't frighten you...my dear chap, you have to learn to live with the darkness outside just as you learned to live with the darkness inside.
Compare to [[Richard Feynman]]'s [[take on uncertainty|I can live with doubt and uncertainty and not knowing. I think it's much more interesting to live not knowing than to have answers which might be wrong.]]
[ambiguity] [uncertainty]
Don't believe everything you think.
Don't cry because it's over. Smile because it happened.
(Compare to [[The best way to pay for a lovely moment is to enjoy it.]]).
On a car bumper sticker:
> Don't drive faster than your guardian angel can fly.
Or as Dr. Seuss had written:
"""
You'll look up and down streets. Look 'em over with care.
About some you will say, "I don't choose to go there."
With your head full of brains and your shoes full of feet,
you're too smart to go down any not-so-good street.
"""
: -- from [[his|Dr. Seuss]] book "//Oh, The Places You'll Go!//"
[traveling] [responsible journeying]
Don't fall into the 'sunk cost trap' (where cost is not the only thing that sinks).
(See also [[David Epstein Quotes]]).
Don't gamble^^1^^; take all your savings and buy some good stock and hold it till it goes up, then sell it. If it don't go up, don't buy it.
[money] [investment] [speculate]
And applying the same "logic", [[Piet Hein]] advised how to successfully time toasting bread:
> There's an art of knowing when.
> Never try to guess.
> Toast until it smokes and then
> twenty seconds less.
----
^^1^^ [[Wilson Mizner]] defined Gambling as "The sure way of getting nothing for something."
"""
Don't miss now for then.
Always do now for now.
Then, when then is now,
You will still be doing NOW for NOW.
"""
:-- from her book //That Which You Are Seeking Is Causing You To Seek//
On time management:
Don't mistake motion for progress, and don't get caught up in the thick of thin things.
Don't only think you know. You should also know you think.^^1^^
[awareness]
----
^^1^^ and that's because, as [[John Wooden|https://en.wikipedia.org/wiki/John_Wooden]] had said:
> If you pay attention, it's what you learn after you know it all that counts.
Don't try to use what you learn from Buddhism to be a better Buddhist; use it to be a better whatver-you-already-are.
There is a discussion of the important link and significance of play (paidia) in the education/culture (paideia) of the citizen and the community in [[Plato]]'s Republic and the contrasting educational approaches of sophistic coercion and philosophical persuasion.
> Well then, the studying and all education must be put before them as children, and the instruction must not be given the aspect of a compulsion to learn, because the free man ought not to learn any study slavishly. Forced labors performed by the body don't make the body any worse, but no forced study abides in the soul. Therefore, you best of men, don't use force in training the children in the subjects, but rather play. In that way you can better discern what each is naturally directed toward.
Or summarized/translated differently:
> There should be no element of slavery in learning. Enforced exercise does no harm to the body, but enforced learning will not stay in the mind. So avoid compulsion, and let your children's lessons take the form of play.
: -- [[Plato]]'s "//Republic//", 7.536e-f
Don't you wish there were a knob on the TV to turn up the intelligence? There's one marked 'Brightness,' but it doesn't work.
Don’t ask what the world needs. Ask what makes you come alive, and go do it. Because what the world needs is people who have come alive.
[meaning of life] [ joy]
(Sometimes the best approach:)
Don’t preach. Don’t teach. Don’t judge. Take a loved child by the hand and explore something fascinating together.
On talent: don’t tell me that hard work can be more important than talent. This is a handy platitude for motivating our kids to study or practice piano, but, hard work is a talent. The ability to push yourself, to keep working, practicing, studying more than others is itself a talent. If anyone could do it, everyone would. As with any talent, it must be cultivated to blossom.
:-- From his book “Deep Thinking”
[career advice]
Don’t think of it as dying; just think of it as leaving early to avoid the rush.
Don’t waste your life, practise (moment-by-moment mindfulness) in daily life!
: -- from his book //Defilements//
Suzuki Roshi in his book //Not Always So//
<<list-links "[tag{!!title}]">>
Donald Ervin Knuth (born January 10, 1938) is a computer scientist and Professor Emeritus of the Art of Computer Programming at Stanford University.
[[Donald Knuth|http://en.wikipedia.org/wiki/Donald_Knuth]] (a "[[CS Sage|https://en.wikipedia.org/wiki/List_of_computer_scientists]]").
<<list-links "[tag{!!title}]">>
a British physicist who made important contributions to cybernetics and the question of "meaning" in information theory.
http://www.informationphilosopher.com/solutions/scientists/mackay/
<<list-links "[tag{!!title}]">>
[[Ursula K. Le Guin]] is like the novelist Doris Lessing; they do not reflect the world; they absorb it.
: -- [[John Clute|https://en.wikipedia.org/wiki/John_Clute]] (Sci-Fi critic)
<<list-links "[tag{!!title}]">>
Dorothy Leigh Sayers (13 June 1893-17 December 1957) who preferred to be referred to as Dorothy L Sayers, was a renowned English crime writer, poet, playwright, essayist, translator and Christian humanist. She was also a student of classical and modern languages. She is best known for her mysteries, a series of novels and short stories set between the First and Second World Wars that feature English aristocrat and amateur sleuth Lord Peter Wimsey, that remain popular to this day. However, Sayers herself considered her translation of Dante's Divine Comedy to be her best work. She is also known for her plays, literary criticism and essays.
In 1912, she won a scholarship to Somerville College, Oxford, and studied modern languages and medieval literature. She finished with first-class honours in 1915. Although women could not be awarded degrees at that time, Sayers was among the first to receive a degree when the position changed a few years later, and in 1920 she graduated as a MA. Her experience of Oxford academic life eventually inspired her penultimate Peter Wimsey novel, Gaudy Night.
:-- Wikipedia
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
"I don't need you to agree with me," she said quietly." I'll go away happy with a little bit of doubt. Doubt is good. It's an emotion we can build on. Perhaps if we feed it with curiosity it will blossom into something useful, like suspicion - and action^^1^^.”
: ― Jasper Fforde in his book //Shades of Grey//
----
^^1^^ and [[I|Haggai Mark]] would add: or //non//-(rash)action. Agreeing with [[Queen Elizabeth II]] on the importance and wisdom (and difficulty) of (sometimes) [[doing nothing|To do nothing is often the best course of action, but I know from personal experience how frustrating it can be. History was not made by those who did nothing.]].
Doubt is not a pleasant condition, but certainty is absurd.
Doubt is the privilege of those who have lived a long time.
Doubt seems to be a double-edged sword: One blade cuts through orthodoxy allowing for new potential truths, while the other blade seeks to sever the head of reason from the body of society.
The resolution to this anomaly is that these two kinds of doubt are in fact very different mental attitudes, where some would like us to believe that they are one and the same.
Scientific doubt seeks to reveal the hidden assumptions and limitations of measurement and reason in our existing beliefs. Conspiratorial doubt seeks to replace a small, partially supported belief with a larger, unsupported one. And in so doing avoid the responsibility of appropriate action.
[...]
Our current troubles with climate deniers and anti-vaxxers have a rather noble pedigree [i.e., Rene Descartes] — they share the objective of mapping an ideological position onto a scientific one. But unlike scientific doubt that seeks to question what we know in order to make space for alternative simpler ideas, conspiratorial doubt challenges what we know with a metaphysics of inaction. Conspiratorial doubt is not one that moves the world forward but a reactionary belief that tethers our world to the status quo.
: -- from the article titled [["We Have to Talk About Doubt. How to tell the difference between scientific and conspiratorial skepticism."|https://nautil.us/issue/104/harmony/we-have-to-talk-about-doubt]]
American engineer and inventor, and an early computer and Internet pioneer.
<<list-links "[tag{!!title}]">>
"""
Douglas Noel Adams was an English writer, humourist and dramatist. He is best known as the author of The Hitchhiker's Guide to the Galaxy, which started life in 1978 as a BBC radio comedy before developing ...
Born: March 11, 1952, Cambridge
Died: May 11, 2001, Santa Barbara
"""
::-- Wikipedia
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
AKA Theodor Seuss Geisel :)
<<list-links "[tag{!!title}]">>
Drawing on my fine command of language, I said nothing.
:: -- attributed to Robert Benchley
“But if you do not wish it, all this that I have related to you is and will remain a dream,” writes Herzl in his epilogue to Altneuland. It is only a matter of will. “Dreams are not so different from Deeds as some may think,” he continues. “All the Deeds of men are only Dreams at first, and all their deeds will one day become only dreams."
:: from the epilog to Theodor Herzl's book "Old-New Land" (Altneuland).
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Electric Vehicle drivers kick gas.
:: -- seen on a bumper sticker.
Each memory recalled must do some violence to its origins. As in a party game. Say the words and pass it on. So be sparing. What you alter in the remembering has yet a reality, known or not.
: -- from [[his|Cormac McCarthy]] book //"The Road"//
[silence] [honesty] [humility]
I assume that there are structures of meaning that do not align themselves with reason, insofar as reason operates within the closed system of neo-Darwinist reality.
Earthly nature might be parsimonious, but the human mind is prodigal ["wasteful", prolific], itself an anomaly that in its wealth of error as well as of insight is exceptional, utterly unique as far as we know, properly an object of wonder.
: -- from [[Robinson|Marilynne Robinson]]'s essay //Cosmology//, in her book //When I was a Child I Read Books//.
Easy reading is damn hard writing.
<<list-links "[tag{!!title}]">>
AKA Koheleth, the son of King David, who wrote [[the book|http://www.mechon-mamre.org/p/pt/pt3101.htm]]
<<list-links "[tag{!!title}]">>
I sometimes dream of situations that can’t possibly come true. I audaciously imagine, for example, that I get a chance to chat with the Ecclesiastes, the author of that moving lament on the vanity of all human endeavors. I would bow very deeply before him, because he is, after all, one of the greatest poets, for me at least. That done, I would grab his hand.
“‘There’s nothing new under the sun’^^1^^: that’s what you wrote, Ecclesiastes. But you yourself were born new under the sun. And the poem you created is also new under the sun, since no one wrote it down before you. And all your readers are also new under the sun, since those who lived before you couldn’t read your poem. And that cypress that you’re sitting under hasn’t been growing since the dawn of time. It came into being by way of another cypress similar to yours, but not exactly the same.
And Ecclesiastes, I’d also like to ask you what new thing under the sun you’re planning to work on now? A further supplement to the thoughts you’ve already expressed? Or maybe you’re tempted to contradict some of them now? In your earlier work you mentioned joy – so what if it’s fleeting? So maybe your new-under-the-sun poem will be about joy? Have you taken notes yet, do you have drafts? I doubt you’ll say, ‘I’ve written everything down, I’ve got nothing left to add.’ There’s no poet in the world who can say this, least of all a great poet like yourself."
: -- from [[her|Wislawa Szymborska]] [[Nobel Prize lecture|http://www.nobelprize.org/nobel_prizes/literature/laureates/1996/szymborska-lecture.html]]
----
^^1^^ [[Kohelet/Ecclesiastes 1:9|https://www.sefaria.org/Ecclesiastes.1.9?ven=Kohelet_by_Bruce_Heitler&lang=bi]]: מַה־שֶּֽׁהָיָה֙ ה֣וּא שֶׁיִּהְיֶ֔ה וּמַה־שֶּׁנַּֽעֲשָׂ֔ה ה֖וּא שֶׁיֵּעָשֶׂ֑ה וְאֵ֥ין כׇּל־חָדָ֖שׁ תַּ֥חַת הַשָּֽׁמֶשׁ׃
(Ma she-haya hu she-yihiye, u-ma she-naasa hu she-yease, ve-en chadash tachat ha-shemesh).
What has been is what will be, and what was done is what will be done, there is nothing new under the sun.
[optimism]
<<list-links "[tag{!!title}]">>
[[His website|https://edyong.me/]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Edmund Burke (12 January 1729 – 9 July 1797) was an Irish political philosopher, Whig politician and statesman who is often regarded as the father of modern conservatism.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Edsger Wybe Dijkstra (May 11, 1930 – August 6, 2002) was a Dutch computer scientist (or a "[[CS Sage|https://en.wikipedia.org/wiki/List_of_computer_scientists]]"). He received the 1972 Turing Award for fundamental contributions to developing programming languages, and was the Schlumberger Centennial Chair of Computer Sciences at The University of Texas at Austin from 1984 until 2000.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Education is what, when, and why to do things. Training is how to do it.^^1^^ In science, if you know what you are doing, you should not be doing it. In engineering, if you do not know what you are doing, you should not be doing it.
: -- [[Richard Hamming]]: The Art of Doing Science and Engineering (1997)
----
^^1^^ he also said: One without the other isn’t too good (if you want to achieve great things).
Education that gives priority to measurement rather than values, to efficiency rather than conscience, to information rather than ethics, provides no barrier to barbarity and violence. The Holocaust was perpetrated by a society of the most disciplined, highly educated people on earth.
::― from [[his|Dee Hock]] //Autobiography of a Restless Mind: Reflections on the Human Condition//
<<list-links "[tag{!!title}]">>
Edward Charles Francis Publius de Bono, please :)
<<list-links "[tag{!!title}]">>
A professor of Mathematics at UC Berkeley
http://www.edwardfrenkel.com/about/
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
American poet and educator
<<list-links "[tag{!!title}]">>
Data scientist Edward Tufte (dubbed the "Galileo of graphics" by BusinessWeek) pioneered the field of data visualization.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Lord Barnetson, chairman of the London Observer, has had attributed to him the following anecdote about how a management critic would review Schubert's Unfinished Symphony:
* It appears that for a considerable period of time the four oboe players had nothing to do. The number should be reduced, and their work spread over the whole orchestra...
* All twelve violins were playing identical notes. This seems unnecessary duplication and the staff of the section should be drastically cut...
* Much effort was absorbed in the playing of demi-semi-quavers. This seems an excessive refinement, and it is recommended that all notes be rounded up to the nearest semiquaver...
* No useful purpose is served by repeating with horns the passage that had already been handled by the strings...
: -- from [[Jon Jagger's blog|http://jonjagger.blogspot.com/search/label/jokes]].
Ego is the __process__ of our suffering. It is a how, not a what. When we understand how we do something, we are free to change it.
:-- from her book //That Which You Are Seeking Is Causing You To Seek//
Ego, Envy, Avarice, and Ambition: Four beasts that inevitably devour their keeper. Harbor them at your peril, for although you expect to ride on their back, you will end up in their belly.
An anecdote [[Lee Smolin]] (who is not a slouch!) told [[Lex Fridman]]:
There are things which are right there in front of us which we miss and I'll quote my friend Eric Weinstein in saying:
Look Einstein carried his luggage, Freud carried his luggage, Marx carried his luggage, Martha Graham carried her luggage, Edison carried his luggage. All these geniuses carried their luggage and not once before relatively recently did it occur to anybody to put wheels on luggage and pull it; and it was right there waiting to be invented for centuries.
So, there's stuff right in front of our eyes that once it clicks i.e., we put the wheels on the luggage, a lot of things will fall into place. Every day I wake up and think why can't I be that guy who was walking through the airport...
: -- [[Lee Smolin]] in an interview with [[Lex Fridman|https://lexfridman.com/]] titled [["Lee Smolin: Quantum Gravity and Einstein's Unfinished Revolution"|https://www.youtube.com/watch?v=WgLo4gmEraU&t=0s]].
[innovation] [originality] [creative thinking] [creativity]
Einstein's advice to a young theoretical physicist:
:{{imgquote}} if you are sure that your ideas are right, and therefore you want to be able to work full time on your research without interruptions, get a job as a light-house keeper. On the other hand, if you are not that confident, then as a matter of insurance get a job as a teacher. Then if the research does not pay off, at least you will have the satisfaction of knowing that you are making a useful contribution to society.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
"""
M.D. was a Swiss American psychiatrist, a pioneer in Near-death studies and the author of the groundbreaking book On Death and Dying, where she first discussed what is now known as the Kübler-Ross model.
Born: July 8, 1926, Zürich
Died: August 24, 2004, Scottsdale
Movies: Facing Death: Elisabeth Kubler-Ross
"""
<<list-links "[tag{!!title}]">>
https://ellafrancessanders.com/
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<div class="tc-sidebar-lists">
<$set name="searchTiddler" value="$:/temp/search1">
<div class="tc-search">
<$edit-text tiddler="$:/temp/search1" type="search" tag="input" focus={{$:/config/Search/AutoFocus}} focusPopup=<<qualify "$:/state/popup/search-dropdown">> class="tc-popup-handle"/>
<$reveal state="$:/temp/search1" type="nomatch" text="">
<$button tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class="tc-btn-invisible">
<$action-setfield $tiddler="$:/temp/advancedsearch" text={{$:/temp/search1}}/>
<$action-setfield $tiddler="$:/temp/search1" text=""/>
<$action-navigate $to="$:/AdvancedSearch"/>
{{$:/core/images/advanced-search-button}}
</$button>
<$button class="tc-btn-invisible">
<$action-setfield $tiddler="$:/temp/search1" text="" />
{{$:/core/images/close-button}}
</$button>
<$button popup=<<qualify "$:/state/popup/search-dropdown">> class="tc-btn-invisible">
{{$:/core/images/down-arrow}}
<$list filter="[{$:/temp/search1}minlength{$:/config/Search/MinLength}limit[1]]" variable="listItem">
<$set name="resultCount" value="""<$count filter="[!is[system]search{$(searchTiddler)$}]"/>""">
</$set>
</$list>
</$button>
</$reveal>
<$reveal state="$:/temp/search1" type="match" text="">
<$button to="$:/AdvancedSearch" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class="tc-btn-invisible">
{{$:/core/images/advanced-search-button}}
</$button>
</$reveal>
</div>
<$reveal tag="div" class="tc-block-dropdown-wrapper" state="$:/temp/search1" type="nomatch" text="">
<$reveal tag="div" class="tc-block-dropdown tc-search-drop-down tc-popup-handle" state=<<qualify "$:/state/popup/search-dropdown">> type="nomatch" text="" default="">
<$list filter="[{$:/temp/search1}minlength{$:/config/Search/MinLength}limit[1]]" emptyMessage="""<div class="tc-search-results">{{$:/language/Search/Search/TooShort}}</div>""" variable="listItem">
{{$:/core/ui/SearchResults}}
</$list>
</$reveal>
</$reveal>
</$set>
</div>
Embody the most powerful ideas of the culture in the environment.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Emily Elizabeth Dickinson (December 10, 1830 – May 15, 1886) was an American poet. Born in Amherst, Massachusetts, to a successful family with strong community ties, she lived a mostly introverted and reclusive life.
After she studied at the Amherst Academy for seven years in her youth, she spent a short time at Mount Holyoke Female Seminary before returning to her family's house in Amherst.
Thought of as an eccentric by the locals, she became known for her penchant for white clothing and her reluctance to greet guests or, later in life, even leave her room. Most of her friendships were therefore carried out by correspondence.
!!! Marilynne Robinson on Emily Dickinson
{{Marilynne Robinson on Emily Dickinson}}
<<list-links "[tag{!!title}]">>
French Jewish - https://en.wikipedia.org/wiki/Emmanuel_Levinas
<<list-links "[tag{!!title}]">>
Empathy isn’t just something that happens to us—a meteor shower of synapses firing across the brain—it’s also a choice we make: to pay attention, to extend ourselves. It’s made of exertion, that dowdier cousin of impulse.
:: from her book “The Empathy Exams”
Inspired and paraphrased and adopted for computing/Computer Science instead of mathematics.
Engaging in computing and computational exploring and play encourages and builds virtues which enable us to flourish in every area of our lives.
* It builds __hopefulness__ - since by engaging you are expressing and experiencing hope that eventually you will overcome and resolve challenges and obstacles.
* It develops __curiosity__ and the "itch" to ask questions and follow leads to wherever they take you.
* It also develops and encourages __concentration__ since it rewards sustained focus and staying power with problems, to the exclusion of distractions.
* It builds __confidence__ by rewarding hard work with results and new insights.
* It also builds __perseverance__ which grows and strengthens with new challenges, and makes you more fit and ready for the next challenges.
* It develops the __ability to change perspective__ and see problems from different viewpoints.
* It also encourages an __openness of spirit__ when you share your struggles, successes, and insights with others.
: -- from [[his|Francis Su]] book "//Mathematics for Human Flourishing//" (pg. 60-61, 2020 edition)
[success] [playfulness]
<<list-links "[tag{!!title}]">>
Enjoyment is not a goal, it is a feeling that accompanies important ongoing activity.
Enlightenment is a quality of life rather than a state of mind; it entails not altered states but altered traits.
: -- in [[his|John Horgan]]'s book //Rational Mysticism//
[living well]
Enlightenment is like the moon reflected on the water.
The moon does not get wet, nor is the water broken.
Although its light is wide and great, the moon is reflected even in a puddle an inch wide.
The whole moon and the entire sky are reflected in one dewdrop on the grass.
Enlightenment is the easiest way in the world to live.
see also [[Buddhism is a clever way to enjoy life.|Buddhism is a clever way to enjoy life.]]
Enlightenment is the "ending in yourself of that hope for something other than life being as it is" and unfolds practice as the effortless effort to allow your experience to be exactly what it is at this time—that is, to fully commit to the present moment. Feeling unconditionally alive instead of chasing happy feelings is the fruit of this practice.
: -- from [[Christian Dillo]]'s podcast [["Enlightenment, Practice, Awareness"|https://blubrry.com/crestone_mountain_zen_center/88295501/enlightenment-practice-aliveness/]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Epicurus's old questions are still unanswered: Is he (God) willing to prevent evil, but not able? then he is impotent. Is he able, but not willing? then he is malevolent. Is he both able and willing? then whence evil?
Equanimity and responsiveness are orthogonal – becoming more equanimous does not mean that you must become less responsive, and becoming more responsive does not mean that you must become less equanimous.
: -- from [[a blog entry|http://rationaldharma.com/blog/i-wasted-8-years-of-meditation-because-i-didnt-understand-these-4-things/]] at rationaldharma.com (by Ollie.shinkai, AKA RationalShinkai, AKA Ollie Bray?)
[skill acquisition] [practice] [meditation] [deliberate practice]
at https://en.wikiquote.org/wiki/Eric_Hoffer
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
The inimitable (I like this word, especially when it applies to :) [[Ursula K. Le Guin]], in her (last :( book //The Wave in the Mind: Talks and Essays on the Writer, the Reader and the Imagination//, in the story //Introducing Myself//:
:{{imgquote}} What it comes down to, I guess, is that I am just not manly. Like [[Ernest Hemingway]] was manly. The beard and the guns and the wives and the little short sentences. I do try.
{{imgblank}} [...]
: I don't have a gun [...] and my sentences tend to go on and on and on, with all this syntax in them. Ernest Hemingway would have died rather than have syntax. Or semicolons. I use a whole lot of half-assed semicolons; there was one of them just now; that was a semicolon after “semicolons,” and another one after “now."
:{{imgblank}}
: And another thing. [[Ernest Hemingway]] would have died rather than get old. And he did. He shot himself. A short sentence. Anything rather than a long sentence, a life sentence. Death sentences are short and very, very manly. Life sentences aren't. They go on and on, all full of syntax and qualifying clauses and confusing references and getting old.
(This could have been a great response to [[Kurt Vonnegut]]'s [[disparaging of semicolons|A key to great writing is to never use semi-colons...]] :).
<<list-links "[tag{!!title}]">>
alternative spelling: Erwin Schrodinger, Erwin Schroedinger
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Eugène Ionesco (born Eugen Ionescu; 26 November 1909 – 28 March 1994) was a Romanian and French playwright and dramatist, and one of the foremost playwrights of the Theatre of the Absurd. Beyond ridiculing the most banal situations, Ionesco's plays depict in a tangible way the solitude and insignificance of human existence.
<<list-links "[tag{!!title}]">>
A physicist and Nobel laureate.
<<list-links "[tag{!!title}]">>
Even after my parents' death I still have a relationship with them, and it's a relationship that can change, even though they keep on being dead. How I relate to them now is up to me.
(compare to [[Carl Sagan]]'s [[experience and longing for his dead parents|Carl Sagan on humane skepticism]]).
וְאִלּוּ חָיָה, אֶלֶף שָׁנִים פַּעֲמַיִם, וְטוֹבָה, לֹא רָאָה--הֲלֹא אֶל-מָקוֹם אֶחָד, הַכֹּל הוֹלֵךְ.
Even if he lives a thousand years twice over, he will enjoy no good, since all goes to one place.
:: -- Ecclesiastes Chapter 6 קֹהֶלֶת; 6
[ [[Koheleth|https://www.mechon-mamre.org/p/pt/pt3106.htm]], the son of King David]
Even if the open windows of science at first make us shiver after the cosy indoor warmth of traditional humanizing myths, in the end the fresh air brings vigor, and the great spaces have a splendor of their own.
Even the seemingly trivial choices can butterfly enormous ripples of which we may remain wholly unwitting [not aware] — we’ll never know the exact misfortunes we’ve avoided by going down this street and not that, nor the exact magnitude of our unbidden [uninvited] graces.
: -- in [[her|Maria Popova]] introduction to [[Simone de Beauvoir|]]'s writing on [[How Chance and Choice Converge to Make Us Who We Are|https://www.brainpickings.org/2017/01/06/simone-de-beauvoir-all-said-and-done-chance-choice/]].
[serendipity]
"""
every beginning
is only a continuation
and the book of fate is
always open in the middle.
"""
: from [[her|Wislawa Szymborska]] poem //"Love at First Sight"//
[destiny] [luck]
Daniel Dennett quoted Alain:
Every boat is copied from another boat...
It is clear that a very badly made boat will end up at the bottom after one or two voyages and thus never be copied...
One could then say, with complete rigor, that it is the sea herself who fashions the boats, choosing those which function and destroying the others.
:: -- from [[a talk by Daniel Dennett "Memes Saved from Extinction"|https://www.youtube.com/watch?v=04CHFLP2hMc&feature=youtu.be]] at the Santa Fe Institute
and Dennett adds: "If it comes back [from the sea], copy it! That's natural selection."
Every campsite is left behind in the morning.
Analogy about life, compared to [[Shunryu Suzuki|Life is like stepping onto a boat that is about to sail out to sea and sink.]]
Every computer program is a model, hatched in the mind, of a real or mental process. These processes, arising from human experience and thought, are huge in number, intricate in detail, and at any time only partially understood. They are modeled to our permanent satisfaction rarely by our computer programs. Thus even though our programs are carefully handcrafted discrete collections of symbols, mosaics of interlocking functions, they continually evolve: we change them as our perception of the model deepens, enlarges, generalizes [...]
[[If art interprets our dreams, the computer executes them in the guise of programs!]]
Every human being lives in a bubble. This bubble contains all their perceptions and cognitions. What exists outside the bubble is not knowable. Radical constructivists 'do not make claims about what exists in itself, that is, without an observer or experiencer.'
I claim that there exists no mathematical knowledge that is completely objective. Mathematical knowledge and truth must be considered as a package with both objective and subjective aspects. The belief in ‘objective mathematical knowledge,’ that is, knowledge that is independent of the beings who know it, is itself a belief and therefore nonobjective. There is no knowledge that is independent of knowing. There is no absolute, objective truth.
: -- from [[his|William Byers]] book //“How Mathematicians Think.”//
Though the albatross is untouchable in its flight once launched into the wind, it has a very hard time actually getting off and away in the air due to its weight and size. It needs either a good breeze to lift it from the chop or a large cliff from which to propel itself. For the young albatross coming to maturity, the only way into the air was over the huge cliff that lay to one side of where they had hatched. Every one of the thousands of albatross chicks had but one chance in their short lives to learn to fly.
It was heart-stopping to watch the rotund birds stagger toward that abyss, slowly pick up speed, and then suddenly stop themselves at the edge, practicing for the fateful launch. I would see them, day after day, lumbering back away from the cliff, their heads swaying purposefully and distinctively from side to side. Some inner evolutionary conviction pushing them into this all-or-nothing leap.
I remember looking down from that cliff one still day without a breath of wind in the air, a day, unfortunately, the growing birds had responded to some inner urgency to try at last. All along the bottom of the cliff lay the bodies of young albatross I had seen come to maturity in the previous months. All that growing come to nothing. The nesting areas now silent and empty of familiar birds I had come to recognize despite their fluffy anonymity.
Without the help of a breeze, they had not cleared the rocks below and their white bodies had smashed into the jutting lava, littering the whole length of the shoreline. White ragged piles on the black lava. A few, a very few, had made it; they were floating with their elders out on the waves, survivors who would carry their skills into the limitless ocean.
In their bodies were hidden the wellsprings of talent that would flood into the next generation. It was a fierce but exhilarating sight, one that would make me, nevertheless, question God's way of going about things. You had to ask yourself what equivalent, seemingly merciless urgencies, informed our own human world.
:-- From: “Crossing the unknown sea: work as a pilgrimage of identity.”
Every time I read a great book I felt I was reading a kind of map, a treasure map, and the treasure I was being directed to was in actual fact myself. But each map was incomplete, and I would only locate the treasure if I read all the books, and so the process of finding my best self was an endless quest. And books themselves seemed to reflect this idea. Which is why the plot of every book ever can be boiled down to ‘someone is looking for something’.
: — in his book //Reasons to Stay Alive//
Everybody is ignorant. Only on different subjects.
see also: [[Albert Einstein's take on this|The difference between what the most and the least learned people know is inexpressibly trivial in relation to that which is unknown.]]
Everyone believes in something. I believe I'll have another beer.
or as Peter De Vries had said:
> A man has to believe in something, and I believe I'll have another drink.
: -- from his book //The Vale of Laughter//
and also
> I once tried drowning my sorrows, till I found out they could swim.
: -- ibid. ([[ibidem|https://en.wikipedia.org/wiki/Ibid.]])
Everyone can be great because anyone can serve. You don't have to have a college degree to serve. You don't even have to make your subject and verb agree to serve...You only need a heart full of grace, a soul generated by love.
The Jews are a peculiar people: things permitted to other nations are forbidden to the Jews. Other nations when victorious on the battlefield [after the 6-Day-War in 1967, for example] dictate peace terms, but when Israel is victorious it must sue for peace.
Everyone expects the Jews to be the only real Christians in this world.
Other nations when they are defeated survive and recover. But should Israel be defeated it would be destroyed.
Everything is only for a day, both that which remembers and that which is remembered.
: -- from [[his|Marcus Aurelius]] //Meditations//
Everything is relative. And there is nothing other than everything and relativity.
In other words, we, humans, are by definition (and nature) in a bubble (see [[Thomas Nagel]]^^1^^), and view "everything" (i.e., all we can perceive and conceive) from our human perspective (como no?!).
----
^^1^^ for example: [[Certainly it is possible for a human being to believe that there are facts which humans never will possess the requisite concepts to represent or comprehend.]]
Clark's Law:
Everything leaks.
There are no clear-cut level distinctions in nature. Neural software bleeds into neural firmware, neural firmware bleeds into neural hardware, psychology bleeds into biology and biology bleeds into physics. Body bleeds into mind and mind bleeds into world. Philosophy bleeds into science and science bleeds back.The idea of levels is a useful fiction, great for hygienic text-book writing and quick answers that defend our local turf but seldom advance scientific understanding.
<<comparequote "Halford John Mackinder" "Knowledge is one. Its division into subjects is a concession to human weakness." "the nature of knowledge">>
Everything needed for our well-being is right before us, whereas what luxury requires is gathered by many miseries and anxieties. Let us use this gift of nature and count it among the greatest things.
Everything should be built top-down, except the first time. (in defense of bricolage?)
Everything should be made as simple as possible, but not simpler.
(see the [[Quote Investigator|https://quoteinvestigator.com/]] on [[the origin of this squote|http://quoteinvestigator.com/2011/05/13/einstein-simple/]]).
And [[C.A.R. Hoare]] adds:
> The unavoidable price of reliability is simplicity.
These two go together in the sense, that you should strive for simplicity because it has value/benefits, for example understanding (Einstein) or reliability (Hoare), but those gains have a price.
Or as [[Ka Wai Cheung|https://www.goodreads.com/author/quotes/499304.Ka_Wai_Cheung]], in his book //The Developer's Code// (in the good series the Pragmatic Bookshelf), said: ''"Lie to simplify"''. Pare down a complex topic and break it down to a "less than perfect" one, in the first iteration.
<<comparequote "Jerome Bruner" "Any subject can be taught in some intellectually honest form to any child at any stage of development." "intellectual honesty in teaching">>
This may be echoed in [[The Best of It - poem by Kay Ryan]] (referring to a different context).
Everything will be all right in the end. And if it's not all right then it's not yet the end.
: -- Sonny (the young Indian hotel owner, played by Dev Patel) in the movie "The Best Exotic Marigold Hotel" by director John Madden with Judi Dench, Bill Nighy, Maggie Smith, Tom Wilkinson
Or maybe on the flip side:
> A pessimist is always right in the long run, but only an optimist enjoys the ride there.
:: -- [[Haim Shapira]] in his book //"What Really Matters"//
(see another case of being [[all right|My Left Left - poem by Kenn Nesbitt]])
Everything you read in the newspapers is absolutely true except for that rare story of which you happen to have firsthand knowledge.
: -- Knoll's Law of Media Accuracy
<<comparequote "Michael Crichton" "'wet streets cause rain' stories" "accuracy of News">>
<<comparequote "Mark Twain" "If you don’t read the newspaper, you’re uninformed. If you read the newspaper, you're misinformed." "knowledge and misinformation">>
From the poem [[A Lesson From History|https://www.ellenbailey.com/poems/ellen_202.htm]] by Joseph Morris
"""
Everything's easy after it's done;
Every battle's a 'cinch' that's won;
Every problem is clear that's solved--
The earth was round when it revolved!
"""
(on which, [[G. K. Chesterton]] jokingly commented: [[I agree with the realistic Irishman who said he preferred to prophesy after the event.]]).
Evolution is the amplification of noise.
You don’t have to understand [the enormous, unfathomable future]. If only you bear in mind what is possible within the human realm, you have enough to get started in the right direction, one step at a time. At no point will you encounter a wall of blinding light. At no point will you have to jettison yourself over a precipice. As you advance, the horizon will recede. The transformation is profound, yes, but it can be as gradual as the process that grew the baby you were into the adult you think you are.
: -- from [[his|Nick Bostrom]] article [["Letters from Utopia"|https://www.nickbostrom.com/utopia.html]] (2008)
[potential] [possibilities]
Example isn't another way to teach, it is the only way to teach.
Experience is a poor teacher: it gives its tests before it teaches its lessons.
(similar to [[In school, first you receive a lesson and then get a test. In life, first you are tested and then you (maybe) learn a lesson.]])
[[Aldous Huxley]] famously wrote that ‘experience is not what happens to you, it is what you do with what happens to you’.
That is profoundly correct – our life experience is not one event after the other, but a series of opportunities to grow by making sense of what is meaningful and what isn’t.
: ― from [[Jonathan Rowson]]'s book //The Moves That Matter: A Chess Grandmaster on the Game of Life//
Perhaps one could ‘convince someone that God exists’ by means of a certain kind of upbringing, by shaping his life in such a way.
Life can educate one to a belief in God. And experiences too are what bring this about; but I don’t mean visions and other forms of sense experience which show us the ‘existence of this being’, but, e.g., sufferings of various sorts. These neither show us God in the way a sense impression shows us an object, nor do they give rise to conjectures about him. Experiences, thoughts, — life can force this concept on us.
"""
"""
In a [[paper titled "The Two Settings of Kind and Wicked Learning Environments"|https://pdfs.semanticscholar.org/5c5d/33b858eaf38f6a14b3f042202f1f44e04326.pdf]], about different kinds of environments (which teach us (or not)), Robin Hogarth (2001) introduced the concept of ''wicked learning environments''^^1^^. He described these as situations in which feedback in the form of out-comes of actions or observations is poor, misleading, or even missing.
In contrast, in ''kind learning environments'', feedback links outcomes directly to the appropriate actions or judgments and is both accurate and plentiful. In determining when people’s intuitions are likely to be accurate, this framework emphasizes the importance of the conditions under which learning has taken place. Kind learning environments are a necessary condition for accurate intuitive judgments, whereas intuitions acquired in wicked environments are likely to be mistaken.
"""
"""
<<comparequote "Peter De Vries" "Looking back, we seem to detect clairvoyance in certain moments of apprehension, but mine were no more than pass like a chill over the heart of any parent watching his treasure asleep in bed or taking off down the road on a bicycle." "mirroring and reflecting feelings">>
----
^^1^^ see [[Jon Kolko]]'s take on [[Wicked Problems|A wicked problem is a social or cultural problem that is difficult or impossible to solve for as many as four reasons: incomplete or contradictory knowledge, the number of people and opinions involved, the large economic burden, and the interconnected nature of these problems with other problems.]]
The broaden-and-build theory describes the form and function of a subset of positive emotions, including joy, interest, contentment and love.
A key proposition is that these positive emotions broaden an individual’s momentary thought–action repertoire: joy sparks the urge to play, interest sparks the urge to explore, contentment sparks the urge to savour and integrate, and love sparks a recurring cycle of each of these urges within safe, close relationships.
The broadened mindsets arising from these positive emotions are contrasted to the narrowed mindsets sparked by many negative emotions (i.e. specific action tendencies, such as attack or flee).
A second key proposition concerns the consequences of these broadened mindsets: by broadening an individual’s momentary thought–action repertoire—whether through play, exploration or similar activities—positive emotions promote discovery of novel and creative actions, ideas and social bonds, which in turn build that individual’s personal resources; ranging from physical and intellectual resources, to social and psychological resources. Importantly, these resources function as reserves that can be drawn on later to improve the odds of successful coping and survival.
The broaden-and-build theory has significant implications on optimizing health and well-being.
: -- from [[her|Barbara Fredrickson]] paper [["The broaden-and-build theory of positive emotions"|https://www.ncbi.nlm.nih.gov/pmc/articles/PMC1693418/pdf/15347528.pdf]]
[evolution]
Expertise is the process of going from unconscious incompetence to conscious incompetence to conscious competence and finally to unconscious competence.
From [[her|Maria Popova]] [[blog post|https://www.brainpickings.org/2016/10/26/explainer-elucidator-enchanter-great-writing/]]:
In a recent conversation with a friend, I found myself struggling to convey the hierarchy of good writing, particularly of good science writing — a hierarchy experienced so concretely in the act of reading but inexpressible as soon as one tries to dismantle the magic of enthralling prose. The difference between good writing and great writing is always palpable and rarely articulable, but the stakes are even higher in science writing, where the standards of truth and beauty are such that the precise and the poetic must converge in order to yield both comprehension and enchantment.
Since my recent diagrammatic taxonomy of platonic relationships had helped me map the multiple levels of friendship, I decided to use a similar visual taxonomy to concretize this intuitive gradation of writing.
<a href="./resources/Explain-Enchant.png" target="new"><img src="./resources/Explain-Enchant.png" width="65%" height="65%" /></a>
''Explainers'' make information clear and comprehensible. Good textbooks are the work of good explainers.
''Elucidators'' go beyond explanation and into illumination — they transmute information into understanding by revealing the interconnectedness of the universe and integrating various bits of knowledge into a larger framework of comprehension. At their best, they embody what pioneering biochemist Erwin Chargaff addressed in his beautiful 1978 meditation on the poetics of curiosity, in which he discussed the crucial difference between explanation and understanding.
''Enchanters'' do all of the above, but go beyond the realm of knowledge and into the realm of wisdom. They don’t work merely toward superior levels of understanding, but toward a wholly different order of meaning — an embodiment of Schopenhauer’s famous distinction between talent and genius, in which he asserted that talent hits a target no one else can hit, whereas genius hits a target no one else can see.
Enchanters bend the beam of illumination through a singular lens that furnishes something richer and greater than the sum total of knowledge — a kaleidoscopic view of previously hidden layers of reality, or an integration of previously fragmented insights and shards of awareness. The result is nothing less than a firmer grasp of one’s place in the universe, producing in turn a transcendent enlargement of being.
The greatest enchanters are creators of distinctive aesthetics — of writing, of storytelling, of thought itself. Among them are writers like [[Oliver Sacks]], James Gleick, [[Diane Ackerman]], [[Alan Lightman]] and [[Janna Levin]], and trailblazing storytellers like Jad Abumrad and [[Robert Krulwich|https://en.wikipedia.org/wiki/Robert_Krulwich]] of Radiolab.
His [[blog|https://www.vox.com/authors/ezra-klein]]
<<list-links "[tag{!!title}]">>
If you make an effort to do the best you can regularly, the results will be about what they should be. Not necessarily what you'd want them to be but they'll be about what they should be; and only you will know whether you did the best you could.
[effort] [fate]
<<list-links "[tag{!!title}]">>
Face the facts^^1^^ of being who you are, for that is what changes who you are.
Or as [[Shunryu Suzuki]] had said:
>You are perfect the way you are, and you can use a little improvement.
----
^^1^^ I think that //''face''// (a verb, signifying action) and //''facts''// (a noun, signifying awareness) are crucial! The saying does not imply non-action or non-responsiveness^^2^^. You will (and should) respond to what is and who you are, but, a Buddhism teaches, do it with equanimity^^2^^.
^^2^^ equanimity and responsiveness are orthogonal – becoming more equanimous does not mean that you must become less responsive, and becoming more responsive does not mean that you must become less equanimous.
: -- from [[a blog entry|http://rationaldharma.com/blog/i-wasted-8-years-of-meditation-because-i-didnt-understand-these-4-things/]] at rationaldharma.com (by Ollie.shinkai AKA Ollie Bray?)
Facts are not just to be accumulated. They are raw material for making improved, more sophisticated questions with new unknowns. Science, good science, creates as much ignorance as it does knowledge.
As James Clerk Maxwell (the greatest physicist between Newton and Einstein, in 1877) had said:
> Thoroughly conscious ignorance is the prelude to every great advance in science.
[...]
Unsettled science is not unsound science. Scientists tend to emphasize disagreements because this is where the work remains to be done. Why talk about what we know, when all our effort should be directed at what we don’t know? The highly accomplished Marie Curie, in a letter to her brother, noted that “one never thinks about what has been done, only what remains to be done.” Problems don’t get solved by sitting around and nodding in agreement. They are solved, indeed they are understood to be problems in the first place, by talking about them.
: -- from [[his|Stuart Firestein]] article titled [["Certainly Not! Good science requires cultivating doubt and finding pleasure in mystery"|https://nautil.us/issue/2/uncertainty/certainly-not]]
Failure is potential without any more time.
And the opposite is true too: Success is potential given just the right amount of time.
Fairy tales are not true. They are more than true. Not because they tell us that dragons exist, but because they tell us that dragons can be defeated.
: -- [[G. K. Chesterton]] (paraphrased by [[Neil Gaiman]] )
Or as [[Stanislaw Lem]] wrote in his book [["The Cyberiad"|https://stanislaw-lem.fandom.com/wiki/The_Cyberiad]]:
> Everyone knows that dragons don’t exist. But while this simplistic formulation may satisfy the layman, it does not suffice for the scientific mind. The brilliant Cerebron, attacking the problem analytically, discovered three distinct kinds of dragon: the mythical, the chimerical, and the purely hypothetical. They were all, one might say, nonexistent, but each non-existed in an entirely different way.
(see also what [[Ursula K. Le Guin]] [[wrote about it|The dragons are avaricious, insatiable, treacherous; without pity, without remorse. But are they evil? Who am I, to judge the acts of dragons? . . . They are wiser than men are. It is with them as with dreams. We men dream dreams, we work magic, we do good, we do evil. The dragons do not dream. They are dreams. They do not work magic: it is their substance, their being. They do not do; they are.]])
>To have faith means to dare, to think the unthinkable, yet to act within the limits of the realistically possible; it is the paradoxical hope to expect the Messiah every day, yet not to lose heart when he has not come at the appointed hour. This hope is not passive and it is not patient; on the contrary, it is impatient and active, looking for every possibility of action within the realm of real possibilities.
: -- [[Erich Fromm]] (covered in [[BrainPickings|https://www.brainpickings.org/2016/04/04/erich-fromm-anatomy-of-human-destructiveness/]])
<<list-links "[tag{!!title}]">>
Faith is a state of openness or trust... the attitude of faith is the very opposite of clinging to belief, of holding on. In other words, a person who is fanatic in matters of religion, and clings to certain ideas about the nature of God and the universe, becomes a person who has no faith at all. Instead they are holding tight. But the attitude of faith is to let go, and become open to truth, whatever it might turn out to be.
The full paragraph:
>Faith is a state of openness or trust.
>
>To have faith is like when you trust yourself to the water. You don’t grab hold of the water when you swim, because if you do you will become stiff and tight in the water, and sink. You have to relax, and the attitude of faith is the very opposite of clinging, and holding on.
>
>In other words, a person who is fanatic in matters of religion, and clings to certain ideas about the nature of God and the universe becomes a person who has no faith at all. Instead they are holding tight. But the attitude of faith is to let go, and become open to truth, whatever it might turn out to be.
Faith is believing what you know ain’t so.
or as [[Soren Kierkegaard]] wrote:
> to have faith is precisely to lose one's mind so as to win God.
* When faith is completely replaced by creed, worship by discipline, love by habit; when the crisis of today is ignored because of the splendor of the past; when faith becomes an heirloom rather than a living fountain; when religion speaks only in the name of authority rather than with the voice of compassion, its message becomes meaningless.
* Modern man continues to ponder: What will I get out of life? What escapes his attention is the fundamental, yet often forgotten question, What will life get out of me?
* We must beware of converting needs into ends, interests into norms. The task is precisely the opposite: it is to convert ends into needs, to convert the divine commandment into a human concern.
"""
1.
Through the night
the apples
outside my window
one by one let go
their branches and
drop to the lawn.
I can’t see, but hear
the stem-snap, the plummet
through leaves, then
the final thump against the ground.
Sometimes two
at once, or one
right after another.
During long moments of silence
I wait
and wonder about the bruised bodies,
the terror of diving through air, and
think I’ll go tomorrow
to find the newly fallen, but they
all look alike lying there
dewsoaked, disappearing before me.
2.
I lie beneath my window listening
to the sound of apples dropping in
the yard, a syncopated code I long to know,
which continues even as I sleep, and dream I know
the meaning of what I hear, each dull
thud of unseen apple-
body, the earth
falling to earth
once and forever, over
and over.
"""
or as [[Brian Christian]] said:
[[I suppose when you get down to it, everything is always once in a lifetime. We might as well act like it.]]
[uniqueness]
About Famous Last Words from [[William Shakespeare]] ([[The Bard of Avon|https://biography.yourdictionary.com/articles/why-is-shakespeare-called-the-bard.html]]) (in //Richard II//):
"""
O, but they say the tongues of dying men
Enforce attention like deep harmony.
Where words are scarce they are seldom spent in vein,
For they breathe truth that breathe their words in pain.
"""
<<list-links "[tag{!!title}]">>
in response to his wife’s question about where he wanted to be buried: “Surprise me.”
He was supposedly asked on his deathbed whether he was ready to meet his maker. He responded quietly:
"One world at a time".
God will pardon me. It's his metier [[skill, calling, craft, job|https://dictionary.cambridge.org/us/dictionary/french-english/metier]].
Dying is the last thing I will ever do.
O. Henry appeared to have stopped breathing, but was he really dead?
'Touch his feet', suggested one of the mourners clustered around his bed; 'Nobody ever died with warm feet'.
Whereupon, the short-story writer raised his head from the pillow, mumbled “Joan of Arc did,” and fell back dead.
(As the bedside lamp flared:) What? The flames already?
Fantasy is an exercise bicycle for the mind. It might not take you anywhere, but it tones up the muscles that can.
Fashion is the science of appearance, and it inspires one with the desire to seem rather than to be.
Fate always wins. Most of the gods throw dice but Fate plays chess, and you don't find out until it's too late that he's been using two queens all along.
[[Terry Pratchett on Chance and Gods|http://www.chrisjoneswriting.com/terry-pratchett-quotes/category/chance]]
<<comparequote "Wislawa Szymborska" "My apologies to chance for calling it necessity. My apologies to necessity if I'm mistaken, after all." "fate and chance">>
<<list-links "[tag{!!title}]">>
Fear is courage in the making; Worry is wisdom in the making.
compare with [[Robert Brault]]:
The tricky thing about cowardice is that it loves to pose as the common sense thing to do.
<<list-links "[tag{!!title}]">>
Catholic scholar
<<list-links "[tag{!!title}]">>
AKA Ricardo Reis.
Mentioned as a strong influence by [[Jose Saramago]] in his [[Nobel Prize lecture|https://www.nobelprize.org/prizes/literature/1998/saramago/lecture/]].
<<list-links "[tag{!!title}]">>
Few are those who see with their own eyes and feel with their own hearts.
Find more pleasure in intelligent dissent than in passive agreement, for, if you value intelligence as you should, the former implies a deeper agreement than the latter.
First forget inspiration. Habit is more dependable. Habit will sustain you whether you're inspired or not. Habit will help you finish and polish your stories. Inspiration won't. Habit is persistence in practice.
----
Compare to [[Wislawa Szymborska]]'s advice for writers:
> [[Let’s take the wings off and try writing on foot, shall we?]]
[trait] [writing advice]
First my fear, then my curtsy, last my speech. My fear is, your displeasure; my curtsy, my duty; and my speech, to beg your pardons.
: -- from [[his|William Shakespeare]] the [["Epilogue to Henry IV"|https://www.litcharts.com/shakescleare/shakespeare-translations/henry-iv-part-2/epilogue]]
[apology] [drama]
"""
AT the punch-bowl's brink,
Let the thirsty think
What they say in Japan:
"First the man takes a drink,
Then the drink takes a drink,
Then the drink takes the man!"
"""
: -- from [[his|Edward Rowland Sill]] poem [[At Dawn|https://allpoetry.com/poem/8543553-At-Dawn-by-Edward-Rowland-Sill]]
(compare to what [[William Gibson]] had to say about [[addictions|Addictions ... started out like magical pets, pocket monsters. They did extraordinary tricks, showed you things you hadn't seen, were fun. But came, through some gradual dire alchemy, to make decisions for you. Eventually, they were making your most crucial life-decisions. And they were ... less intelligent than goldfish.]])
First Thoughts are the everyday thoughts. Everyone has those.
Second Thoughts are the thoughts you think about the way you think. People who enjoy thinking have those.
Third Thoughts are thoughts that watch the world and think all by themselves. They’re rare, and often troublesome.
Listening to them is part of witchcraft.
― from [[his|Terry Pratchett]] book [[A Hat Full of Sky|http://discworld.wikia.com/wiki/A_Hat_Full_of_Sky]] (about the journey of a young witch ([[Tiffany Aching|http://discworld.wikia.com/wiki/Tiffany_Aching]]) ) (in the author's notes)
"""
"""
Compare to [[Wes Nisker's take on thinking thoughts|As someone who has personally struggled with “twice knowing,” I think maybe we’d all be better off if we let the designation “sapiens sapiens” just mean that we have to learn something at least twice before we know it.]]
Focusing on your strengths is required for peak performance, but improving your weaknesses has the potential for the greatest gains. This is true for athletes, executives, and entire companies. Leaving your comfort zone involves risk, however, and when you are already doing well the temptation to stick with the status quo can be overwhelming, leading to stagnation.”
: -- From his book //Deep Thinking//.
[career advice] [work] [self improvement]
Career Advice: Follow your blisters.
(instead of “Follow your bliss!” or “Follow your passion!”)
A blister appears when something wears at you – and even chafes you a bit – but you keep getting drawn back to it. What I like about the phrase is that it implies something about perseverance and struggling through tasks even though they are not always blissful. “Follow your blisters” makes me ask myself the question, “What kind of work do I find myself coming back to again and again, even when I don’t succeed right away, when it seems like it’s taking too long to make progress, or when I get discouraged?”
It may not be the thing you love to do the most, and it may not be the most fun all the time, but ask yourself: Is there something I have to work hard at to get right, something that I want to get right because I care enough about it, no matter how much time and practice is takes? Is there something that gets me up a little early, or keeps me working late, after others have gone to sleep? Not because the project is due the next day, but because it’s important to me to make a little more progress? Not every day and night, but reliably?
What activities do you never need to put on your “To Do” list?
The things that always seem to get done often reveal insight into what will fulfill you in your career — they are the things we never need to be asked twice to do, and ultimately, they are more satisfying than the things we may love to do largely because they come natural and easy to us.
: -- from an article titled [["What You Should Follow Instead of Your Passion"|https://hbr.org/2020/11/what-you-should-follow-instead-of-your-passion]]
Following straight lines shortens distances, and also life.
For a very good reason, we humans were given two ears but only one mouth.
-- Rick Justice was the top salesperson at Cisco Systems when I worked there in the 2000's (is this an [[Epictetus]] quote?)
compare to [[Our heads are round so our thoughts can change direction.]]
Also compare to [[Listening is much more invigorating than giving voice to all the thoughts and prejudices that anyway keep me company twenty-four hours a day.]]
And Richard Farson wrote in his book "//Management of the Absurd//":
> When we really listen, so that we understand the other person's perspective, we risk being changed ourselves.
For according to the trollish philosopher Plateau, ‘if you want to understan’ an enemy, you gotta walk a mile in his shoes. Den, if he’s still you enemy, at least you’re a mile away and he’s got no shoes.’
: -- in //A Blink of a Screen//
If we are wise, we draw [our limitations] in until their limits can be seen; we confine them to the possible. And so, the coming closer can be good, if by means of that closeness—that limiting of expectations—we begin to see those vistas more clearly, more realistically, and as more finite than ever before. For aging can be the gift that establishes the boundaries of our lives, which previously knew far fewer confines and brooked far fewer restrictions. Everything within those boundaries becomes thus more precious than it was before: love, learning, family, work, health, and even the lessened time itself. We cherish them more, as the urgency increases to use them well.
Many are the uses of the newly recognized limits. Among their advantages is that our welcoming acceptance of them adds to the value, adds to our appreciation, adds to our ability to savor—adds to every pleasure that falls within them. The good is easier now to see; it is closer to the touch and the taking, if we are only willing to look truthfully at it there and gather it up from amid the cares that may surround it. There is much to savor during this time, magnified and given more meaning and intensity by the very finitude within which it is granted to us.
: -- from an NPR interview titled //What Are the Secrets to Aging Well?//
and Excerpted from //The Art of Aging: A Doctor's Prescription for Well-Being//.
For aging is an art. The years between its first intimations and the time of the ultimate letting go of all earthly things can—if the readiness and resolve are there—be the real harvest of our lives.
: -- from an NPR interview titled //What Are the Secrets to Aging Well?//
and Excerpted from //The Art of Aging: A Doctor's Prescription for Well-Being//.
A professor, asked what he meant by the phrase "for all practical purposes" explained:
"Suppose all the young men in this class were to line up on one side of the room, and all the young ladies on the other. At a given signal, the two lines move toward each other, halving the distance between them. At a second signal, they move forward again, halving the remaining distance; and so on at each succeeding signal. Theoretically, the boys would never reach the girls; but actually, after a relatively small number of moves, they would be close enough for all practical purposes."
: -- from his book "Through the Mathescope" (1956)
:: -- Excerpt From: "Fantasia Mathematica" by Clifton Fadiman (ed).
"""
As readers, we remain in the nursery stage so long as we cannot distinguish between taste and judgment, so long, that is, as the only possible verdicts we can pass on a book are two: this I like; this I don't like.
For an adult reader, the possible verdicts are five:
I can see this is good and I like it;
I can see this is good but I don't like it;
I can see this is good and, though at present I don't like it, I believe that with perseverance I shall come to like it;
I can see that this is trash but I like it;
I can see that this is trash and I don't like it.
"""
[[Gottfried Wilhelm Leibniz]] imagined taking up a quill pen and splattering a piece of paper with ink spots. These spots make up a finite set of points on the plane. What does it mean to say that they obey a law? Perhaps a mathematical equation goes through the points. But for any finite set of points, Leibniz observed, you can always find a mathematical equation going through them. Lagrangian interpolation is an obvious technique. The existence of an equation going through a set of points does not distinguish random points from points that follow a law.
What does?
For Leibniz, a law must be expressed by a simple equation. An equation that is forte composée [as opposed to simplicité] is meaningless. There is always one loitering about.
[...]
Leibniz saw that a theory the same size as the data is useless in the sense that it is not possible to cover a debt of ten dollars with another debt of ten dollars. Explanation is a form of compression. If a theory is smaller than the data, then in that case, as in so many others, less is more. A successful explanation is a matter of covering a large debt with a much smaller one.
If less is more, smaller is better.
The best theory is the smallest program that generates the data.
: -- from an article titled [["Doing Mathematics Differently"|https://inference-review.com/article/doing-mathematics-differently]]
For every action, there is an equal and opposite criticism.
For human words are like shadows, and shadows are incapable of explaining light^^*^^.
[[Jose Saramago]] also said:
> Words that come from the heart are never spoken, they get caught in the throat and can only be read in one's eyes.
----
^^*^^ life?
[poor descriptive power] [inadequacy of language]
For in the dew of little things the heart finds its morning and is refreshed.
:: -- from his poem [[On Friendship|http://www.katsandogz.com/gibran/onfriendship.php]].
This reminds me of "Green Behind the Ears - poem by Kay Ryan":
{{Green Behind the Ears - poem by Kay Ryan}}
"""
For life and death are one, even as the river and the sea are one.^^1^^
[...]
For what is it to die but to stand naked in the wind and to melt into the sun?
And what is it to cease breathing, but to free the breath from its restless tides, that it may rise and expand and seek God unencumbered?
[...]
And when you have reached the mountain top, then you shall begin to climb.
And when the earth shall claim your limbs, then shall you truly dance.
"""
:: -- from his poem [[On Death|http://www.katsandogz.com/gibran/ondeath.php]]
Or as [[he|Kahlil Gibran]] also writes in his poem [["The Coming of the Ship"|https://poets.org/poem/coming-ship-0]]:
"""
And you, vast sea, sleepless mother,
Who alone are peace and freedom to the river and the stream,
Only another winding will this stream make, only another murmur in this glade,
And then shall I come to you, a boundless drop to a boundless ocean.
"""
----
^^1^^ or a different perspective on life and death:
> The reason death sticks so closely to life isn't biological necessity — it's envy. Life is so beautiful that death has fallen in love with it, a jealous, possessive love that grabs at what it can. But life leaps over oblivion lightly, losing only a thing or two of no importance, and gloom is but the passing shadow of a cloud.
:: ― [[Yann Martel]], in the book //"Life of Pi"//
כִּי-בַהֶבֶל בָּא, וּבַחֹשֶׁךְ יֵלֵךְ; וּבַחֹשֶׁךְ, שְׁמוֹ יְכֻסֶּה.
For man cometh in vanity, and departeth in darkness, and his name is covered with darkness.
:: -- Ecclesiastes Chapter 6 קֹהֶלֶת; 4
[ [[Koheleth|https://www.mechon-mamre.org/p/pt/pt3106.htm]], the son of King David]
Compare to what [[Koheleth/Ecclesiastes had said|vanity of vanities says Ecclesiastes, all is vanity.]]
and [[also (from Ecclesiastes)|Ah! Vanitas Vanitatum! Which of us is happy in this world? Which of us has his desire? or, having it, is satisfied? Come, children, let us shut up the box and the puppets, for our play is played out.]]
For many this life is a vale of tears; for no one is it free of pain. But we are so designed that we can cope with it if we can live in some context of meaning. Given that powerful help, we can draw on the deep springs of the human spirit, to see our suffering in the framework of all human suffering, to accept the gifts of life with thanks and endure life's indignities with dignity.
: -- from [[his|John W. Gardner]] speech about [[Personal Renewal|http://www.pbs.org/johngardner/sections/writings_speech_1.html]]
One can say, “Death, where is thy sting?”
Far from being a difficult discovery (finding that part of your own present awareness that never enters the stream of time in the first place and thus is truly Unborn and Undying), it is the simplest you will ever make. So simple, in fact, that it might take many years (as the meditation texts put it, “Too simple to believe, too easy to accomplish”). Even right now, you have access to this pure Self, this crystal clear Witness, this great Unborn consciousness.
For notice: the clouds float by in the sky, and you effortlessly witness that. Feelings float by in the body, and you effortlessly witness that. Thoughts float by in the mind, and you effortlessly witness them. Time floats by in your awareness, and you effortlessly witness that.
You can witness all of those things — clouds, feelings, thoughts, and time — because in your essence you are free of all of them: your pure Self is that empty, free, clear, open awareness in which the clouds, and feelings, and thoughts, and time all float by.
This pure Witness does not itself enter the stream of time, but rather is effortlessly aware of it. The pure Witness, in other words, is itself timeless. To abide as that Self is to abide in timeless eternity. When conventional death then arrives, it, too, is a simple experience like any other, and it leaves your Self untouched.
(and therefore: “Death, where is thy sting?”)
: -- from [[his|Ken Wilber]] [[article about Grace and Grit|https://www.earthandspiritcenter.org/wp-content/uploads/2019/10/Session-9-1-Grace-and-Grit.pdf]]
For philology is that venerable art which demands of its votaries one thing above all: to go aside, to take time, to become still, to become slow—it is a goldsmith’s art and connoisseurship of the word which has nothing but delicate, cautious work to do and achieves nothing if it does not achieve it lento. But for precisely this reason it is more necessary than ever today, by precisely this means does it entice and enchant us the most, in the midst of an age of “work,” that is to say, of hurry, of indecent and perspiring haste, which wants to “get everything done” at once, including every old or new book: this art does not so easily get anything done, it teaches to read well, that is to say, to read slowly, deeply, looking cautiously before and aft, with reservations, with doors left open, with delicate eyes and fingers.
:: from //The Dawn: Thoughts on the Prejudices of Morality//
On slow reading, careful reading
on which [[Soren Kierkegaard]] relatedly observed:
> Many of us pursue pleasure with such breathless haste that we hurry past it.
… for religion to function properly…it shouldn’t require belief. After all, religion is fundamentally about direct Knowledge of Truth.
Unfortunately, in practice, religion makes wide use of belief – beliefs about how we got here, what our purpose is, where we are going, and so forth…
Religion short-circuits the religious experience by putting it into concepts.
: -- from his book "Buddhism is not what you think"
For the believer, an invisible God is by no means a nonexistent one.
[[Joy Williams]] retells a parable by the impeccably named John Wisdom:
> Two travelers return to a once neglected garden and find it miraculously restored to life. One of the travelers suggests that this is proof that a gardener has been tending the patch. The other disagrees, and they decide to set up watch. No one appears, which prompts the believer to suggest that an invisible gardener must be doing the work. Various monitors—bloodhounds, motion detectors, night-vision cameras—are put in place, but none register the appearance of the ghostly gardener. Finally, the skeptic asks the believer what meaningful difference there can be between a gardener who cannot be detected and a gardener who does not exist.
''For The Road To Santiago''
"""
For the road to Santiago,
don’t make new declarations
about what to bring
and what to leave behind.
Bring what you have.
You were always going
that way anyway,
you were always
going there all along.
"""
[travel] [pilgrimage] [journey]
For the simplicity on this side of complexity, I wouldn't give you a fig. But for the simplicity on the other side of complexity, for that I would give you anything I have.
<a href="./resources/simplicity and understanding.png" target="new"><img src="./resources/simplicity and understanding.png" width="55%" height="55%" /></a>
Graph explanation from [[Sven Schnieders]]' post [["The Death of Intellectual Curiosity"|https://unfashionable.substack.com/p/the-death-of-intellectual-curiosity]]:
For any new subject, you start on the left with low complexity and low understanding. This means you have a lot of wrong assumptions and do not know how all the pieces fit together; you might think you know, but you are most likely wrong. As your understanding grows, the complexity increases as well. You learn that many of the assumptions you had were wrong or overly simplistic and that there is a lot more complexity to the interactions of all different variables than you taught. But after you understand more, things get simpler again. Everything “makes sense” and you know which factors matter so you can now focus on these few variables when analyzing the subject. Depending on the understanding you started with, the mental model “on the other side” is also simpler.
(see the [[connection to education at school|The reason most people never experience this simplicity (on the other side of the complexity curve) is that they confuse learning and understanding with what is happening in School and University; topics are taught in a way that only ever increases the complexity of mental models and just a small minority of people experience this other side of complexity.]]).
Or as [[James Clear]] had [[posted in "3-2-1: On simplicity"|https://jamesclear.com/3-2-1/november-12-2020]]:
>Beginner = ignorant simplicity
>Intermediate = functional complexity
>Advanced = profound simplicity
[[He|James Clear]] also wrote:
> To simplify before you understand the details is ignorance.
> To simplify after you understand the details is genius.
This direction of simplexity (from complex to simple) has an opposite direction as expressed by [[Kai Krause]] in [[So Much From So Little? Now That Explains A Lot!]].
For the sole true end of education is simply this: to teach men how to learn for themselves;
and whatever instruction fails to do this is effort spent in vain.
For though consciences are as unlike as foreheads, every intelligence, not including the Scriptural devils who "believe and tremble" has one.
: ― from his book //Billy Budd, Sailor//
''For we are mistaken when we look forward to death; the major portion of death has already passed. Whatever years lie behind us are in death’s hands.''
Therefore… hold every hour in your grasp. Lay hold of to-day’s task, and you will not need to depend so much upon to-morrow’s. While we are postponing, life speeds by.
''Nothing… is ours, except time. ''
We were entrusted by nature with the ownership of this single thing, so fleeting and slippery that anyone who will can oust us from possession. What fools these mortals be! They allow the cheapest and most useless things, which can easily be replaced, to be charged in the reckoning, after they have acquired them; but they never regard themselves as in debt when they have received some of that precious commodity, — time!
''And yet time is the one loan which even a grateful recipient cannot repay.''
Forever is composed of 'nows'.
Forever’s a very long time, especially the bit towards the end.
"""
Forget the suffering
You caused others.
Forget the suffering
Others caused you.
The waters run and run,
Springs sparkle and are done,
You walk the earth you are forgetting.
Sometimes you hear a distant refrain.
What does it mean, you ask, who is singing?
A childlike sun grows warm.
A grandson and a great-grandson are born.
You are led by the hand once again.
The names of the rivers remain with you.
How endless those rivers seem!
Your fields lie fallow,
The city towers are not as they were.
You stand at the threshold mute.
"""
''Forgetfulness''
"""
The name of the author is the first to go
followed obediently by the title, the plot,
the heartbreaking conclusion, the entire novel
which suddenly becomes one you have never read,
never even heard of,
as if, one by one, the memories you used to harbor
decided to retire to the southern hemisphere of the brain,
to a little fishing village where there are no phones.
Long ago you kissed the names of the nine Muses goodbye
and watched the quadratic equation pack its bag,
and even now as you memorize the order of the planets,
something else is slipping away, a state flower perhaps,
the address of an uncle, the capital of Paraguay.
Whatever it is you are struggling to remember,
it is not poised on the tip of your tongue,
not even lurking in some obscure corner of your spleen.
It has floated away down a dark mythological river
whose name begins with an L as far as you can recall,
well on your own way to oblivion where you will join those
who have even forgotten how to swim and how to ride a bicycle.
No wonder you rise in the middle of the night
to look up the date of a famous battle in a book on war.
No wonder the moon in the window seems to have drifted
out of a love poem that you used to know by heart.
"""
Forgiveness does not change the past, but it does enlarge the future.
Forgiveness is not the process of hoping for a better future.
Forgiveness is giving up all hope of having had a better past.
It is a process of accepting that although the past did not turn out as well as we wanted it to, it is unchangeable, and thus all we can do is move on.
Forgiveness is a moment of realization.
One in which you understand that holding on to hopes of better Pasts leaves you with no room to hold on to better Futures and Nows.
Forgiving is forgetting, in spite of remembering.
This is similar to my email signature on my mobile phone:
> Sent from (said by?) my 'smartphone' (?): to err is human, but to forgive is human, too :)
"""
""" I think that [[Rabbi Nachman of Breslov]] also referred to an "active way of forgetting" when he said:
> It is customary to consider forgetfulness a disadvantage. I believe it is an advantage. __Knowing to forget__, means loosening the troubles of the past.
(compare to [[Brian Tracy]]'s attitude of [[Always give without remembering and always receive without forgetting.]]).
Formalism First = Rigor Mortis. Intuition First = Rigor's Mortise.
From [[Maria Popova]]'s [[Psychedelic Dinosaurs, Four-Dimensional Hummingbirds, and How We Got Our Vision: Color, Consciousness, and the Dazzling Universe of Tetrachromacy|https://www.themarginalian.org/2022/08/10/ed-yong-an-immense-world-color/]], and excerpts from [[Ed Yong]]'s book //"An Immense World: How Animal Senses Reveal the Hidden Realms Around Us"//:
Seeing more colors isn’t advantageous in and of itself. Colors are not inherently magical. They become magical when and if animals derive meaning from them. Some are special to us because, having inherited the ability to see them from our trichromatic^^1^^ ancestors, we imbued them with social significance. Conversely, there are colors that don’t matter to us at all. There are colors we cannot even see.
[...]
Humans are trichromats (they have 3 cones with opsins^^1^^). The truly mind-bending part — quite literally, for it flexes our cognitive capacity for imagination beyond the hard-wired perceptual limits of our consciousness — is when we raise color vision by another order of magnitude, to tetrachromacy: the addition of a whole other cone with a whole other opsin. Just as in the leap from dichromacy to trichromacy, a trichromat sees only 1% of the colors available to a tetrachromat^^2^^.
For a trichromat to imagine tetrachromacy is as challenging as for a two-dimensional creature to imagine a three-dimensional world — we inhabit a chromatic Flatland, in which the vision of a hummingbird remains to us as enticing and elusive an abstraction as a Klein bottle.
Tetrachromacy doesn’t just widen the visible spectrum at its margins. It unlocks an entirely new dimension of colors.
[…]
Picture trichromatic human vision as a triangle, with the three corners representing our red, green, and blue cones. Every color we can see is a mix of those three, and can be plotted as a point within that triangular space. By comparison, a bird’s color vision is a pyramid, with four corners representing each of its four cones. Our entire color space is just one face of that pyramid, whose spacious interior represents colors inaccessible to most of us.
(see (ha, ha :) also [[Perhaps there are thoughts we cannot think]]).
----
^^1^^ In the cones, the photosensitive pigment is opsin, a transmembrane protein that is very similar to rhodopsin. Opsin comes in three different varieties, distinguished by differences in their amino acid sequences that result in differences in their light-absorption curves, with peaks in the blue, green, and red portions of the visible light spectrum, respectively. (from [[PHOTORECEPTORS|https://thebrain.mcgill.ca/flash/a/a_02/a_02_m/a_02_m_vis/a_02_m_vis.html]]).
^^2^^ see [[Tetrachromacy (‘Super Vision’)|https://www.healthline.com/health/tetrachromacy]]
Beneath complexity, hedgehogs tend to see simple, deterministic rules of cause and effect framed by their area of expertise, like repeating patterns on a chessboard.
Foxes see complexity in what others mistake for simple cause and effect. They understand that most cause-and-effect relationships are probabilistic, not deterministic.
There are unknowns and luck, and even when history apparently repeats, it does not do so precisely.
They recognize that they are operating in the very definition of a [["wicked learning environment"|https://pdfs.semanticscholar.org/5c5d/33b858eaf38f6a14b3f042202f1f44e04326.pdf]]^^1^^, where it can be very hard to learn, from either wins or losses.
In wicked domains that lack automatic feedback, experience alone does not improve performance. Effective habits of mind are more important, and they can be developed.
: -- from his book "Range - Why generalists triumph in a specialized world"
----
^^1^^ as opposed to a "kind learning environment" (per that same article [["The Two Settings of Kind and Wicked Learning Environments"|https://pdfs.semanticscholar.org/5c5d/33b858eaf38f6a14b3f042202f1f44e04326.pdf]]^^2^^ by Robin M. Hogarth, et al.)
^^2^^ see also [[Jon Kolko]]'s take on [[Wicked Problems|A wicked problem is a social or cultural problem that is difficult or impossible to solve for as many as four reasons: incomplete or contradictory knowledge, the number of people and opinions involved, the large economic burden, and the interconnected nature of these problems with other problems.]]
<<list-links "[tag{!!title}]">>
American educator, temperance reformer, and women's suffragist.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
painter.
<<list-links "[tag{!!title}]">>
rock and mountain climber
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
When he did descend from his accustomed stony heights, he still lived without effort in a rarer atmosphere than most economists care to breathe, and handled the technical apparatus of our science with the easy grace of someone accustomed to something far more difficult. But he has left behind him in print only two witnesses to his power - his papers published in The Economic Journal on 'A contribution to the Theory of Taxation' in March, 1927, and on 'A Mathematical Theory of Saving' in December, 1928. The latter of these is, I think, one of the most remarkable contributions to mathematical economics ever made, both in respect of the intrinsic importance and difficulty of its subject, the power and elegance of the technical methods employed, and the clear purity of the illumination with which the writer's mind is felt by the reader to play about its subject. The article is terribly difficult reading for an economist, but it is not difficult to appreciate how scientific and aesthetic qualities are combined in it together.
[...]
The loss of Ramsey is... to his friends, for whom his personal qualities joined most harmoniously with his intellectual powers, one which it will take them long to forget. His bulky Johnsonian frame, his spontaneous gurgling laugh, the simplicity of his feelings and reactions... his honesty of mind and heart, his modesty, and the amazing, easy efficiency of the intellectual machine which ground away behind his wide temples and broad smiling face, have been taken from us at the height of their excellence and before their harvest of work and life could be gathered in.
: -- John Maynard Keynes, The Economic Journal (March, 1930) 40.
<<list-links "[tag{!!title}]">>
American theoretical physicist, mathematician and a Nobel laureate (2004).
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Frederick P. Brooks (a "[[CS Sage|https://en.wikipedia.org/wiki/List_of_computer_scientists]]").
[[Interview in Weird Magazine|https://www.wired.com/2010/07/ff_fred_brooks/]]
Author of [[The Mythical Man-Month book|http://www.cs.cmu.edu/~15712/papers/mythicalmanmonth00fred.pdf]]
<<list-links "[tag{!!title}]">>
Fred ~McFeely Rogers was an American educator, Presbyterian minister, songwriter, author, and television host.
Born: March 20, 1928
Died: February 27, 2003
AKA Mister Rogers (Mr. Rogers)
<<list-links "[tag{!!title}]">>
Better known as Fritz Perls, was a noted German-born psychiatrist and psychotherapist.
Considered the father of the Gestalt Therapy.
<<list-links "[tag{!!title}]">>
Free human dialogue, wandering wherever the agility of the mind allows, lies at the heart of
education. If teachers do not have the time, the incentive, or the wit to provide that; if students are too demoralized, bored or distracted to muster the attention their teachers need of them, then that is the educational problem which has to be solved—and solved from inside the experience of the teachers and the students.
That problem is metaphysical in nature, not technical.
: ― from [[his|Neil Postman]] book "//The End of Education: Redefining the Value of School//"
From his book [[The Truth|https://discworld.fandom.com/wiki/The_Truth]] (about the invention/discovery/evolution of journalism in [[Discworld|https://discworld.fandom.com/wiki/Discworld]])
: -- [[Lord Vetinari|https://discworld.fandom.com/wiki/Havelock_Vetinari]], the Patrician/Ruler of Ankh-Morpork
:-- [[William de Worde|https://discworld.fandom.com/wiki/William_de_Worde]] the journalist/inventor/discoverer of //The Ankh-Morpork Times//
"""
The Patrician [who dropped in for an unannounced/informal visit of The Times facilities] walked across the floor, followed by Drumknott [his secretary].
“Er, yes,” said William. “Are you all right, sir?”
“Oh, yes. Busy, of course. Such a lot of reading to catch up on. But I thought I should take a moment to come and see this ‘free press’ [[Commander Vimes|https://discworld.fandom.com/wiki/Samuel_Vimes]] has told me about at considerable length.”
He tapped one of the iron pillars of the press with his cane. “However, it appears to be
firmly bolted down.”
“Er, no, sir. I mean ‘free’ in the sense of what is printed, sir,” said William.
“But surely you charge money?”
“Yes, but—”
“Oh, I see. You meant you should be free to print what you like?”
There was no escape. “Well…broadly, yes, sir.”
“Because that’s in the—what was the other interesting term? Ah, yes…the public interest?” Lord Vetinari picked up a piece of type and inspected it carefully.
“I think so, sir.”
“These stories about man-eating goldfish and people’s husbands disappearing in big silver dishes?”
“No, sir. That’s what people are interested in. We do the other stuff, sir.”
“Amusingly shaped vegetables?”
“Well, a bit of that, sir. [[Sacharissa|https://discworld.fandom.com/wiki/Sacharissa_Cripslock]] calls them human interest stories.”
“About vegetables and animals?”
“Yes, sir. But at least they’re real vegetables and animals.”
“So…we have what the people are interested in, and human interest stories, which is what humans are interested in, and the public interest, which no one is interested in.”
“Except the public, sir,” said William, trying to keep up.
“Which isn’t the same as people and humans?”
“I think it’s more complicated than that, sir.”
“Obviously. Do you mean that the public is a different thing from the people you just see walking about the place? The public thinks big, sensible measured thoughts while people run around doing silly things?”
“I think so. I may have to work on that idea too, I admit.”
“Hmm. Interesting. I have certainly noticed that groups of clever and intelligent people are capable of really stupid ideas,” said Lord Vetinari. He gave William a look which said, “I can read your mind, even the small print,” and then gazed around the pressroom again. “Well, I can see you have an eventful future ahead of you, and I would not wish to make it any more difficult than it is clearly going to be. I notice you have work going on…?”
“We’re putting a semaphore post up,” said Sacharissa proudly. “We’ll be able to get a clacks straight from the big trunk tower. And we’re opening offices in Sto Lat and Pseudopolis!”
Lord Vetinari raised his eyebrows. “My word,” he said. “Many new deformed vegetables will become available. I shall look forward with interest to seeing them.”
William decided not to rise to this one.
“It amazes me how the news you have so neatly fits the space available,” Lord Vetinari went on, staring down at the page [[Boddony|https://discworld.fandom.com/wiki/Boddony]] [a printing-press working dwarf] was working on. “No little gaps anywhere. And every day something happens that is important enough to be at the top of the first page, too. How strange—oh, ‘receive’ takes an E after the C…”
Boddony looked up. Lord Vetinari’s cane swung around with a hiss and hovered in the middle of a densely packed column. The dwarf looked closer, and nodded, and took out a small tool.
It’s upside down to him, and back to front, thought William. And the word’s in the middle of the text. And he spotted it.
“Things that are back to front are often easier to comprehend if they are upside down as well,” said Lord Vetinari, tapping his chin with the silver knob of his cane in an absent-minded way. “In life as in politics.”
"""
Free will cannot be easily dismissed, because we experience it directly. We make choices. No philosopher has yet sat down in a restaurant and told the waiter, “Just bring me whatever the universe has preordained.”
Then again, [[Albert Einstein]] said that he could “will” himself to light his pipe without feeling particularly free. He liked to quote [[Arthur Schopenhauer]]: … Man can do what he will, but he cannot will what he wills.
[...]
Everywhere we look, people are pressing elevator buttons, turning doorknobs, hailing taxicabs, lifting sustenance to their lips, and begging their lovers’ favor. We act as though the future is, if not in our control, not yet settled… We would suffer illusions of free will, because, by happenstance, we tend to know less about the future than about the past.
<<list-links "[tag{!!title}]">>
"""
Freedom means
you're free to do
just whatever
pleases you;
— if, of course
that is to say,
what you please
is what you may.
"""
Or as anonymously and aptly stated:
> “Your right to throw a punch ends at the tip of my nose.” [swing arm fist]
Or as [[John Wooden]] had said:
> Consider the rights of others before your own feelings, and the feelings of others before your own rights.
(compare to [[what Douglas Adams had to say about freedom|The American idea of freedom has more to do with my freedom to do what I want than your freedom to do what you want.]])
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
I had heard it said the other way around: if you are not a communist when you are young, then you don't have a heart; if you are not a capitalist when you are old, then you don't have a brain.
or a similar version: If a man is not liberal in youth he has no heart. If he is not conservative when older he has no brain.^^1^^
But from my experience (personal and also watching my children), it's the opposite, if life takes its natural course: when you are younger, you feel invincible and you want to assert yourself -- you are trying to think (only) logically/rationally, and you are looking for Freedom, Pleasure, Power, etc. - you are a "capitalist". And when you grow older, you know that relationships, compassion, forgiveness, and so on are more important, and that some people are more capable and/or fortunate than others, and if you have a heart, you tend to be more socially aware (not necessarily communist :)
Often, when we grow older, we lose some of our intellectual capabilities (we "lose our mind/brain"), which is deplorable/sad. But if we also lose our heart at an old age, that's even sadder.
I think that this is echoed by what [[Wilson Mizner]] has observed:
>Most hard-boiled people are half-baked.
"""
"""
But/And compare to [[Winston Churchill]]'s:
> The inherent vice of capitalism is the unequal sharing of blessings; the inherent virtue of socialism is the equal sharing of miseries.
"""
"""
(compare to [[Abraham Joshua Heschel]]'s: [[When I was young, I admired clever people. Now that I’m old, I admire kind people.]])
(also compare to what [[Jaron Lanier]] said [[about empathy, cruelty, and morality|You have to draw a Circle of Empathy around yourself and others in order to be moral. If you include too much in the circle, you become incompetent, while if you include too little you become cruel. This is the "Normal form" of the eternal liberal/conservative dichotomy.]]).
"""
"""
----
^^1^^ - or in a similar vein (by [[Mark Twain]]):
> The man who is a pessimist before forty-eight knows too much; if he is an optimist after it he knows too little.
and [[he|Mark Twain]] also said:
> Are you so unobservant that you do not yet realize that sanity and happiness are an impossible combination?
may also be said about: [communist] [communism] [capitalist] [capitalism]
From the top of the hill there is no hill.
From ''Chief Justice John Roberts’ Commencement Speech'':
Now the commencement speakers will typically also wish you good luck and extend good wishes to you. I will not do that, and I’ll tell you why.
From time to time in the years to come, I hope you will be treated unfairly, so that you will come to know the value of justice.
I hope that you will suffer betrayal because that will teach you the importance of loyalty.
Sorry to say, but I hope you will be lonely from time to time so that you don’t take friends for granted.
I wish you bad luck, again, from time to time so that you will be conscious of the role of chance in life and understand that your success is not completely deserved and that the failure of others is not completely deserved either.
And when you lose, as you will from time to time, I hope every now and then, your opponent will gloat over your failure. It is a way for you to understand the importance of sportsmanship.
I hope you’ll be ignored so you know the importance of listening to others, and I hope you will have just enough pain to learn compassion.
Whether I wish these things or not, they’re going to happen. And whether you benefit from them or not will depend upon your ability to see the message in your misfortunes.
A young meditator asks an older meditator sitting next to him: you have been practicing meditation for so many years. How come you can't sit in the full lotus position ?
To which the old meditator answers: I've been focusing on levitation.
Wow! Can you do that? Asks the youngster.
No, but don't you agree that it's a higher goal?
When I teach programming to high schoolers, I ask them (at the right moment, and to see if they internalized the importance and usefulness of functions :) :
''Question:'' Why are functions^^1^^ your friends?
(and I expect students to mention advantages like "reusability", "readability", "maintainability", and so on).
But sometimes I get a student to answer:
''Answer:'' Because they are friendly! :)
So, then I say: if that's your answer, I have another (similar and SAT-like analogy) question for you:
''Question:'' Why are you going to like lists^^2^^?
''Answer:'' because they are likable. :)
----
^^1^^ Functions (from [[University of Utah|https://www.cs.utah.edu/~germain/PPS/Topics/functions.html]]) - Functions are "self contained" modules of code that accomplish a specific task. Functions usually "take in" data, process it, and "return" a result. Once a function is written, it can be used over and over and over again. Functions can be "called" from the inside of other functions.
^^2^^ Lists - (from [[Wikipedia|https://en.wikipedia.org/wiki/List_(abstract_data_type)]]) - In computer science, a list or sequence is an abstract data type that represents a countable number of ordered values, where the same value may occur more than once. An instance of a list is a computer representation of the mathematical concept of a tuple or finite sequence; the (potentially) infinite analog of a list is a stream. Lists are a basic example of containers, as they contain other values. If the same value occurs multiple times, each occurrence is considered a distinct item.
The fundamental attribution error explained (by the fan-fiction-created Harry Potter):
Suppose you come into work and see your colleague kicking his desk. You think, 'what an angry person he must be'. Your colleague is thinking about how someone bumped him into a wall on the way to work and then shouted at him. Anyone would be angry at that, he thinks.
When we look at others we see personality traits that explain their behaviour, but when we look at ourselves we see circumstances that explain our behaviour.
People's stories make internal sense to them, from the inside, but we don't see people's histories trailing behind them in the air. We only see them in one situation, and we don't see what they would be like in a different situation. So the fundamental attribution error is that we explain by permanent, enduring traits what would be better explained by circumstance and context.
: -- from [[chapter 5|https://www.lesswrong.com/s/PtgH6ALi5CoJnPmGS/p/4HZJPGf2GzC6BSHa6]] of his fan-fiction eBook titled [[HJPEV and the Methods of Rationality|https://www.lesswrong.com/s/PtgH6ALi5CoJnPmGS]] which is a spin off on J. K. Rowling's Harry Potter books.
''future'', n.
That period of time in which our affairs prosper, our friends are true and our happiness is assured.
: ― [[Ambrose Bierce]], The Unabridged Devil's Dictionary
"""
"""
Every future is fabulous.
: -- [[Alejo Carpentier|https://en.wikipedia.org/wiki/Alejo_Carpentier]]
"""
"""
For the gods perceive what lies in the future, and men what is going on before them, and wise men what is approaching.
: -- [[Philostratus|https://www.livius.org/articles/person/philostratus/]], Life of Apollonius of Tyana, [[VIII, 7|https://www.livius.org/sources/content/philostratus-life-of-apollonius/philostratus-life-of-apollonius-8.7.vi-x/]].
"""
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Gilbert Keith Chesterton, KC*SG (29 May 1874 – 14 June 1936) was an English writer. He published works on philosophy, ontology, poetry, plays, journalism, public lectures and debates, literary and art criticism, biography, Christian apologetics, and fiction, including fantasy and detective fiction.
Chesterton has been called the "prince of paradox". Time magazine, in a review of a biography of Chesterton, observed of his writing style: "Whenever possible Chesterton made his points with popular sayings, proverbs, allegories—first carefully turning them inside out."
For example, Chesterton wrote "Thieves respect property. They merely wish the property to become their property that they may more perfectly respect it."
Some quotes: https://www.chesterton.org/quotations-of-g-k-chesterton/
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Was the world's chess champion, lost in a series of chess games to the IBM Deep Blue mainframe computer.
This happened in 1997. Later, in 2017, Google's Alpha Go AI [[defeated the Go world champion|https://www.theatlantic.com/technology/archive/2017/10/alphago-zero-the-ai-that-taught-itself-go/543450/]]. But as a wise man said after that defeat:
{{The mounted horse did not kill athletics. We run for joy.}}
and he was right of course.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Generous listening is powered by curiosity, a virtue we can invite and nurture in ourselves to render it instinctive. It involves a kind of vulnerability— a willingness to be surprised, to let go of assumptions and take in ambiguity. The listener wants to understand the humanity behind the words of the other, and patiently summons one’s own best self and one’s own best words and questions.
: -- from her talk about [[The Art of Generous Listening|https://www.youtube.com/watch?v=J5W36VWNd9E]].
''Genius''
"""
Was what they called you in high school
if you tripped on a shoelace in the hall
and all your books went flying.
Or if you walked into an open locker door
you would be known as Einstein,
who imagined riding a streetcar into infinity.
Later, genius became someone
who could take a sliver of chalk and squire pi
a hundred places out beyond the decimal point,
or someone painting on his back on a scaffold,
or a man drawing a waterwheel in a margin,
or spinning out a little night music.
But earlier this week on a wooded path,
I thought the swans afloat on the reservoir
were the true geniuses,
the ones who had figured out how to fly,
how to be both beautiful and brutal,
and how to mate for life.
Twenty-four geniuses in all,
for I numbered them as Yeats had done,
deployed upon the calm, crystalline surface—
forty-eight if we count their still reflections,
or an even fifty if you want to toss in me
and the dog running up ahead,
who were smart enough to be out
that morning—she sniffing the ground,
me with my head up in the light morning breeze.
"""
This theme also shows up in [[Seven Wonders of the World (so Meta)]]
Genius hesitates. When we approach a truly enormous idea, of the sort that tilts the world on its axis, we’re not excited and arrogant and confident. We’re unsure; we hesitate.
The people who are doing really groundbreaking work are tentative, cautious, almost unsettled by the implications of what they’re saying.
Geologic history shows us that life is only a short episode between two eternities of death, and that, even in this episode, conscious thought has lasted and will last only a moment. Thought is only a gleam in the midst of a long night. But it is this gleam which is everything.
(See also how [[Brian Christian]] describes [[this brief opportunity we are given|We all start off the same and we all end up the same, with a brief moment of difference in between. Fertilization to fertilizer. Ashes to ashes. And we spark across the gap.]]).
Geometry without algebra is dumb! Algebra without geometry is blind!
:-- from Clifford Algebra to Geometric Calculus: A Unified Language for Mathematics and Physics by D. Hestenes and G. Sobczyk
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Computer Pioneer - http://history.computer.org/pioneers/forsythe.html
<<list-links "[tag{!!title}]">>
a former U.S. secretary of labor, treasury and state, and was director of the Office of Management and Budget. He is a distinguished fellow at Stanford University’s Hoover Institution.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Sci-Fi writer https://en.wikipedia.org/wiki/George_Zebrowski
<<list-links "[tag{!!title}]">>
a French author, born in Paris. Duhamel trained as a doctor, and during World War I was attached to the French Army. In 1920, he published Confession de minuit, the first of a series featuring the anti-hero Salavin.
<<list-links "[tag{!!title}]">>
American biologist who shared the 1972 Nobel Prize in Physiology or Medicine for work with Rodney Robert Porter on the immune system. Edelman's Nobel Prize-winning research concerned discovery of the structure of antibody molecules.
https://www.nobelprize.org/prizes/medicine/1972/edelman/biographical/
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Inspired by the saying "the only thing worse than getting older is the alternative", which I found on
http://www.delphiforfun.org/Programs/MasterMind.htm
wrote the book "The Issue At Hand".
<<list-links "[tag{!!title}]">>
Given a glass with water up to the mid level, people from the West will either say it's half full or they'll say it's half empty. People from the East will say it's both half full and half empty. They are all right.^^1^^
Read [[a nerdy/engineering variation on this.|Given a glass with water up to the mid level, people will usually either say it's half full or they'll say it's half empty. An engineer will say it's twice as big as it was specified in the requirements.]]
This reflects on reality similarly to
> [[An optimist and a pessimist were arguing about philosophy. The optimist declares: "This is the best of all possible worlds." The pessimist sighs and says, "You're right."]]
----
^^1^^ see another case of being [[all right|My Left Left - poem by Kenn Nesbitt]]
Given a glass with water up to the mid level, people will usually either say it's half full or they'll say it's half empty. An engineer will say it's twice as big as it was specified in the requirements.
[[My Buddhist variation on this.|Given a glass with water up to the mid level, people from the West will either say it's half full or they'll say it's half empty. People from the East will say it's both half full and half empty. They are all right.]]
On Giving:
Giving may be an essence of existence, and a test of our character; it asks deep questions about our relationship to others, to ourselves and, strangely, to time itself: all gifts change with the maturation of their recipients [and giver].
: -- from [[his|David Whyte]] book //"Consolations -- The Solace, Nourishment, and Underlying Meaning of Everyday Words"//
[kindness] [appreciation]
Glenn Clark (1882-1956), Founder of "The Camps Farthest Out"
http://glennclark.wwwhubs.com/
<<list-links "[tag{!!title}]">>
Go to Heaven for the climate, Hell for the company.
But there may be [[other reasons to go to Heaven|Light after Darkness - poem by Frances R. Havergal]] :)
!! How God Gets Into It
"""
God arrives in the transitions—
the times between before and after
the shatterings, bendings, breakings
moments of devilment and blasted pose—
The feeling then arises,
a draft in the system
tiny shaft of light in the visual field
which, when noticed and affirmed,
opens out to an aura on the screen of eclectic ineffability—
One’s arms open in quietude and perplexity
There’s nothing to say, do, or think.
"""
(the last part reminds me of [[my Father|Alfred Mark]]'s saying in German:
>Was soll Ich Ihnen sagen? Ich habe Ihnen nichts was zu sage. (What should I tell you? I have nothing to say.)
)
God doesn't play dice.
The "comeback" by the physicist [[Niels Bohr]] to [[Albert Einstein]] saying this was:
> [[Stop telling God what to do with his dice.]]
"""
"""
[[Stephen Hawking]] had another response:
>Einstein was doubly wrong ... not only does God definitely play dice, but He sometimes confuses us by throwing them where they can’t be seen.
[[Donald Knuth]] in his book [[Things a Computer Scientist Rarely Talks About|https://en.wikipedia.org/wiki/Things_a_Computer_Scientist_Rarely_Talks_About]] says:
>The most popular way to account for what we can see in physical experiments is to imagine flipping a coin at each branch point. Einstein made a famous comment that "God doesn't play dice with the universe,” and he held to that position for the last thirty years of his life. But nowadays that's definitely a minority opinion.
>
>For example, Rustum Roy gave a major lecture in London twenty years ago called “Living with the dice-playing God." David Bartholomew's book, published in 1984, said that God uses chance, because chance offers "many advantages which it is difficult to envisage being obtained in any other way," for example evolution.
And Knuth adds:
> Some people, of course, are very suspicious of random choices. For example, Hugh Montefiore in 1985 said, “Chance and necessity may produce creativity but they cannot produce purpose." On this point I believe he was dead wrong: I use random numbers all the time with a very definite purpose, namely to help me discover something.
God grant me the serenity to accept the things I cannot change; Courage to change the things I can; And wisdom to know the difference.
Compare to the much more religious/faith-based quote by [[Thomas Aquinas]]:
> Grant me, O Lord my God, a mind to know you, a heart to seek you, wisdom to find you, conduct pleasing to you, faithful perseverance in waiting for you, and a hope of finally embracing you. Amen.
(Also compare to [[The Fool's Prayer - poem by Edward Rowland Sill]])
First of all it is inaccurate to speak of my role in the scheme of things. I am the scheme of things. Secondly, it is equally misleading to speak of my aiding the process of sentient beings attaining enlightenment. I am the process. The ancient Taoists were quite close when they said of me (whom they called "Tao") that I do not do things, yet through me all things get done. In more modem terms, I am not the cause of Cosmic Process, I am Cosmic Process itself. I think the most accurate and fruitful definition of me which man can frame -- at least in his present state of evolution -- is that I am the very process of enlightenment.
- see [[Those who wish to think of the devil might analogously define him as the unfortunate length of time the process takes.]]
God's zoo is very big (and diverse).
in Hebrew: Gan ha-chayot shell Elohim gadol meod (גן החיות של אלוהים גדול מאד)
Or as [[Yann Martel]], in his book //"Life of Pi"// (more darkly?) expressed it:
> We commonly say in the trade that the most dangerous animal in a zoo is Man.
and then he also observed about God and zoos:
> I know zoos are no longer in people's good graces. Religion faces the same problem. Certain illusions about freedom plague them both.
(see [[Shunryu Suzuki]]'s take on freedom and illusions (and religion/faith):
[[To give your sheep or cow a large spacious meadow is the way to control him.]] )
A disciple observed his Zen Master giving certain advice to one person, and the opposite advice to another person, and was very troubled by this.
After the two people had left, he asked his Master: How can you give one advice to one person, and the opposite advice to another?
The Master answered: if I see a person riding a bicycle on the road, and they are getting too close to the ditch on the left I say “go right!” and if they are too close to the ditch on the right I say “go left!”^^1^^
(see what [[George Polya]] had to say about [[doing the right thing in the appropriate situation|Pedantry and mastery are opposite attitudes toward rules. To apply a rule to the letter, rigidly, unquestioningly, in cases where it fits and in cases where it does not fit, is pedantry. … To apply a rule with natural ease, with judgment, noticing the cases where it fits, and without ever letting the words of the rule obscure the purpose of the action or the opportunities of the situation, is mastery.]]^^3^^).
(also compare to what [[Christian Dillo]] said [[about contradictions|Sometimes you hear Zen teachers say that a liberated mind is neither active nor passive. In other words, conceptual contradictions don’t have to be contradictory in your experience.]])
----
^^1^^ Or as [[Joseph Goldstein|https://en.wikipedia.org/wiki/Joseph_Goldstein_(writer)]] said about Buddhist teachings:
> When you stop taking the teachings to be conflicting statements of absolute truth, you begin to see them as __skillful means__^^2^^ for (wisdom and) liberation. If you see the teachings as skillful means, then the fact that teachers are saying different things is not a problem.
^^2^^ Skillful means (upaya-kausalya) refers to an enlightened person’s ability to tailor their message to a specific audience [at the right time and right place/context/situation^^3^^].
^^3^^ The essence of Buddhism is responding appropriately to the particularity of every situation.
:: – from a Zen Koan
Good mathematicians see analogies between theorems or theories. The very best ones see analogies between analogies.
-- Stanislaw Ulam quoting Stefan Banach
Good quotes [and good writers] give you not only the new thoughts you need but the proper phrasing for the thoughts you already have.
:: -- from his book //American Audacity//, in his article //The Devil and James Baldwin//.
"""
''Walls''
Without consideration, without pity, without shame
they have built great and high walls around me.
And now I sit here and despair.
I think of nothing else: this fate gnaws at my mind;
for I had many things to do outside.
Ah why did I not pay attention when they were building the walls.
But I never heard any noise or sound of builders.
Imperceptibly they shut me from the outside world.
"""
: -- [[Constantine P. Cavafy]]
Sometimes we have built the walls ourselves, but often it is simply the nature of things that walls that once served and sheltered us at certain periods of our life only imprison us when we have remained within their confines for too long. A work emboldens us for a while, and then, if we do not invigorate and re-imagine our participation, it begins to enclose us and slowly starve our spirit. Good work done in the same way for too long, or done in the wrong way for any amount of time, eats away our sense of being right with the world.
:: -- From [[David Whyte]]'s “Crossing the unknown sea : work as a pilgrimage of identity.”
[growth] [stagnation]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Grandparents are both our past and our future. In some ways they are what has gone before, and in others they are what we will become.
Gratefulness is the inner gesture of giving meaning to our life by receiving life as a gift.
Gratefulness:
"""
To see a world in a grain of sand
and a heaven in a wild flower,
Hold infinity in the palm of your hand
and eternity in an hour.
"""
<<list-links "[tag{!!title}]">>
From “Precious Five” ([[Nones|https://en.wikipedia.org/wiki/Nones_(Auden)]], 1951), addressed by Auden to his senses:
"""
I can (which you cannot)
Find reasons fast enough
To face the sky and roar
In anger and despair
At what is going on,
Demanding that it name
Whoever is to blame:
The sky would only wait
Till my breath was gone
And then reiterate
As if I wasn’t there
That singular command
I do not understand,
Bless what there is for being,
Which has to be obeyed, for
What else am I made for,
Agreeing or disagreeing?
"""
Gratitude is like a flashlight. It lights up what is already there. You don't necessarily have anything more or different, but suddenly you can actually see what is. And because you can see, you no longer take it for granted.
: -- In [[her|M.J. Ryan]] book //"Attitudes of Gratitude"//
Contrast this with an opposite (describing Ambition), using a similar light metaphor by [[David Whyte]]:
> “We may direct the beam of ambition to illuminate a certain corner of the future world, but ultimately it can reveal to us only those dreams with which we have already become familiar. Ambition left to itself, like the identity of the average billionaire, always becomes tedious, its only object the creation of larger and larger empires of control”
: -- from [[his|David Whyte]] book //"Consolations -- The Solace, Nourishment, and Underlying Meaning of Everyday Words"//
''GREEN BEHIND THE EARS''
"""
I was still slightly
fuzzy in shady spots
and the tenderest lime.
It was lovely, as I
look back, but not
at the time. For it is
hard to be green and
take your turn as flesh.
So much freshness
to unlearn.
"""
[Beginner's Mind]
an anthropologist who applied cybernetics to the social sciences.
http://www.informationphilosopher.com/solutions/scientists/bateson/
<<list-links "[tag{!!title}]">>
Emeritus Professor of Physics and Astronomy, UC-Irvine; Novelist, The Berlin Project
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Groundless hope, like unconditional love, is the only kind worth having.
Grown-ups never understand anything by themselves, and it is tiresome for children to be always and forever explaining things to them.
Growth purely for its own sake is the philosophy of cancer.
: ― in [[his|Jasper Fforde]] book //Lost in a Good Book//
on scientific progress at all costs (or as the most important thing)?
on economic growth at all costs (or as the most important thing)?
Inspired by [[Paul Erdős]] and co-authored (with Martin Aigner) the book //Proofs From THE BOOK// (and here's at least [[an earthly shadow of it|http://www.springer.com/us/book/9783662442043]] :)
<<list-links "[tag{!!title}]">>
American computer scientist who has played an important role in designing and documenting several computer programming languages.
<<list-links "[tag{!!title}]">>
Herbert George Wells was an English writer.
<<list-links "[tag{!!title}]">>
cartoon character - http://www.hagardunor.net/hagarthehorrible.php
<<list-links "[tag{!!title}]">>
The cartoon character [[Hagar The Horrible|http://www.hagardunor.net/hagarthehorrible.php]] was once asked: what do you prefer, money, power, or women?
Without hesitation he answered: power!
Why?
If you have power, you can easily get money, and then you can have all the women you want.
My name is Haggai Mark. I live in Northern California. I am a Learning Solutions designer and implementer, and CS^^1^^ and STEM^^2^^ course developer and teacher, with strong engineering expertise in system/platform/software architecture and implementation, as well as deep experience in technology-enabled instructional design and development.
I have a [[Masters degree from Stanford University in Learning, Design, and Technology|http://ldtprojects.stanford.edu/~hmark/index_stanford.html]].
I am blessed with an awesome family: a wonderful wife and 3 great children.
[img[infinite State Machine|./resources/fin-StateMachine-ite.gif]]
@@font-size:16pt; ''*'' :@@ "I am a strange loop"^^3^^ [[(and even Doug said so himself)|On the strange human loop]]
@@font-size:16pt; ''**'' :@@ infinite StateMachine
> (see the musings in [[Cormac McCarthy's article "The Kekule Problem|https://nautil.us/the-kekul-problem-236574/]]:
>
> > [it's a paradox (?) that the human mind is seated atop] the very recent and “uniquely” human capability of near infinite expressive power arising through a combinatorial grammar [although it] is built on the foundations of a far more ancient animal brain.
>
>)
^^1^^ CS = Computer Science
^^2^^ STEM = Science, Technology, Engineering, Mathematics
^^3^^ on [["strange loopiness"|http://en.wikipedia.org/wiki/I_Am_a_Strange_Loop]] (as in self-reference) a-la and //about// [[Douglas Hofstadter]]
[img[adr|./resources/adr.png]]
<<list-links "[tag{!!title}]">>
From [[a blog post|http://blog.kenperlin.com/?p=15619]] by [[Ken Perlin|http://mrl.nyu.edu/~perlin/]] (a CS professor an NYU:
"""
(experience)
what teaches us to
recognize our mistakes the
next time we make them
(fun)
it is what you have
when you’re not thinking at all
about what you have
(god)
a way to avoid
responsibility for
choosing to be good
(human)
our name for any
living creature in which we
recognize ourselves
(stack (programming data structure))
when it overflows
we have arrived at the end
of the infinite
"""
<<list-links "[tag{!!title}]">>
Sir Halford John Mackinder (15 February 1861 – 6 March 1947) was an English geographer and is considered one of the founding fathers of both geopolitics and geostrategy.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
http://hannahtinti.com/
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Happiness is a butterfly, which, when pursued, is always just beyond your grasp, but which, if you will sit down quietly, may alight upon you.
(compare to [[William James]]'s [[take on happiness|Actions do not always bring happiness, but there is no happiness without action.]]).
Happiness is a choice – not a condition.
: -- from [[an interview with Karl Pillemer|https://fs.blog/2013/06/karl-pillemer-interview-no-2/]]^^1^^ in [[Farnam Street|https://fs.blog/]].
Also from the interview:
>Most of the elders said that taking charge of one’s own happiness simply must happen at some point if one is going to live a fulfilling life, and especially in old age. Not trying to assume control over everything that happens to us – they laughed at that idea – but over our own conscious attitude toward happiness.
>[...]
>Another elder told me: “My single best piece of advice is to take responsibility for your own happiness throughout your life.”
>[...]
The elders make the key distinction between events that happen to us on the one hand, and our internal attitude toward happiness on the other. Happy in spite of. Happiness is not a passive condition dependent on external events, nor is it the result of our personalities – just being born a happy person. Instead, happiness requires a conscious shift in outlook, in which one chooses – daily – optimism over pessimism, hope over despair.
----
^^1^^ - Karl Pillemer is the author of "//30 Lessons for Living: Tried and True Advice from the Wisest Americans//".
Happiness is an inside job.
Happiness is not a matter of intensity but of balance, order, rhythm and harmony.
Happiness is not a result to be attained through action, but a fact to be realized through knowledge. The sphere of action is to express it, not to gain it.
(compare to [[William James]]'s [[take on happiness|Actions do not always bring happiness, but there is no happiness without action.]]).
Happiness is not the shallow state of feeling pleased and chipper all the time. Happiness is the state of a human being that has achieved cross-level coherence within themselves, and between themselves and people, challenges, work, and institutions around them. Happiness comes from between.
: -- from [[his|Jonathan Haidt]] [[website on his book "The Happiness Hypothesis"|https://www.happinesshypothesis.com/beyond-gethappy.html]]
Also from the book (chapter 10):
>Who sees all beings in his own Self, and his own Self in all beings, loses all fear...
> :: -- Upanishads
>
>What is the meaning of life? The question is unanswerable in that form, but with a slight rephrasing we can answer it. Part of the answer is to tie yourself down, commit yourself to people and projects, and enter a state of “vital engagement” with them. The other part is to attain a state of "cross-level coherence" within yourself, and within your life. Religion is an evolved mechanism for satisfying these needs. We can find meaning and happiness without religion, but we must understand our evolved religious nature before we can find effective substitutes.
[relationships] [work] [calling]
(see also how [[he|Jonathan Haidt]] put it [[slightly differently|The best we can do (to achieve happiness) is to get the right relationship between ourselves and others, between ourselves and our work, and between ourselves and something larger than ourselves.]]).
Felix qui potuit rerum cognoscere causas. (Georgics (29 BC), Book II, line 490 (tr. H. Rushton Fairclough); homage to Lucretius.)
Blessed is he who has been able to win knowledge of the causes of things.
[[John Dryden]]'s translation:
Happy the man, who, studying nature's laws,
Thro' known effects can trace the secret cause.
<<list-links "[tag{!!title}]">>
"""
See how efficient it still is,
how it keeps itself in shape—
our century’s hatred.
How easily it vaults the tallest obstacles.
How rapidly it pounces, tracks us down.
It is not like other feelings.
At once both older and younger.
It gives birth itself to the reasons that give it life.
When it sleeps, it’s never eternal rest.
And sleeplessness won’t sap its strength; it feeds it.
One religion or another—
whatever gets it ready, in position.
One fatherland or another—
whatever helps it get a running start.
Justice also works well at the outset
until hate gets its own momentum going.
Hatred. Hatred.
Its face twisted in a grimace
of erotic ecstasy.
Oh these other feelings, listless weaklings.
Since when does brotherhood draw crowds?
Has compassion ever finished first?
Does doubt ever really rouse the rabble?
Only hatred has just what it takes.
Gifted, diligent, hard-working.
Need we mention all the songs it has composed?
All the pages it has added to our history books?
All the human carpets it has spread
over countless city squares and football fields?
Let’s face it:
it knows how to make beauty.
The splendid fire-glow in midnight skies.
Magnificent bursting bombs in rosy dawns.
You can’t deny the inspiring pathos of ruins
and a certain bawdy humor to be found
in the sturdy column jutting from their midst.
Hatred is a master of contrast—between explosions and dead quiet,
red blood and white snow.
Above all, it never tires
of its leitmotif—the impeccable executioner
towering over its soiled victim.
It’s always ready for new challenges.
If it has to wait awhile, it will.
They say it’s blind. Blind?
It has a sniper’s keen sight
and gazes unflinchingly at the future
as only it can.
"""
[human emotions]
(compare to [[Kaos and the four riders of the Apocalypse|The world is made up of four elements: Earth, Air, Fire and Water. This is a fact well known to everyone. It’s also wrong. There’s a fifth element, and generally it’s called Surprise.]] as seen by [[Terry Pratchett]])
"""
Auch der Hass gegen die Niedrigkeit
Verzerrt die Zuege.
Auch der Zorn ueber das Unrecht
Macht die Stimme heiser.
"""
"""
Hatred, even of meanness
Contorts the features.
Anger, even against injustice
Makes the voice hoarse.
"""
(compare to the [[Buddha]]'s take on [[holding on to strong feelings|Holding on to anger is like grasping a hot coal with the intent of throwing it at someone else; you are the one who gets burned.]]).
Having to read footnotes resembles having to go downstairs to answer the door while in the midst of making love.
[[Christopher Priest]] said about the English author [[John Wyndham]]'s restraint in language, describing sci-fi apocalypse novels in a tasteful, civilized style:
He (John Wyndham) described the odd rather than the fantastic, the disturbing rather than the horrific, the remarkable rather than the outrageous. He dealt with menace, not terror.
(compare to [[Alfred North Whitehead]]'s [[observation about style/content|He left the darkness of the subject unobscured.]]).
[style] [understatement] [refinement]
(compare with what was said about [[Marilynne Robinson]]'s speaking: [[Although it wouldn’t be unfair to present anything she said as a stand-alone thought, it would be untrue to the remarkable way her mind skips the stones of a question across its ample surface.]]).
He [Ramsay MacDonald, the British Prime Minister] has the gift of compressing the largest amount of words into the smallest amount of thoughts.
He hoped and prayed that there wasn’t an afterlife. Then he realized there was a contradiction involved here and merely hoped that there wasn’t an afterlife.
He is a modest man with much to be modest about.
::-- Winston Churchill on Clement Attlee (''but'', they had mutual appreciation for each other)
He is a very shallow critic who cannot see an eternal rebel in the heart of a conservative.
He is happy whom circumstances suit his temper; but he is more excellent who suits his temper to any circumstance.
From [[an article by Martin Gardner|http://www.ams.org/notices/200707/tx070700852p.pdf]] reviewing Douglas Hofstadter's book //I am a strage loop//:
>Like his friend Dennett, who wrote a book brazenly titled //Consciousness Explained//, Hofstadter believes that he too has explained it. Alas, like Dennett, he has merely described it. It is easy to describe a rainbow. It is not so easy to explain a rainbow. It is easy to describe consciousness. It is not so easy to explain the magic by which a batch of molecules produce it. To quote a quip by Alfred North Whitehead, Hofstadter and Dennett “leave the darkness of the subject unobscured.”
It's an ironic (strange) loop, that in Hofstadter's book, he (somewhat) mocks/pities Alfred North Whitehead and Bertrand Russell on their attempt to create an 'impregnable bastion' of Math in the form of //Principia Mathematica//, and here Gardner uses a quip by Whitehead to 'needle' Hofstadter...
Compare to [[Terry Pratchett]]'s observation: [[Many people explain things – although ‘explain’ is probably too positive a word, and it often really means failed to explain but at some length.]]
or quoting [[Ambrose Bierce]]:
> Dr. Samuel Johnson beautifully said of another author's ideas that they were "concatenated without abruption.”
(compare to [[Christopher Priest]]'s [[observation about style/content|He described the odd rather than the fantastic, the disturbing rather than the horrific, the remarkable rather than the outrageous. He dealt with menace, not terror.]]).
(contrast with what was said about [[Marilynne Robinson]]'s speaking: [[Although it wouldn’t be unfair to present anything she said as a stand-alone thought, it would be untrue to the remarkable way her mind skips the stones of a question across its ample surface.]]).
[style] [speaking] [explanation] [description]
"""
SMALL THINGS
& GREAT
He that lets
the small things bind him
leaves the great
undone behind him.
"""
He that loveth a book will never want a faithful friend, a wholesome counselor, a cheerful companion, and an effectual comforter.
He that would live in peace and at ease, must not speak all he knows nor judge all he sees.
He was so narrow minded he could see through a keyhole with both eyes.
He who dies but does not perish has life everlasting.
And in the same vein:
>To distinguish the real from the unreal, one has to experience them both.
:: [[Saul Gorn's Compendium of rarely used cliches|https://repository.upenn.edu/cgi/viewcontent.cgi?referer=https://www.google.com/&httpsredir=1&article=1522&context=cis_reports]]
He who opens a school door, closes a prison.
(compare to what [[Helen Keller]] had said about [[opening doors|When one door of happiness closes, another opens; but often we look so long at the closed door that we do not see the one which has been opened for us.]]).
He who would learn to fly one day must learn to stand and walk and run and climb and dance; one cannot fly into flying.
<<list-links "[tag{!!title}]">>
Health is the greatest gift, contentment the greatest wealth, faithfulness the best relationship.
Information and food are both forms of fuel. They’re things we take in from the outside world to use internally. They power our actions and feed our growth -- mentally and physically. Information is quite literally food for thought.
The healthiest information is whatever we can put to most use. Healthy information offers inspiration and guidance. It helps us solve problems, make better decisions and navigate the world more smoothly. It helps strengthen our relationships and expands our options in life. It helps prevent us from getting misled or manipulated. It helps us to live better and more fully. This information is considered to have high “action value”.
The trouble is there is very little value in most of the things we consume today.
The concept of “action value” was coined by the brilliant media theorist, [[Neil Postman|https://neilpostman.org/]] in his seemingly prophetic book, Amusing Ourselves to Death. In it he states the following
“….most of our daily news is inert, consisting of information that gives us something to talk about but cannot lead to any meaningful action…
Prior to the age of telegraphy, the information-action ratio was sufficiently close so that most people had a sense of being able to control some of the contingencies in their lives. What people knew about had action-value.
In the information world created by telegraphy, this sense of potency was lost, precisely because the whole world became the context for news. Everything became everyone’s business. For the first time, we were sent information which answered no question we had asked, and which, in any case, did not permit the right of reply. “
Now it’s important to emphasize that we’re not suggesting putting our heads in the sand and ignoring everything inapplicable to our day to day. Not every digital interaction needs to be “useful”, just like every bite we eat doesn’t need to be a nutrient-dense superfood.
Sometimes we eat for comfort, to lift our spirits or to connect with others. Sometimes we just want that donut! And that’s ok! That’s human. However if the majority of things we take in are useless, or worse harmful, sadness and sickness begin to seep in.
There is no one-size-fits all approach, when it comes to defining ‘healthy information’. Different people and different goals require different intake.
See [[TOOL: Beneficial vs Depleting Time Online Chart|https://metaversalwellbeing.com/2022/11/29/tool-beneficial-vs-depleting-time-online/]]
: -- from the article [["What It's All For"|https://metaversalwellbeing.com/2022/11/29/whats-it-all-for/]] at Metaverse Wellbeing
''Heart To Heart'' by Rita Dove
"""
It’s neither red
nor sweet.
It doesn’t melt
or turn over,
break or harden,
so it can’t feel
pain,
yearning,
regret.
It doesn’t have
a tip to spin on,
it isn’t even
shapely—
just a thick clutch
of muscle,
lopsided,
mute. Still,
I feel it inside
its cage sounding
a dull tattoo:
I want, I want—
but I can’t open it:
there’s no key.
I can’t wear it
on my sleeve,
or tell you from
the bottom of it
how I feel. Here,
it’s all yours, now—
but you’ll have
to take me,
too.
"""
[simile] [imagery] [relationship]
Heartbreak can also ground us truly in whatever grief we are experiencing, set us to planting a seed with what we have left, or appreciate what we have built even as we stand in its ruins.
[I think that it's similar/analogous to how a big shadow indicates a big object (and a bright light!).]
Heartbreak asks us not to look for an alternative path, because there is no alternative path. It is an introduction to what we love and have loved, an inescapable and often beautiful question, something or someone that has been with us all along, asking us to be ready to let go of the way we are holding things, and preparation perhaps for the last letting go of all.
: -- from [[his|David Whyte]] book //"Consolations -- The Solace, Nourishment, and Underlying Meaning of Everyday Words"//
In a conversation between Jonathan Livingston and Chiang the Elder, Chiang explains:
"""
"Heaven is not a place, and it is not a time. Heaven is being perfect."
He was silent for a moment.
"You are a very fast flier, aren't you?"
"I... I enjoy speed," Jonathan said, taken aback but proud that the Elder had noticed.
"You will begin to touch heaven, Jonathan, in the moment that you touch perfect speed. And that isn't flying a thousand miles an hour, or a million, or flying at the speed of light. Because any number is a limit, and perfection doesn't have limits. Perfect speed, my son, is being there."
Without warning, Chiang vanished and appeared at the water's edge fifty feet away, all in the flicker of an instant. Then he vanished again and stood, in the same millisecond, at Jonathan's shoulder.
"It's kind of fun," he said.
"""
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
American author, political activist, and lecturer.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Help is strangely, something we want to do without, despite it being something we deeply depend on.
From the day that we are born, we need extraordinary physical & psychological nurturing. Even as adults, we need those around us at work or at home, to help and support us.
Help isn't something to not want, but something we must learn to do well. To ask for [and give] help and to learn how to ask for [and give] the right kind of help, is a primary, not secondary part, of our growth.
: -- from a podcast with [[Sam Harris]] titled [["Distance & Arrival"|https://www.samharris.org/podcasts/making-sense-episodes/249-distance-arrival]]
a French mathematician, theoretical physicist, engineer, and a philosopher of science.
(Henri Poincaré (searchable spelling: Poincare))
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
https://en.wikiquote.org/wiki/Henry_Fielding
<<list-links "[tag{!!title}]">>
Industrialist; founder of the Ford Motor Company.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
prominent Congregationalist clergyman, social reformer, abolitionist, and speaker in the mid to late 19th century.
Born: June 24, 1813, Litchfield
Died: March 8, 1887, Brooklyn
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
A [[Nobel Laureate (Economics|https://www.nobelprize.org/prizes/economic-sciences/1978/simon/biographical/]]
<<list-links "[tag{!!title}]">>
Here is the test to find whether your mission on Earth is finished: if you're alive, it isn't.
Now, after 3 billion years the Darwinian interlude is over. It was an interlude between two periods of horizontal gene transfer. The epoch of Darwinian evolution based on competition between species ended about 10,000 years ago when a single species Homo sapiens began to dominate and reorganize the biosphere. Since that time cultural evolution has replaced biological evolution as the main driving force of change.
Cultural evolution is not Darwinian. Cultural cultures spread by horizontal transfer of ideas more than by genetic inheritance. Cultural evolution is running a thousand times faster than Darwinian evolution taking us into a new era of cultural interdependence which we call globalization.
And now in the last 30 years Homo sapiens has revived the ancient pre-Darwinian practice of horizontal gene transfer moving genes easily from microbes to plants and animals blurring the boundaries between species. We are moving rapidly into the post Darwinian era when species will no longer exist. Open-source principles will govern the exchange of genes and the evolution of life will be communal.
: -- from [[his|Freeman Dyson]] talk [["Heretical Thoughts About Science and Society"|https://www.youtube.com/watch?v=8xFLjUt2leM]]
<<list-links "[tag{!!title}]">>
David Hestenes and Garret Sobczyk - authors of a mathematics book
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
"""
''Hidden Things''
Let them not seek to discover who I was
from all that I have done and said.
An obstacle was there that transformed
the deeds and the manner of my life.
An obstacle was there that stopped me
many times when I was about to speak.
Only from my most imperceptible deeds
and my most covert writings--
from these alone will they understand me.
But perhaps it isn't worth exerting
such care and such effort for them to know me.
Later, in the more perfect society,
surely some other person created like me
will appear and act freely.
"""
[modesty] [freedom]
<<list-links "[tag{!!title}]">>
Hippocrates of Cos or Hippokrates of Kos was an ancient Greek physician of the Age of Pericles, and is considered one of the most outstanding figures in the history of medicine.
Born: BC 460, Kos
<<list-links "[tag{!!title}]">>
Hire and promote first on the basis of integrity; second, motivation; third, capacity; fourth, understanding; fifth, knowledge; and last and least, experience.
Without integrity, motivation is dangerous; without motivation, capacity is impotent; without capacity, understanding is limited; without understanding, knowledge is meaningless; without knowledge, experience is blind. Experience is easy to provide and quickly put to good use by people with all the other qualities.
<<list-links "[tag{!!title}]">>
Historical sense and poetic sense should not, in the end, be contradictory, for if poetry is the little myth we make, history is the big myth we live, and in our living, constantly remake.
<<list-links "[tag{!!title}]">>
History is that certainty produced at the point where the imperfections of memory meet the inadequacies of documentation.
: ― in //The Sense of an Ending//
[[He|Julian Barnes]] also said (in //The Sense of an Ending//):
> That's one of the central problems of history, isn't it, sir? The question of subjective versus objective interpretation, the fact that we need to know the history of the historian in order to understand the version that is being put in front of us.
(compare to what [[he|Julian Barnes]] also said: [[What you end up remembering isn't always the same as what you have witnessed.]]).
History is useful to man in three ways, and we must understand these uses as conditional lest they manifest disastrous effects.
Each of the three species of history which exist belongs to a certain soil and a certain climate and only to that: in any other it grows into a devastating weed.
If the man who wants to do something great has need of the past at all, he appropriates it by means of ''monumental history'';
he, on the other hand, who likes to persist in the familiar and the revered of old, tends the past as an ''antiquarian historian'';
and only he who is oppressed by a present need, and who wants to throw off this burden at any cost, has need of ''critical history'', that is to say a history that judges and condemns.
Much mischief is caused through the thoughtless transplantation of these plants: the critic without need, the antiquary without piety, the man who recognizes greatness but cannot himself do great things, are such plants, estranged from their mother soil and degenerated into weeds.
"""
To survive,
Let the past
Teach you--
Past customs,
Struggles,
Leaders and thinkers.
Let
These
Help you.
Let them inspire you,
Warn you,
Give you strength.
But beware:
God is Change.
Past is past.
What was
Cannot
Come again.
To survive,
know the past.
Let it touch you.
Then let
The past
Go.
"""
: ― from [[her|Octavia E. Butler]] book //Parable of the Talents//
Hold everything in your hands lightly, otherwise it hurts when God pries your fingers open.
Hold tenderly that which you cherish, for it is precious and a tight grip may crush it. Do not let fear of dropping it cause you to hold it too tightly: the chances are, it's holding you, too.
Holding on to anger is like grasping a hot coal with the intent of throwing it at someone else; you are the one who gets burned.
(compare to [[Bertold Brecht]]'s take on [[holding on to strong feelings|Hatred, even of meanness Contorts the features. Anger, even against injustice Makes the voice hoarse.]]).
<<list-links "[tag{!!title}]">>
"""
Death, be not proud, though some have called thee
Mighty and dreadful, for thou art not so,
For those whom thou think'st thou dost overthrow
Die not, poor Death, nor yet canst thou kill me.
From rest and sleep, which but thy pictures be,
Much pleasure; then from thee much more must flow,
And soonest our best men with thee do go,
Rest of their bones, and soul's delivery.
Thou art slave to Fate, chance, kings, and desperate men,
And dost with poison, war, and sickness dwell,
And poppy or charms can make us sleep as well
And better than thy stroke; why swell'st thou then?
One short sleep past, we wake eternally
And death shall be no more, Death, thou shalt die.
"""
: -- quoted in [[Margaret Edson]]'s play Wit: [ext[(local) play transcript|resources/wit-script-transcript-emma-thompson.html]] (or [[on script-o-rama|http://www.script-o-rama.com/movie_scripts/w/wit-script-transcript-emma-thompson.html]]) of the [[movie with Emma Thompson|http://openlibrary.org/books/OL9394233M/Wit]].
(see [[James Gleick]]'s [[take on punctuation and death|You lived; you will always have lived. Death does not erase your life. It is mere punctuation. If only time could be seen whole, then you could see the past remaining intact, instead of vanishing in the rearview mirror. There is your immortality. Frozen in amber.]]).
<<list-links "[tag{!!title}]">>
Hope is a revolutionary patience.
Hope is a state of mind, not of the world. Hope is not prognostication. It is an orientation of the spirit, and orientation of the heart; it transcends the world that is immediately experienced, and is anchored somewhere beyond its horizons. Hope … is not the same as joy that things are going well … but rather an ability to work for something because it is good.
Hope, in this deep and powerful sense, is not the same as joy that things are going well, or willingness to invest in enterprises that are obviously headed for early success, but rather an ability to work for something because it is good, not just because it stands a chance to succeed.
The more unpromising the situation in which we demonstrate hope, the deeper that hope is.
Hope is not the same thing as optimism. It is not the conviction that something will turn out well, but the certainty that something makes sense, regardless of how it turns out.
([[Joan Halifax]] echoes this feautifully when she talks about [[Wise Hope|Coming from wise hope might at some point show us that what we do matters, even though how and when it may matter, who and what it may impact, or even recognizing that it matters, are not things we can know beforehand.]])
(see also [[Being resilient doesn't mean feeling good all the time - it means you're good with feeling bad sometimes.]]).
Horse sense is the good judgment horses have that prevents them from betting on people.
How can frontiers be pushed, if one day it will take a lifetime just to reach them in every specialized domain?
If this Big Bang of public knowledge keeps apace, subspecialties would be like galaxies, flying away from one another until each is invisible to every other.
: -- from his book "Range - Why generalists triumph in a specialized world", writing about the concerns of Don Swanson, who was the Dean of the Graduate Library School of the University of Chicago.
<<comparequote "Ralph Sockman" "The larger the island of knowledge, the longer the shoreline of wonder." "knowledge explosion">>
And for a possible remedy/way out:
<<comparequote "Alfred North Whitehead" "It is a profoundly erroneous truism, repeated by all the copybooks, and by eminent people when they are making speeches, that we should cultivate the habit of thinking what we are doing. The precise opposite is the case..." "automation for efficiency">>
How can what an Englishman believes be heresy? It is a contradiction in terms.
I’ve been on the Zen path for a good 40 years now, and I still haven’t had a Great Awakening during zazen. I have had moments of Great Sleeping during zazen, however, and I’m somewhat comforted by the remark of Master Bush Wak, who said, “How can you awaken, if you are not asleep?” Still, when will I awaken?
: -- from [[her|Susan Moon]] essay [[Will I Ever Wake Up?|https://everydayzen.org/teachings/will-i-ever-wake-up/]]
How can you tell an extrovert mathematician? When he is talking to you, he is looking at your shoes instead of his own.
I do have a strong idea about the limitations of the computer in our skulls -- it’s just large enough to take care of our lives and must ignore an awful lot of what is going on around us. . . . I have a very primitive approach to science -- I wonder how the universe originated, how could it have originated … how could you make something out of nothing … and sophomoric ideas like that. And so, after having banged around with that -- how do you make a universe out of nothing -- I have decided, just logically, that it can’t be done and therefore it must always have existed. And so, from that, I get a sense of permanence and, also, an annoyance with the limitations of my head. And I really do think that what we perceive as time is simply a processing device in our heads to let us consider a little of reality at a time -- we couldn’t let it all come in at once.
[[May Swenson]] demonstrated her visual inventiveness in Iconographs (1970), a book of verse arranged in typographical forms whose shapes reflect the subject matter of the poems:
''How Everything Happens (Based on a Study of the Wave)''
```
happen.
to
up
stacking
is
something
When nothing is happening
When it happens
something
pulls
back
not
to
happen.
When has happened.
pulling back stacking up
happens
has happened stacks up.
When it something nothing
pulls back while
Then nothing is happening.
happens.
and
forward
pushes
up
stacks
something
Then
```
In an analysis of Swenson's work titled |"How Everything Happens: [[Notes on May Swenson’s Theory of Writing"|https://digitalcommons.usu.edu/cgi/viewcontent.cgi?article=1235&context=lib_pubs]] by Michael Spooner, and specifically when analyzing this poem, he writes:
> My instinct has always been to stress the verb in this poem’s title—“How Everything Happens”—but that’s wrong. When Swenson reads the title aloud, her inflection tells you just what she means: this is a poem about how everything happens. Then the subtitle: “Based on a Study of the Wave.” The Wave. The Platonic wave. And most of all, I love this: it “comprises a philosophical formula that can be generalized to all events.”
[...]
>A friend of mine is an artist, a designer of medical equipment and medical procedures. He describes his creative process quite simply as a period of waiting between two important moments. The first moment is when he understands a design question (What must this object or process achieve?), and second, at the far end of the process, is the moment when the resolution occurs to him.
>Between the two, he must keep his pencil in motion.
>What he draws at any given moment, he says, may create momentum and push him toward resolution, or it may only distract, pulling him back or in another direction. Sometimes nothing is happening. Regardless, he knows that this trough of waiting between question and answer is finite, and the resolution will form in his mind when he has given it enough drafts to work with. When the moment is right, everything happens.
The process ("wave") described in the creative process above, sounds similar to the [["bricolage"|On Bricolage in programming]] [construction or creation from a diverse range of available things] technique sometimes/someones employ in programming. One starts something in "the middle of the abstraction ladder stack" (ha!) and goes up and down the hierarchy/ladder/wave, seeing if thing are happening (ha, ha!).
[creativity] [programming]
How few things can a man measure with the tape of his understanding?
About Artificial Intelligence (AI):
* How is consciousness to be defined in a world of machines that reduce human experience to mathematical data, interpreted by their own memories (and processed by self-improving algorithms)?
* [AI] algorithms, being mathematical interpretations of observed data, do not explain the underlying reality that produces them. Paradoxically, as the world becomes more transparent, it will also become increasingly mysterious.
* By treating a mathematical process as if it were a thought process, and either trying to mimic that process ourselves or merely accepting the results, we are in danger of losing the capacity that has been the essence of human cognition.
: -- from an [[article in The Atlantic|https://www.theatlantic.com/magazine/archive/2018/06/henry-kissinger-ai-could-mean-the-end-of-human-history/559124/]]
from an interview of [[Todd May]] by George Yancy in the NYT titled [["How Should an Atheist Think About Death?"|https://www.nytimes.com/2020/10/20/opinion/philosophy-death-atheism.html]]:
* My own atheism involves a denial of the supernatural in all its forms, for instance the distinction of the soul from the body, the immortality of the soul, reincarnation and so on. However, I can imagine an atheism that believes, for instance, that there is a spiritual bond uniting all people or all living beings. A view like that would not require a deity, but might still be a form of atheism. It’s just not my atheism.
* My particular atheism commits me to thinking that those who believe in the supernatural are mistaken. It does not, however, commit me to thinking any less of them for their belief. This is an important distinction to make, one that often goes missing in discussions of atheism.
* ''Atheism, in short, is a view — or a set of views — about the supernatural; it is not a view about people who believe in the supernatural.''
* My own naturalism doesn’t require anything very radical. It is nothing more, really, than a denial of the supernatural. Beyond that, I would say that I’m committed to the existence of anything that I need to be committed to in order to explain my experience of the world. If that sounds vague and general, it should. It’s just that I don’t need anything supernatural for those explanations. My atheism follows pretty straightforwardly from that.
** Yancy: So your denial of the supernatural in all of its forms seems similar to Pierre-Simon Laplace’s response to Napoleon when the latter asked him about the absence of any mention of God to his system of the cosmos. Laplace said, “I had no need of that hypothesis.” For Laplace, at least, his response doesn’t claim that God doesn’t exist. It only says that he has no need for it. So, your experience of the world doesn’t need God or belief in a soul that survives the death of the body.
* Q: given that your experiences are constantly open and that even scientific inquiry is an open project, do you allow for the possibility that supernaturalism could come to play a more important role in your life?
** A: That would certainly be true, although unlikely. Here’s why. Our explanations of particular things or happenings are not just one-offs. They’re part of a network of beliefs. If that network of beliefs is naturalist, then when things happen that I can’t explain I’m likely to look for naturalist ways of explaining them, or alternatively say that I can’t find an adequate explanation for them yet. This is just as true of someone with a supernaturalist bent.
** naturalism and supernaturalism are more like scaffoldings within which we usually test and modify our beliefs; the scaffoldings themselves are less often open to change.
* [The Human Condition is embedded in a paradox:] On the one hand, our death threatens to sap meaning from our lives [what's the point of setting/aspiring for goals if we can die at any moment (or eventually)?]. On the other hand, without mortality our lives would eventually become shapeless [why bother with anything, if we have all the time in the world to (maybe] bother about it later (sometime in the endless future)?].
* So how do we live with this paradox? I suggest that we seek to live along two registers at once.
** First, we must engage in forward-looking projects and engagements, because that’s inevitable for almost all human beings. A life without ongoing engagements is, for most people, an impoverished one.
** Second, we must try to live as best we can within the moments of those engagements. Instead of solely looking forward, we should enjoy the present of what we do in the knowledge that at any moment the future could disappear. It’s a kind of stereoscopic vision that seeks to orient toward the future while immersing in the present.
* I don’t think that doing this is easy. For my own part, living more fully in the present is difficult for me. But I have gotten to the stage in my life where I can see its far shore much more clearly than the shore I set out from, and so I am trying to do that with greater urgency.
More than two hundred years ago (in 1820), the Reverend Sydney Smith (1771–1845) — known for his wit and gaiety — wrote a letter to Lady Georgiana Morpeth^^1^^ about low spirits, or what we now might call, in a non-clinical way, depression.
His thoughts need almost no alteration for modern times and are still excellent advice, perhaps especially for a world in/post quarantine (maybe with the exception/modification of items 6 and 7 — see below).
So here are his recommendations:
Dear Lady Georgiana,
…Nobody has suffered more from low Spirits than I have done—so I feel for you.
— 1st. Live as well and drink as much wine as you dare.
— 2d. Go into the Shower bath—with a small quantity of water at a temperature low enough to give you a slight sensation of cold—75 or 80°.
— 3d. Read amusing books.
— 4th. Maintain short views of human life not farther than dinner or Tea.^^2^^
— 5th. Be as busy as you can.
— 6th. See as much as you can of those friends who respect & like you.
— 7th. And of those acquaintances who amuse you.
— 8th. Make no secret about Low Spirits to your friends but talk of them fully—they are always worse for dignified Concealment.
— 9th. Attend to the effects Tea and Coffee produce upon you.
— 10th. Compare your Lot with that of other people.
— 11th. Don’t expect too much from human life, a sorry business at the best.
— 12th. Avoid poetry, dramatic representations (except Comedy), Music, serious novels, melancholy sentimental people, and every thing likely to excite feeling or emotion not ending in active benevolence.
— 13th. Do good, & endeavor to please every body of every degree.
— 14th. Be as much as you can in the open air without fatigue.
— 15th. Make the room where you commonly sit gay & pleasant.
— 16th. Struggle by little and little against idleness.
— 17th. Don’t be too severe upon yourself, or underrate yourself—but do yourself Justice.
— 18th. Keep good blazing fires.
— 19th. Be firm and constant in the exercise of rational religion.
— 20th. Believe me.
very truly Yrs, Sydney Smith
----
^^1^^ - Georgiana Dorothy Howard, Countess of Carlisle was a British noblewoman.
^^2^^ - in support of item 4, [[Arnold Bennett]] had said:
>The proper, wise balancing of one's whole life may depend upon the feasibility of a cup of tea at an unusual hour.
:― from [[his|Arnold Bennett]] book //How to Live on 24 Hours a Day//
<a href="./resources/carpe diem or less.png" target="new"><img src="./resources/carpe diem or less.png" width="55%" height="55%" /></a>
<br><p>Carpe Diem (or less :)<p><br>
From an article titled [["How to read fewer books"|https://www.theschooloflife.com/thebookoflife/how-to-read-fewer-books/]] in [[The School of Life|https://www.theschooloflife.com/]]:
This exhaustive approach to reading does not make us particularly happy. We are drowning in books, we have no time ever to re-read one and we appear fated to a permanent sense of being under-read when compared with our peers and what the media has declared respectable.
In order to ease and simplify our lives, we might dare to ask a very old-fashioned question: what am I reading for? And this time, rather than answering ‘in order to know everything,’ we might parcel off a much more limited, focused and useful goal. We might – for example – decide that while society as a whole may be on a search for total knowledge, all that we really need and want to do is gather knowledge that is going to be useful to us as we lead our own lives. We might decide on a new mantra to guide our reading henceforth: we want to read in order to learn to be content. Nothing less – and nothing more.
With this new, far more targeted ambition in mind, much of the pressure to read constantly, copiously and randomly starts to fade. We suddenly have the same option that was once open to St Jerome; we might have only a dozen books on our shelves – and yet feel in no way intellectually undernourished or deprived.
Once we know that we are reading to be content, we won’t need to chase every book published this season. We can zero in on titles that best explain what we deem to be the constituent parts of contentment. So for example, we will need a few key books that explain our psyches to us, that teach us about how families work and how they might work better, that take us through how to find a job one can love and how to develop the courage to develop our opportunities. We’ll need some books that talk about friendship and love, sexuality and health. We’ll want books about how to travel, how to appreciate, how to be grateful and to how forgive. We’ll look for books that help us to stay calm, fight despair and diminish our disappointments. Finally, we’ll look for books that gently guide us to how to minimise regret and learn to die well.
With these goals in mind, we won’t need a boundless library, we won’t have to keep up frantically with publishing schedules. The more we understand what reading is for us, the more we can enjoy intimate relationships with a few works only. Our libraries can be simple. Instead of always broaching new material, re-reading might become crucial, the reinforcement of what we already know but tend so often to forget. The truly well-read person isn’t the one who has read a gargantuan number of books, it’s someone who has let themselves be shaped – deeply shaped in their capacity to live and die well – by a very few well-chosen ones.
"""
"""
(compare (and contrast :) to [[I want to have lots of books on my shelves because I know they are good, because I know they would amuse me, because I like to look at them, and because one day I might have a caprice to read them.]]).
(compare (and contrast :) to [[A personal library too big to get through in a lifetime isn’t a sign of failure or ignorance, but rather a badge of honor.]]).
Why keep a knowledge and learning organizing system, and criteria for what to keep:
* Is it ''Inspiring''? Is this something that could inspire me if it surfaced at some point in the future?
* Is it ''Useful''? Is this potentially a useful source, building block, or tool for future projects?
* Is it ''Personal''? Is this unique, personal, or hard-won knowledge worth revisiting over the years?
* Is it ''Easily lost''? Is this something that I'm unlikely to find in the future?
: -- from a video clip/overview titled [["How to take digital notes"|https://fortelabs.co/blog/teachable-workshop-how-to-take-digital-notes/]] by [[Tiago Forte]]
[knowledge management]
A guy got put in jail, and on his first day in the mess hall, he noticed that since the guards were very tough and strict, all prisoners kept very quiet.
//But,// once in a while a prisoner would whisper under his breath a number: "35", and the prisoners around him would quietly chuckle. Then another prisoner would whisper a different number, say, "87", and the prisoners around him would quietly laugh.
The new guy didn't understand what was going on, so when he got back to his cell, he asked his cellmate to explain what this number-whispering was all about.
The cellmate showed him a notebook full of jokes circulating throughout the prison, and explained that the prisoners were calling out jokes by the numbers during the meal.
The new guy studied the notebook, and at the next meal, whispered: 17. No one chuckled. So he tried another one: 56. And still no response from anyone. He was miffed, and back in the cell he asked his cellmate why no one found it funny.
The cellmate answered: you have to know how to tell a joke.
!!! Another version of this joke (about jokes :) is:
There is an old joke about a new prisoner at a POW camp. His first night in camp, he hears someone yell, “49!” and the other prisoners start laughing. Somebody else yells out “62!” followed by more laughter. The new guy asks his cellmate what it means. “We’ve heard every joke so often, that we’ve given them numbers.” “Can I try?” the new guy asks. “Sure.” He yells out “212!” and the place starts laughing hysterically. “I guess that’s a good one,” the new prisoner says. “Yeah, we’ve never heard that one before!” says his cellmate.
And as far as interpreting numbers goes ...:
This reminds me of a situation in Douglas Adams' excellent (and hilarious) book //The hitchhiker's Guide to the Galaxy//, where humanity built a supercomputer (named "Deep Thought") to answer the question "what is the meaning of life, the universe, and everything?"
The supercomputer worked on this question for seven and a half million years, and finally came up with the answer 42.
And since no one could figure out what the meaning of the answer was, they built an even larger supercomputer to figure out the meaning of the question...
[meaning] [context]
From [[her|Amanda Ripley]] op-ed titled [["I stopped reading the news. Is the problem me — or the product?"|https://www.washingtonpost.com/opinions/2022/07/08/how-to-fix-news-media/]]:
* Last month, new data from the Reuters Institute showed that the United States has one of the highest news-avoidance rates in the world. About 4 out of 10 Americans sometimes or often avoid contact with the news — a higher rate than at least 30 other countries. And consistently, across all countries, women are significantly more likely to avoid news than men. It wasn’t just me and my hypocrite journalist friends after all.
* Why are people avoiding the news? It’s repetitive and dispiriting, often of dubious credibility, and it leaves people feeling powerless, according to the survey.
* So maybe there is something wrong with the news. But what? A lot of people say the problem is bias. Journalists say the problem is the business model: Negativity is clicky. But I’ve started to think that both theories are missing the most important piece of the puzzle: the human factor.
* Today’s news, even high-quality print news, is not designed for humans. As [[Krista Tippett]], the journalist and host of the radio show and podcast “On Being,” puts it, “I don’t actually think we are equipped, physiologically or mentally, to be delivered catastrophic and confusing news and pictures, 24/7. We are analog creatures in a digital world.”
* When I distilled everything they told me, I found that there are three simple ingredients that are missing from the news as we know it.
** ''First'', we need hope to get up in the morning. Researchers have found that hope is associated with lower levels of depression, chronic pain, sleeplessness and cancer, among many other things. Hopelessness, by contrast, is linked to anxiety, depression, post-traumatic stress disorder and … death. “Hope is like water, (we have a biological need for it)” says David Bornstein, co-founder of the nonprofit Solutions Journalism Network. “(Analogously, with News,) You need to have something to believe in. If you’re in the restaurant business, you’re gonna give people water. Because you understand human biology. It’s weird that journalism has such a hard time understanding this. People need to have a sense of possibility.”
** ''Second'', humans need a sense of agency. “Agency” is not something most reporters think about, probably because, in their jobs, they have it. But feeling like you and your fellow humans can do something — even something small — is how we convert anger into action, frustration into invention. That self-efficacy is essential to any functioning democracy.
** ''Finally'', we need dignity. This is also not something most reporters think about, in my experience. Which is odd, because it is integral to understanding why people do what they do. What does dignity look like? Shamil Idriss, the head of Search for Common Ground, which works to prevent violence in 31 countries, explains it simply: “To me, it’s the feeling I have that I matter, that my life has some worth.” In journalism, treating people like they matter means, most importantly, listening to them.
* There is a way to communicate news — including very bad news — that leaves us better off as a result. A way to spark anger //and// action. Empathy alongside dignity. Hope alongside fear. There is another way, and it doesn’t lead to bankruptcy or puffery.
* Changing that may require journalists to accept that some of their own core beliefs are outdated. “The journalist’s theory of change is that the best way to avert catastrophe is to keep people focused on the potential for catastrophe 24/7,” Bornstein says. That used to work — kind of. Reporters could rigorously chronicle threats and corruption, and then sit back and let the accountability rain down. But that dynamic only works if the public is more unified and journalists are widely trusted.
* A lot of journalists, perhaps frustrated by their impotence, have responded by getting louder and more shrill. Which only causes more people to (yes, you guessed it) avoid the news.
* A better theory of change, Bornstein suggests, might be something like: “The world will get better when people understand problems, threats and challenges, //and// what their best options are to make progress.”
* There aren’t many major news outlets systematically creating news for humans yet, news including hope, agency and dignity. Maybe stories should include a brief explainer called “Why we wrote this,” treating readers like respected partners.
** It’s a kind of low-ego, high-curiosity journalism. (To the journalist,) It can feel uncomfortable.
** (Maybe the journalist shouldn't) try to extract the most chilling quote or the vivid, ironic anecdote. Maybe just asked deeper questions, without judgment. As a result, the News may feel less transactional, more human. I may also feel and be more informed.
(compare to what [[Alain de Botton]] wrote about the news: [[We immediately suppose that the new must also be the important. It isn't always.]].
And also [[There are two ways of looking at things: picking out what’s unique, and being attentive to what’s recurring. The news is based on the former, philosophy on the latter.]]).
How we spend our days is, of course, how we spend our lives. What we do with this hour, and that one, is what we are doing. A schedule defends from chaos and whim. It is a net for catching days. It is a scaffolding on which a worker can stand and labor with both hands at sections of time. A schedule is a mock-up of reason and order—willed, faked, and so brought into being; it is a peace and a haven set into the wreck of time; it is a lifeboat on which you find yourself, decades later, still living.”
: ― from [[her|Annie Dillard]] book //"The Writing Life"//
(see also what [[Cormac McCarthy]] said about [[the impact of the past on who we are|You think when you wake up in the mornin' yesterday don't count. But yesterday is all that does count. What else is there? Your life is made out of the days it’s made out of. Nothin' else.]]).
How will you go about finding that thing the nature of which is totally unknown to you?
How you choose to respond each moment to the movie^^1^^ of life determines how you see the next frame, and the next, and eventually how you feel when the movie ends.
----
^^1^^ I'm pretty sure [[Wilson Mizner]] did not think along the lines above when he said the following, but in a strange way it fits well:
> I've spent several years in Hollywood, and I still think the movie heroes are in the audience.
<<list-links "[tag{!!title}]">>
Nationality: American
Born: July 19, 1953
Read more: http://www.brainyquote.com/quotes/authors/h/howard_schultz.html
<<list-links "[tag{!!title}]">>
(1899-1981) was an American author, philosopher, theologian, educator, and civil rights leader
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
However vast the darkness, we must supply our own light.
Human-type creativity is different from the creativity of the biosphere, in that human creativity can form models of the world that say not only what will happen, but why. So an explanation, for example, is something that captures an aspect of the world that is unseen. So, explanations explain the seen in terms of the unseen, whereas biological knowledge, it's only what works.
That is what allows human-type knowledge to have this universal reach, whereas biological knowledge, although it has enormous reach is actually limited because of the type of knowledge it is.
: -- from his conversation with Chris Anderson (of TED fame) titled [["On the infinite reach of knowledge"|https://www.ted.com/talks/the_ted_interview_david_deutsch_on_the_infinite_reach_of_knowledge/transcript]]
Humanists believe that human beings produced the progressive advance of human society and also the ills that plague it. They believe that if the ills are to be alleviated, it is humanity that will have to do the job. They disbelieve in the influence of the supernatural on either the good or the bad of society, on either its ills or the alleviation of those ills.
''Anderson's Law of Causal Instinct:'' Humans are engineered to seek for laws, whether or not they're actually there.
''Anderson's Law of Skepticism:'' Most proposed laws, including this one, will probably turn out to be vacuous.
----
I agree with the first law (human nature); and therefore I'm not sure specifically about the application of second one to the first one, even though, in general, I agree with maintaining skepticism regarding most of our "current knowledge" since it often evolves, or get disproved.
Humans may crave absolute certainty; they may aspire to it; they may pretend, as partisans of certain religions do, to have attained it. But the history of science — by far the most successful claim to knowledge accessible to humans — teaches that the most we can hope for is successive improvement in our understanding, learning from our mistakes, an asymptotic approach to the Universe, but with the proviso that absolute certainty will always elude us.
Humility is the only lens through which great things can be seen (and learned)―and once we have seen them, humility is the only posture possible.
<<list-links "[tag{!!title}]">>
humor is the affectionate communication of insight.
I agree with the realistic Irishman who said he preferred to prophesy after the event.
<<comparequote "Niels Bohr" "It's very difficult to predict; especially the future." "predicting">>
In an [[interesting blog post|http://blog.kenperlin.com/?p=2739]], [[Ken Perlin|http://mrl.nyu.edu/~perlin/]] talks about the concept of a "programming literacy pipeline", analogous to a "(reading) literacy pipeline" - the process of moving a learner along from one level [of reading/books] to the next, from Dr. Seuss to Dostoevsky, and all points in between.
About reading as a child, Perlin writes:
> I already understood perfectly well, at the age of six, that what I was reading was exactly on the path to grown-up reading. I was reading the same language as the grown-ups, just in an early “learners” version. There was no sense that “Ten Apples Up on Top” was in some toy language. This was written English, fair and square — the same written language that my parents would read in the newspaper every morning — and I was learning to read it.
And he comes up with the following observation and possible evolution of programming and push for computing literacy:
>Until we come up with a suitable redefinition of what programming is for, until we embrace the utility of programming as a way for serious grown-up people to go about doing the serious things they want to do, without asking those people to pretend to be interested in becoming mathematicians or engineers, this sort of pipeline simply cannot be built for universal programming literacy.
"""
"""
This reminds me of what [[Alan Kay]] used to say (and I try doing in my teaching :) :
[[A powerful way to teach is to find ideas and representations that allow “beginners to act as intermediates”, that is, for learners to immediately start doing the actual activity in some real form.]]
I always think I'm right, but I don't think I'm always right.
Homo sum, humani nihil a me alienum puto.”
I am a man, I consider nothing that is human alien to me.
Sarah Bakewell notes in her lively new book, “Humanly Possible,” Terence wrote the line as a joke. It’s said by a busybody character after being asked why he cannot seem to keep his nose out of everybody else’s beeswax. This sly double meaning is what makes the line so fitting for the capacious tradition known as humanism that Bakewell writes about. On the one hand, the quote offers a high-minded philosophical sentiment; on the other, it’s a playful gag. Humanism, too, has always had to negotiate between noble ideals of humanity and the peculiarities of actual humans. Paradox and ambiguity aren’t to be rejected but embraced. “Dispute and contradiction, not veneration and obedience, are the essence of intellectual life,” Bakewell writes.
: -- from the book review [["The Tricky Thing With Humanism, This Book Implies, Is Humans"|https://www.nytimes.com/2023/03/29/books/review/humanly-possible-sarah-bakewell.html]] by Jennifer Szalai.
(see [[my mother|Sylvia Mark]]'s [[version of this|This is also fit for humans (or: this is on a human scale; or: this, too, is in the human realm.)]]).
[tolerance] [perspective] [compassion]
I am a time being. Do you know what a time being is? Well, if you give me a moment, I will tell you. A time being is someone who lives in time, and that means you, and me, and every one of us who is, or was, or ever will be.
:― from her book "A Tale for the Time Being"
I am always doing that which I cannot do, in order that I may learn how to do it.
I am always ready to learn although I do not always like being taught.
:{{imgquote}} I am an atheist, out and out. It took me a long time to say it. I've been an atheist for years and years, but somehow I felt it was intellectually unrespectable to say one was an atheist, because it assumed knowledge that one didn't have. Somehow, it was better to say one was a humanist or an agnostic. I finally decided that I'm a creature of emotion as well as of reason. Emotionally, I am an atheist. I don't have the evidence to prove that God doesn't exist, but I so strongly suspect he doesn't that I don't want to waste my time.
This quote reminds me of the story about an interview with Isaac Asimov who, as you can tell, was famously and openly an atheist, where he was asked what would he say if after he dies, he actually gets to see and talk to God. Asimov said he would ask God: why did you not make your presence more obvious and easier for us to find?
See also [[a slight variation as told by Isaac Asimov about Bertrand Russell|What if you died, and found yourself face to face with God?]].
But on the other hand: {{Coincidence is God's way of remaining anonymous.}}
BTW, Kurt Vonnegut had [[a different "burning question"|If I die – God forbid – I would like to go to heaven to ask somebody in charge up there, ‘Hey, what was the good news and what was the bad news?’]] to ask God.
Emotionally, I am an optimist. I don't have the evidence to prove that Goodness always prevails (except for the fact that we still exist (speaking from past experience :)), but I so strongly suspect that '[[things will turn out well in the end|Everything will be all right in the end. And if it's not all right then it's not yet the end.]]' that I don't want to waste my time looking for counter examples.
Paraphrasing [[Isaac Asimov on atheism|I am an atheist. I don't have the evidence to prove that God doesn't exist, but I so strongly suspect he doesn't that I don't want to waste my time.]]
But on the other hand: {{Coincidence is God's way of remaining anonymous.}}
[The protagonist and narrator, Dr. Vivian Bearing (who, if she had a middle name, it would have been "Over"), lies in her hospital bed, recovering from a 3^^rd^^ round of chemotherapy, treating her stage four metastatic ovarian cancer which destroys her body ("Insidious cancer, with pernicious side effects." [on second thought] "No, the treatment has pernicious side effects.")]
```
I am not in isolation because I have cancer. Because... I have a tumor the size of a grapefruit.
No... I am in isolation... because I am being treated for cancer.
My treatment imperils my health.
Herein lies the paradox.
```
and then she adds:
```
John Donne would revel in it.
I would revel in it,
if he wrote a poem about it.
My students would flounder in it...
because paradox is
too difficult to understand.
"Think of it as a puzzle..."
I would tell them, "an intellectual game."
Or I would have told them...
were it a game.
Which it is not.
```
: -- from [[Margaret Edson]]'s play Wit: [ext[(local) play transcript|resources/wit-script-transcript-emma-thompson.html]] (or [[on script-o-rama|http://www.script-o-rama.com/movie_scripts/w/wit-script-transcript-emma-thompson.html]]) of the [[movie with Emma Thompson|http://openlibrary.org/books/OL9394233M/Wit]].
I am not young enough to know everything.
Or as [[Thomas Pynchon]] soberly observed:
> at the earlier stages of life we think we know everything -- or to put it more usefully, we are often unaware of the scope and structure of our ignorance.
And [[Mark Twain]] said:
> When I was a boy of fourteen, my father was so ignorant I could hardly stand to have the old man around; but when I got to be twenty-one, I was astonished at how much the old man had learned in seven years.
(compare to [[John W. Gardner]]'s [[There's a myth that learning is for young people. But as the proverb says, "It's what you learn after you know it all that counts." The middle years are great, great learning years. Even the years past the middle years.]])
I am proud to call myself “pi-lingual” (meaning the sum of all my fractional languages is a bit more than 3, which is my lighthearted way of answering the question “How many languages do you speak?”), then how much prouder should Google Translate be, as it could call itself “bai-lingual” (bai being Mandarin for “100”). To a mere pi-lingual, bai-lingualism is most impressive.
: -- from [[his|Douglas Hofstadter]] article in the Atlantic [["The Shallowness of Google Translate"|https://www.theatlantic.com/technology/archive/2018/01/the-shallowness-of-google-translate/551570/]]
Also from that article, where [[Douglas Hofstadter]] describes his experiments with Google auto-translate:
> Indeed, what about this freshly coined phrase, “One swallow does not thirst quench” (alluding, of course, to, “One swallow does not a summer make”)? I couldn’t resist trying it out;
Since I know German, I tried that and got "Eine Schwalbe dürstet nicht". Hofstadter's French translation results were not less [["smashingly useless"|On The Shallowness of Google Translate]].
"""
I am waiting for a sentence to appear,
for a small thought to try on a jacket of language.
"""
: -- from his poem //Paperwork// (about a writer/poet waiting/looking for inspiration).
Paraphrased from C.S. Lewis (replacing religion/theology/Christianity with Spirituality):
The waking world is judged more real because it can thus contain the dreaming world: the dream world is judged less real because it cannot contain the waking one. For the same reason I am certain that in passing from the scientific point of view to the spiritual, I have passed from dream to waking. Spirituality can fit in science, art, morality, and all the spiritual endeavors. The scientific point of view cannot fit in any of these things, not even science itself. ''I believe in Spirituality as I believe that the Sun has risen not only because I see it but because by it I see everything else.''
To [[quote from Sam Harris about Spirituality|https://samharris.org/books/waking-up/]] in the sense used above:
Although such experiences of “self-transcendence” [and Spirituality] are generally thought about in religious terms, there is nothing, in principle, irrational about them. From both a scientific and a philosophical point of view, they represent a clearer understanding of the way things are.
[sunrise] [clarity]
I believe that mathematical reality lies outside us, that our function is to discover or observe it, and that the theorems which we prove, and which we describe grandiloquently as our "creations," are simply the notes of our observations.
From //A Mathematician's Apology// (London 1941).
(compare to [[Brian Martin]]'s take on [[the "solidity" of mathematics|Mathematical concepts, such as the number system, can be understood as chosen for their usefulness rather than their inherent correspondence with the nature of the universe. Mathematics can be considered a system of logic, but given that there are many possible logical systems, the choice of a particular system can be linked to its usefulness for human purposes.]]).
From his book //Archimedes to Hawking Laws of Science and the Great Minds Behind Them//:
Do you feel that we will have all the laws of nature in our hands in the next fifty years? Personally, I think that there will always be more laws for us to uncover. Isaac Asimov had the right idea about the future of knowledge:
>I believe that scientific knowledge has fractal properties; that no matter how much we learn, whatever is left, however small it may seem, is just as infinitely complex as the whole was to start with. That, I think, is the secret of the Universe.
[the end of physics]
I believe there is an answer to every question. This principle having been stated, the first question which we have a right to ask will be, ‘Why is there something rather than nothing?’
[[Gottfried Wilhelm Leibniz]] wrote this in 1714.
But as for an answer—well, three centuries on, the best we can say is, it’s not for lack of trying. The mystery of why the universe exists still intrigues and defies philosophers, theologians, scientists, and pretty much anyone who’s ever sprawled in a park and stared at the sky.
: -- from a [[Book Review: Schulz on Jim Holt’s Why Does the World Exist?|https://www.vulture.com/2012/07/kathryn-schulz-on-jim-holt-why-does-the-world-exist.html]]
[cosmology]
I believe we have it backward. We are asking what we can get out of a walk, rather than what a walk can get out of us. This might seem like a small distinction, a matter of semantics. But when we begin to think of walking in terms of the latter, we change the way we navigate and experience — literally and figuratively — the world around us.
“The purpose of such attentiveness (to your environment, as you walk and move around) is to gain intimacy, to rid yourself of assumption,” [[Barry Lopez|https://en.wikipedia.org/wiki/Barry_Lopez]] wrote in his essay “A Literature of Place.”
When I first read that line, I’ll be honest, I didn’t get it. What does intimacy have to do with assumption? And what does walking have to do with intimacy? And what does “assumption” mean?
I pulled out the dictionary. “Assumption” is a knot of a word, meaning both an act of taking on, such as a new job, or taking control. It also means you believe something to be such: “I assumed that was the case.” When you give the word “assumption” a kick, the shell cracks and you can see the yolk of possession. Ownership. Responsibility. Taking on. Anticipation. Judgment.
: -- From the NYT essay "The Next Walk You Take Could Change Your Life" by [[Francis Sanzaro|http://www.fsanzaro.com/books-by-francis-sanzaro.html]]
[physical activity] [walking] [nature]
''I Built Myself a Time Machine''
"""
I built myself a time machine
tomorrow afternoon,
then traveled back to yesterday,
and very, very soon
I’ll re-create my time machine
and travel once again
to yesterday where, like before,
I’ll wait two days and then
I’ll build myself a time machine.
I’m such a nincompoop. [fool]
I never should have made this thing.
I’m stuck inside a loop.
"""
[recursion]
The more one learns of this intricate interplay of soil, altitude, weather, and the living tissues of plant and insect (an intricacy that has its astonishing moments, as when sundew and butterwort eat the insects), the more the mystery deepens. Knowledge does not dispel mystery.
Scientists tell me that the alpine flora of the Scottish mountains is Arctic in origin — that these small scattered plants have outlived the Glacial period and are the only vegetable life in our country that is older than the Ice Age. But that doesn’t explain them. It only adds time to the equation and gives it a new dimension…
My imagination boggles at this. I can imagine the antiquity of rock, but the antiquity of a living flower — that is harder. It means that these toughs of the mountain top, with their angelic inflorescence and the devil in their roots, have had the cunning and the effrontery to cheat, not only a winter, but an Ice Age. The scientists have the humility to acknowledge that they don’t know how it has been done.
: -- from her book //The Living Mountain//
(see also what [[Richard Feynman]] had to say about [[the contribution of scientific knowledge to beauty|Scientific knowledge only adds to the appreciation of beauty; it does not subtract.]]).
You see, one thing is, I can live with doubt and uncertainty and not knowing. I think it's much more interesting to live not knowing than to have answers which might be wrong. I have approximate answers and possible beliefs and different degrees of certainty about different things, but I am not absolutely sure of anything and there are many things I do not know anything about, such as whether it means anything to ask 'why we are here?' and what the question might mean. I might think about it a little bit if and if I can't figure it out then I go into something else. But I don't have to know an answer. I don't have ... I don't feel frightened by not knowing things, by being lost in a mysterious universe without having any purpose, which is the way it really is as far as I can tell, possibly. It doesn't frighten me.
[[Captured on video|http://www.youtube.com/watch?v=E1RqTP5Unr4&feature=fvwrel]]
Compare to [[Jose Saramago]]'s [[take on not knowing|Don't be afraid, the darkness you're in is no greater than the darkness inside your own body, they are two darknesses separated by a skin, I bet you've never thought of that, you carry a darkness about with you all the time and that doesn't frighten you...my dear chap, you have to learn to live with the darkness outside just as you learned to live with the darkness inside.]]
Compare to [[Richard Hamming]]'s [[take on ambiguity|Most people like to believe something is or is not true. Great scientists tolerate ambiguity very well. They believe the theory enough to go ahead; they doubt it enough to notice the errors and faults so they can step forward and create the new replacement theory.]]
<<comparequote "G. K. Chesterton" "It is not bigotry to be certain we are right; but it is bigotry to be unable to imagine how we might possibly have gone wrong." "bigotry">>
I can't be in more than one place at the same time, but I can be in more than one time in the same place.
: -- from her book //This is getting old//, in the chapter titled "For the Time Being"^^*^^
"""
"""
^^*^^ "A Tale for the Time Being" is also the title of a wonderful book by [[Ruth Ozeki|http://www.ruthozeki.com/about-ruth/]]. Both titles come from Zen Master Eihei [[Dogen]]'s [[essay "The Time-Being (Uji)"|https://www.thezensite.com/ZenTeachings/Dogen_Teachings/Uji_Welch.htm]].
I cannot cause light; the most I can do is try to put myself in the path of its beam. It is possible, in deep space, to sail on solar wind. Light, be it particle or wave, has force: you can rig a giant sail and go. The secret of seeing is to sail on solar wind. Hone and spread your spirit till you yourself are a sail, whetted, translucent, broadside to the merest puff”
: -- from [[her|Annie Dillard]] book //"Pilgrim at Tinker Creek"//
[luck] [chance] [preparedness] [opportunity] [serendipity]
I didn’t ask for success, I asked for wonder.
[awe]
I do believe there is a kind of crisis going on (in mathematics)—but only because the entire history of mathematics is just one crisis after another. The foundations are always crumbling, and the barbarians are always at the gate.
: -- from [[his|Brian Hayes]] article [["Foolproof"|http://bit-player.org/wp-content/extras/bph-publications/AmSci-2007-01-Hayes-Foolproof.pdf]].
(compare it to what he said about [[foolproofness|Mathematical proof is foolproof, it seems, only in the absence of fools.]]).
I do not know what I may appear to the world; but to myself I seem to have been only like a boy playing on the seashore, and diverting myself in now and then finding a smoother pebble or a prettier shell than ordinary, whilst the great ocean of truth lay all undiscovered before me.
I do not know whether transmigration^^1^^ can be proved or maintained on the scientific level, but I know that it is an inspiring theory and full of poetic suggestions, and I am satisfied with this interpretation and do not seem to have any desire to go beyond it. To me, the idea of transmigration has a personal appeal, and as to its scientific and philosophical implications, I leave it to the study of the reader.
----
^^1^^ The idea of transmigration is this: After death, the soul migrates from one body to another, celestial, human, animal or vegetative.
And what Suzuki says about it:
>The idea of transmigration has a certain appeal to the imaginative mind if one is not too critical or scientific...
In his 1988 essay collection Infinite in All Directions, Dyson envisioned intelligence spreading through the entire universe, transforming it into a vast cosmic mind. "What will mind choose to do when it informs and controls the universe?" Dyson asked. We “cannot hope to answer" this question definitively, he suggested, because it is theological rather than scientific:
"I do not make any clear distinction between mind and God. God is what mind becomes when it has passed beyond the scale of our comprehension. God may be considered to be either a world-soul or a collection of world souls. We are the chief inlets of God on this planet at the present stage in his development. We may later grow with him as he grows, or we may be left behind."
: -- from an article titled [["What Would a Machine as Smart as God Want?"|https://blogs.scientificamerican.com/cross-check/what-would-a-machine-as-smart-as-god-want/]] in Scientific American by [[John Horgan]]
I do not seek to follow the footsteps of the men of old; I seek what they sought.
In [[Donald Knuth]]'s book [[Things a Computer Scientist Rarely Talks About|https://en.wikipedia.org/wiki/Things_a_Computer_Scientist_Rarely_Talks_About]] he quotes the following by the preacher Peter Gomez of Harvard:
> The Buddhists say, "Seek not to follow in the footsteps of the men of old; rather seek what they sought." To understand the dynamic aspect of scripture (which is relevant to Knuth's book/project [[3:16 Bible Texts Illuminated|https://www-cs-faculty.stanford.edu/~knuth/316.html]]), we must appreciate the fact that "what they sought" seeks us, and in fact, "what they sought" is apprehensible to us in terms and times that we can best understand.
See also what [[Cheri Huber]] says about [[The one doing the seeking is the one being sought|To open our eyes and our hearts is painful. There is a great deal of pain in seeing life as it truly is. And there is a great deal less suffering.]].
I don't know who discovered water, but it wasn't a fish.
The context of this:
> Someone said once, “We don’t know who discovered water but we are pretty sure it wasn’t a fish!” We are all in this position, being surrounded by some environment or element that blinds us totally; the message of the fish theme is a very important one, and just how to get through to people that way is quite a problem.
"""
"""
(see also [[David Foster Wallace]]'s [[What the hell is water?]]).
[familiarity] [habits] [environment]
"""
Why did we become blind?
I don't know, perhaps one day we'll find out.
Do you want me to tell you what I think?
Yes, do.
I don't think we did go blind, I think we are blind. Blind but seeing. Blind people who can see, but do not see.
"""
I don't want to end up simply having visited this world.
I don’t believe one ever knows people in their own surroundings; one only knows them away, divorced from all the little strings and cobwebs of habit.
: -- from //Letters of Vita Sackville-West to Virginia Woolf//
[observation]
From their book //The Nature of Space and Time//:
I don’t demand that a theory correspond to reality because I don’t know what (reality) is. . . . I take the positivist viewpoint that a physical theory is just a mathematical model and that it is meaningless to ask whether it corresponds to reality. All that one can ask is that its predictions should be in agreement with observations. . . . All I’m concerned with is that the theory should predict the results of measurements. . . .
From the book (and the [[accompanying video interviews|https://www.youtube.com/watch?v=5_bv7rDB5e8&list=PLzLGaX_JvmJoIGJFR_1M088pMz68qUtnc&index=3]] [[A Glorious Accident|https://en.wikipedia.org/wiki/A_Glorious_Accident]]) by Wim Kayzer, in his interview with [[Daniel Dennett]]:
"""
"""
* About [[We are such stuff as dreams are made on, and our little life is rounded with a sleep.]]:
** One thing puzzles me and also delights me in some ways is that I eventually put together a theory of the mind, which says that our minds are—if like—just as real as our dreams. But that is not real enough for some people. They say I'm denying that consciousness exists because I'm saying that there are illusory features to it. But illusions exist. What's wrong with the existence of illusions? Yes, I'm saying that the mind is as real as the illusions that we know to be real. In a way the mind is a sort of illusion itself. To some people that seems just absurd. They say, “An illusion to whom? Who is the subject, who is the victim of this illusion? There has got to be a self there to be fooled, so aren't we right back to Descartes?” My answer is no. We have to build up to this idea gradually, but we can make sense of the idea that a mind is “the brain's user illusion of itself.” That looks like a trick with mirrors, but that's what we should expect from a breakthrough here.
"""
"""
* Well, I think that a robot could definitely be conscious in exactly, unmetaphorically the same way we are. We are a sort of robot. We are organic robots created by a research-and-development process called natural selection, and also, of course, by a learning process in our own lifetimes. So, as a matter of principle, I am completely confident that there could be consciousness in an artificial device, a robot that lived its life, learned its experiences, and was made of entirely different material, say of silicon. I don't think we're likely to actually see that, for the same reason I don't think we're going to see anybody make a gall bladder out of atoms. I don't think anybody doubts that a gall bladder is just a fancy collection of atoms, but that's not the way to understand gall bladders, and it would be a pointless stunt to try to do it. In the same way, it would be a pointless stunt to try to make an artificial, conscious robot.
* We can understand consciousness. We can solve the mysteries and the puzzles theoretically, without actually creating the real thing. If we are only interested in the utility of such a robot, the answer is that there are already plenty of people to do those jobs. The robots that are useful aren't conscious. Robots are useful as mindless automatons, as artificial servants in factories and dangerous places. The last thing you want is for such a robot to be susceptible to boredom or anxiety or fear or hatred.
* So for practical purposes we shouldn't make a conscious robot. And if we did, it would have the same rights that you and I have, and it would be immoral of us to demand that it go into some dangerous or frustrating or boring place. We shouldn't put a conscious robot anyplace where we wouldn't put a human being. It would have all the rights that we do.
"""
"""
* I talk about what I call the “self” as the “center of narrative gravity.” The center of gravity of an object is not an atom, it is not a pearl, it is not a bit of stuff. It is a very important abstraction, but it is an abstraction. So a “self" is an abstract object that is definable in terms of a certain set of information. It follows, marvelously, that in principle you and I could immortal if the information could be preserved. This is scientifically respectable.
* If immorality is what you crave then you are much better off with the conception of yourself as fundamentally defined by information, rather than as a sort of immutable mind pearl, a soul of some sort. That is an incoherent idea. And it is also incoherent that it could matter. I mean, people are terribly concerned about, “Will anything matter anymore? Will there be any moral right or wrong if we have a materialistic, physical view of the mind and the brain?”
*It's preposterous to think that the way to defend against this is to declare that there is a little bit of intrinsically mattering stuff that by definition matters. That's just playing games. If what we are matters —and it does— it's not because there is this immaterial or material atom which makes all the difference and which is the sort of ultimate locus of all the mattering.
"""
"""
* Wim Kayzer asked Dennett: I thought that if I knew the final goal of my consciousness everything would come to a standstill. End of story. I would know why I had existed, why I would exist in the future, and the moment itself would lose all its appeal.
** Dennett's response: Nobody wants the story to end. But the story doesn't end. Suppose there's a book of your life in the library of all possible books, which tells the truest tale that can be told of your life from the moment of your birth to the moment of your death. But there are also countless books in that library which tell a perfectly true story of your life up to this moment and then diverge billions of ways for each future moment. One of those books is the book of your life. Which one? Who knows? It's impossible to tell until afterward which one tells the truest story of your life. Not because our lives are strictly undetermined—that's an open question. But even if they are determined, we have an epistemic horizon, and we can't—in principle, not just in practice—we can't see over that epistemic horizon. So that is why the future will always be open to us. That is a deep feature of the way the world is. I can appreciate the offensiveness of the idea of somebody being able to demonstrate what our future is going to be right down to the last syllable we utter. On the other hand, we're not terribly upset by the fact that science can now say to a moral certainty that you are not going to live to be a 150 years old. You are also not going to win the Olympic pole vault. That is just physically impossible for you at your age, as it is for me at my age. We don't mind that science tells us about many things that are strictly not in the cards for us, that are quite beyond the realm of physical possibility. There's still plenty of elbow room for awe, plenty of room for striving, for trying. There's plenty of reason to go out there and have big projects. There is absolutely no reason why one should think that this vision of the mind and of human agency implies that it becomes pointless to try to do anything.
"""
"""
* I suppose the universe existed for several billion years before there was any life in the universe, and at that time one can say in the most metaphorical and retrospective that anything mattered at all. We can be glad that the universe had the features it did, because eventually it made life on earth possible. But there was no foresight, no planning, no striving.
* Then what happened was that replicators, large molecules that were capable of replication, just happened to get sifted out of all the events that were going on. Eventually they became the precursors of DNA, so that eventually you have single-celled organisms. As soon you have replication of this sort going on, and since the conditions for replication are stringent—there are better conditions and worse conditions—one can begin to make a partial division of world states into those that are good and those that are bad for something, specifically for the replicative success of a particular group of molecules. You might say: “That's no big deal. One could also have talked about the conditions conducive to rusting of iron. What's the difference?” Is it a big difference? No. That's very important. The difference is tiny. Don't look for any great cliff anywhere in this story.
* But once this replication gets going, it creates more and more complex systems, which are self-replicating and which begin to take steps to preserve themselves. They begin to fend off their own deaths in very simple ways. Once they start distinguishing on their own—because, like little automatons, they have been designed to do this—between the beneficent and the maleficent states of their environment, we have the birth of purpose. Now we can begin to say things matter at least a little bit, because we can chart the fortunes of these beings. That's the birth of reasons, and we are simply the most recent entities that have reasons. We are different from just about all other entities in that we represent our reasons to ourselves.
"""
"""
* People tend to mistake the hypothesis of determinism or mechanism with a particular version of how the world might be set up. For instance, people are very susceptible to the following simple fallacy. They say: “If determinism is true, then I can't change the way I am.” No. If determinism is true, and if you can change the way you are, then you were determined to be able to change the way you are. And if you weren't able to change the way you are, then you were determined not to be able to change the way you are. But it has no implications at all for whether you can change. If determinism is true, then the weather is determined, in all of its changeability. It doesn't mean we're more like a clock than a cloud.
"""
"""
* I think that science is actually an important component of anything that can be called wisdom. Wisdom in the absence of scientific knowledge seems to me to be a commodity that is vanishing fast. I think it becomes harder and harder to be wise if you are scientifically ignorant.
Some of the best experiences I had in my professional career were times when I sat with students in class, one-on-one (or in small groups), and used the vehicle of Computing -- its wonders and its delights -- to care for another (or other) human being(s). I enjoyed getting to know people through Computing pursuits. You get a similar feeling when you play a sport with someone -- you know them in a different way. I felt it an honor to walk with them in their Computing struggles and to counsel them to see themselves differently. I loved watching people light up when they grasped an idea. It's one of the best feelings in the world.
: -- substituted Computing for Mathematics - from [[his|Francis Su]] book "//Mathematics for Human Flourishing//"
I find television very educating. Every time somebody turns on the set, I go into the other room and read a book.
[educational]
(compare to [[what Douglas Adams had to say about the media|Because the Internet is so new, we still don't really understand what it is. We mistake it for a type of publishing or broadcasting, because that's what we're used to.]])
(also compare to [[Gallagher|Leo Anthony Gallagher]]'s [[criticism of t.v. design|I wish there was a knob on the TV to turn up the intelligence. There's one called brightness, but it doesn't work.]]).
I follow the path of Zen because it makes me more likely to appreciate being alive while I //am// alive.
I go to seek a Great Perhaps.
I got what I needed instead of what I wanted and that's just about the best kind of luck you can have.
: -- from [[his|Cormac McCarthy]] book //"The Sunset Limited"//
But also:
> [[You never know what worse luck your bad luck has saved you from.]]
: -- from [[his|Cormac McCarthy]] book //"No Country for Old Men"//
I had a terrible education. I attended a school for emotionally disturbed teachers.
I have been given to understand how small this world is and how it torments itself with countless things it need not torment itself with if people could find within themselves a little more courage, a little more hope, a little more responsibility, a little more mutual understanding and love.
I have come to believe that a great teacher is a great artist and that there are as few as there are any other great artists. Teaching might even be the greatest of the arts since the medium is the human mind and spirit.
I have come to the personal conclusion that while all artists are not chess players, all chess players are artists.
[[He|Marcel Duchamp]] himself was a strong player (according to [[Garry Kasparov]] in his book //Deep Thinking//).
I have free will, but not of my own choice. I have never freely chosen to have free will.
"""
"""
[[May Swenson]] writes about having choices (or not), and whether one condition is better than another:
"""
Feel like A Bird
understand
he has no hand
instead A Wing
close-lapped
mysterious thing
[...]
hand better than A Wing?
to gather A Heap to count
to clasp A Mate?
or leap
lone-free and mount
on muffled shoulders
to span A Fate?
"""
: -- from [[her|May Swenson]] poem //Feel Like A Bird//
I have known a great many troubles in my life, some of which actually happened.
or maybe,
I have known a great many troubles in my life, most of which never happened.
And also in the same spirit, by [[Seneca]] :
> We suffer more from imagination than from reality.
Or, as [[another Stoic|Marcus Aurelius]] put it:
> Today I escaped anxiety. Or no, I discarded it, because it was within me, in my own perceptions—not outside.
[bad things] [drama in life] [worry] [stories in our heads]
I have learned from my mistakes, and I am sure I could repeat them exactly.
[experience]
I have long since learned, as a measure of elementary hygiene, to be on guard when anyone quotes Pascal.^^1^^.
----
[[Blaise Pascal]] was a French philosopher and mathematician. A very devout man, he put forward the idea that everyone should have faith in Jesus as the Lord and savior for mathematical reasons. The payoff for believing was life eternal and the payoff for not believing was hell, so the better situation was infinitely better than the worse. Even if there was only a small but finite chance it was true, the infinite payoff made it worth taking the chance.
I have made this letter longer than usual, only because I have not had the time to make it shorter.
[precision] [clarity] [thinking] [expression]
I have never developed indigestion from eating my words.
Or as [[Barbara Johnson]] had said: It never hurts your eyesight to look on the bright side of things.
I have nothing, I owe a great deal, and the rest I leave to the poor.
I have seen the moment of my greatness flicker,
And I have seen the eternal Footman hold my coat, and snicker,
And in short, I was afraid.
-- T.S. Elliot in his poem [[The Love Song of J. Alfred Prufrock|http://www.poetryfoundation.org/poetrymagazine/poems/detail/44212#poem]]
Also compare to [[The last shirt has no pockets.]]
"""
I have walked through many lives,
some of them my own,
and I am not who I was,
though some principle of being
abides, from which I struggle
not to stray.
"""
I intend to live forever - so far, so good.
I keep telling people ‘programming is understanding’ – the computer is a machine that tests if your ideas are correct. Once you understand a problem the program can usually be written pretty quickly. Understanding a problem can take years.
(compare to what [[William Zinsser]] had said [[about describing for understanding|Describing how a process works is valuable for two reasons. It forces you to make sure you know how it works. Then it forces you to take the reader through the same sequence of ideas and deductions that made the process clear to you.]]).
I know not with what weapons World War III will be fought, but World War IV will be fought with sticks and stones.
[World War 3] [World War 4] [folly]
(the definition/faith of an optimist?)
I know now, after fifty years, that the finding/losing, forgetting/remembering, leaving/returning, never stops. The whole of life is about another chance, and while we are alive, till the very end, there is always another chance.
: ― from [[her|Jeanette Winterson]] book //Why Be Happy When You Could Be Normal?//
and I hope she is right :)
Is this similar to what Oliver Goldsmith had said?
> Success consists of getting up just one more time than you fall.
[optimism]
"""
I know that He exists.
Somewhere — in Silence —
He has hid his rare life
From our gross eyes.
‘Tis an instant’s play.
‘Tis a fond Ambush —
Just to make Bliss
Earn her own surprise!
But — should the play
Prove piercing earnest —
Should the glee — glaze —
In Death’s — stiff — stare —
Would not the fun
Look too expensive!
Would not the jest —
Have crawled too far!
"""
I learned long ago never to say never, or anyhow hardly ever. And I hardly ever say last, ever since I published The Last Book of [[Earthsea|A glimpse into the writing approach of Ursula K. Le Guin]] and then discovered it was the fourth book of six.
Never and last are closing words. Having spent a good deal of my life trying to open closed doors and windows, I have no intention of going around slamming them shut now, just because I’m 86.
As I see it, getting old gives me the opportunity to go through another door, into another place.
Old age is quite a different place from what people who don’t live there think it is or say it is or want it to be. Here, what you want doesn’t count as much as it used to. Energy, stamina, memory, any of them may suddenly fail and let you down — not because you let it happen, but because you can’t prevent it. Where there’s a will, here, there isn’t always a way. Doors do shut; windows close. No hype, no vanity or pretense, no resolution can keep them open.
In fact, I wonder if a continuous strenuous effort to keep them open may prevent the compensatory thinning of the fabric of the everyday, the weakening of all walls and barriers, that increasingly admits shadows, gleams, intimations, glimpses of a larger habitation, a vaster landscape...
: -- from her blogpost (2015 archive) "104. A Trip South"
[getting old] [vistas] [perspectives] [growing old]
[[Donald Knuth]] on learning:
>… I learned that the absolute best way to find out what you don’t understand is to try to express something in your own words. If I had been operating only in input mode, looking at other translations [i.e., reading] but not actually trying to output the thoughts they expressed [i.e., writing/translating], I would never have come to grips with the many shades of meaning that lurk just below the surface.
>In fact, I would never have realized that such shades of meaning even exist, if I had just been inputting. The exercise of producing output, trying to make a good translation by yourself, is a tremendous help to your education.
:-- from his book [[Things a Computer Scientist Rarely Talks About|https://en.wikipedia.org/wiki/Things_a_Computer_Scientist_Rarely_Talks_About]] (and the [[recorded lecture notes given at MIT|https://player.fm/series/donald-knuth-lectures-on-things-a-computer-scientist-rarely-talks-about]]), where he talks about his other book/project [[3:16 Bible Texts Illuminated|https://www-cs-faculty.stanford.edu/~knuth/316.html]]
I like a teacher who gives you something to take home to think about besides homework.
I like being near the top of a mountain. One can’t get lost there.
<<comparequote "Robert Pirsig" "The only Zen you find on the tops of mountains is the Zen you bring up there." "mountains and states of mind">>
I like cooking with wine. I sometimes even put it in the food
I like long walks, especially when they are taken by people who annoy me.
(and the longer, the better? :)
I like nonsense, it wakes up the brain cells.
I look to the future because that's where I'm going to spend the rest of my life.
[optimism]
I may not have gone where I intended to go, but I think I have ended up where I needed to be.
"""
I meditate because evolution gave me a big brain, but it didn't come with an instruction manual.
I meditate because life is too short and sitting slows it down.
I meditate because life is too long and I need an occasional break.
I meditate because it's such a relief to spend time ignoring myself.
I meditate because I'm building myself a bigger and better perspective, and occasionally I need to add a new window.
"""
: -- from [[his blog at inquiringmind.com|https://www.inquiringmind.com/article/2301_50_nisker_why-i-meditate/]]
I must say a word about fear. It is life's only true opponent. Only fear can defeat life. It is a clever, treacherous adversary, how well I know. It has no decency, respects no law or convention, shows no mercy. It goes for your weakest spot, which it finds with unnerving ease. It begins in your mind, always ... so you must fight hard to express it. You must fight hard to shine the light of words upon it. Because if you don't, if your fear becomes a wordless darkness that you avoid, perhaps even manage to forget, you open yourself to further attacks of fear because you never truly fought the opponent who defeated you.
: ― from his|Yann Martel]] book //"Life of Pi"//
[courage]
I never came across one of Laplace's "Thus it plainly appears"
without feeling sure that I had hours of hard work before me to
fill up the chasm and find out how it plainly appears.
Nathanial Bodwitch, 1838
I never desire to converse with a man who has written more than he has read.
(Compare with [[Jorge Luis Borges]]'s [[take on reading vs. writing|You are not what you write, but what you have read.]]).
(Compare with [[an episode from the series "The Crown"|https://www.imdb.com/title/tt5170842/characters/nm0040586]]: Queen Marry is old and sick (but as sharp as a knife; she says: don't ask me how I am. It's all anyone ever does. Forget death by lung disease, it's death by bad conversation.)
I never predict, I just look out the window and see what's visible - but not yet seen.
(compared to [[Niels Bohr|It's very difficult to predict; especially the future.]])
But as [[Colin Blakemore|https://www.edge.org/memberbio/colin__blakemore]]'s "Second Law" states:
>The only form of intelligence that really matters is the capacity to predict.
I often feel sorry for people who don't read good books; they are missing a chance to lead an extra life.
I quote others only in order the better to express myself.
I recently started teaching. Teaching keeps you young. Actually, I was younger before I started teaching... but you know what I mean...
We are frequently told that greed for endless increase of material goods is natural and universal—as is greed for endless life. We are all supposed to agree that you can’t be too rich or live too long.
The desire to live is certainly natural and universal, since it’s the basic directive of living creatures: once born, our job and our desire is to try to stay alive.
But is that the same as a desire to stay alive forever, to be immortal? Or is it just that we can’t imagine not being, so we invent an endless existence called immortality?
Knowing that everything on earth has an end, we know the afterlife can’t be on earth, so it has to be somewhere else—a totally other place where the living can’t come and where nothing can ever change. To me, the imagery of the various afterlives and underworlds, the heavens and hells, appears marvelous and powerful, but I can’t believe in any of them except as I “believe” in any imaginative creation as a hint, an indication, a sign of something more than can be said or shown. The idea of individual immortality, an endless ego-existence, is more dreadful to me than the idea of letting go the self in death to rejoin shared, eternal being. I see life as a shared gift, received from others and passed on to others, and living and dying as one process, in which lies both our suffering and our reward. Without mortality to purchase it, how can we have the consciousness of eternity? I think the price is worth paying.
(compare to [[E. M. Forster]]'s evocative image on [[the journey from birth to death|We move between two darknesses. The two entities who might enlighten us, the baby and the corpse, cannot do so.]]).
The old man smiled. 'I shall not die of a cold, my son. I shall die of having lived'.
:― from [[her|Willa Cather]] book //Death Comes for the Archbishop//
I suppose when you get down to it, everything is always once in a lifetime. We might as well act like it.^^1^^
I saw my first opera this past year: La Traviata, starring [[Nuccia Focile|https://en.wikipedia.org/wiki/Nuccia_Focile]] in the lead role. The program featured an interview with her, and the interviewer writes, “It's those unexpected moments that blindside a singer emotionally, Focile feels. In performance different phrasing of a word can suddenly take the involved singer by surprise and make her gulp or blink away tears.” Focile seems to think of these moments as hazards, saying, “I must use my technical base to approach certain phrases, because the emotion is so great that I get involved too much.” As a professional, she wants to sing consistently. But as a human, the fine attention to and perception of the tiny uniquenesses from night to night, the cracks in technique where we get involved, get taken by surprise, gulp, feel things freshly again—these are the signs we're alive. And our means of staying so.
: -- in his book //The Most Human Human//
[[He|Brian Christian]] also wrote:
[[No choice recurs. We may get similar choices again, but never that exact one. Hesitation—inaction—is just as irrevocable as action. What the motorist, locked on the one-way road, is to space, we are to the fourth dimension: we truly pass this way but once.]]
"""
"""
(see also what [[Li-Young Lee]] wrote about [[uniqueness|Falling: The Code - poem by Li-Young Lee]]).
----
^^1^^ and [[my|Haggai Mark]] addition: Live like YOLO (You Only Live Once), as long as you are careful not to burn the wrong bridges, especially not the ones you may want to cross in the future :)
[uniqueness] [singularity]
I take toleration to be a part of religion. I do not know which I would sacrifice; I would keep them both: it is not necessary that I should sacrifice either.
I teach when I'm inspired, and I (try to) see to it that I'm inspired at eight o'clock every morning.
(paraphrasing [[Peter De Vries]] who said:
>I write when I'm inspired, and I see to it that I'm inspired at nine o'clock every morning.
""""
I used to be interested in mountains.
They moved at a speed I could deal with. They waited for me to catch up.
[...]
The ocean is like mountains, just much faster.
"""
From the movie "The Kominsky Method", Norman Newlander (Alan Arkin) says, “I wake up each morning and my first thought is, ‘What part of me isn’t working?’” (or What part of me is in pain today? :-\ )
“What then? Are we only to buy the books that we read? The question has merely to be thus bluntly put, and it answers itself. All impassioned bookmen, except a few who devote their whole lives to reading, have rows of books on their shelves which they have never read, and which they never will read. I know that I have hundreds such.
My eye rests on the works of Berkeley in three volumes, with a preface by the Right Honourable Arthur James Balfour. I cannot conceive the circumstances under which I shall ever read Berkeley; but I do not regret having bought him in a good edition, and I would buy him again if I had him not; ''for when I look at him some of his virtue passes into me; I am the better for him. A certain aroma of philosophy informs my soul, and I am less crude than I should otherwise be. This is not fancy, but fact.''
[…..]
"Taking Berkeley simply as an instance, I will utilise him a little further. I ought to have read Berkeley, you say; just as I ought to have read Spenser, Ben Jonson, George Eliot, Victor Hugo. Not at all. There is no ‘ought’ about it. If the mass of obtainable first-class literature were, as it was perhaps a century ago, not too large to be assimilated by a man of ordinary limited leisure //in// his leisure and during the first half of his life, then possibly there might be an ‘ought’ about it.
But the mass has grown unmanageable, even by those robust professional readers who can ‘grapple with whole libraries.’ And I am not a professional reader. I am a writer, just as I might be a hotel-keeper, a solicitor, a doctor, a grocer, or an earthenware manufacturer. I read in my scanty spare time, and I don’t read in all my spare time, either. I have other distractions. I read what I feel inclined to read, and I am conscious of no duty to finish a book that I don’t care to finish. I read in my leisure, not from a sense of duty, not to improve myself, but solely because it gives me pleasure to read. Sometimes it takes me a month to get through one book. I expect my case is quite an average case.
But am I going to fetter my buying to my reading? Not exactly! ''I want to have lots of books on my shelves because I know they are good, because I know they would amuse me, because I like to look at them, and because one day I might have a caprice to read them. (Berkeley, even thy turn may come!) In short, I want them because I want them.''
And shall I be deterred from possessing them by the fear of some sequestered and singular person, some person who has read vastly but who doesn’t know the difference between a J.S. Muria cigar and an R.P. Muria, strolling in and bullying me with the dreadful query: ‘Sir, do you read your books?”
: ― from his book //Mental Efficiency//.
(see also [[Kevin Mims]]'s take on [[big libraries|A personal library too big to get through in a lifetime isn’t a sign of failure or ignorance, but rather a badge of honor.]]. And [[Nassim Taleb]]'s [[take on it|A personal library should contain as much of what you do not know as your financial means, mortgage rates and the currently tight real-estate market allow you to put there.]]).
<<comparequote "Kevin Mims" "The sight of a book you’ve read can remind you of the many things you’ve already learned. The sight of a book you haven’t read can remind you that there are many things you’ve yet to learn. And the sight of a partially read book can remind you that reading is an activity that you hope never to come to the end of." "the effect of books">>
(compare (and contrast :) to [[How to read fewer books: we want to read in order to learn to be content.]])
I want to write poems that are natural, luminous, deep, spare. I dream of an art so transparent that you can look through and see the world.
and [[I|Haggai Mark]] am thinking:
Could it also be the desire/aspiration of modelers and modeling and simulation?
Sure, but as George Box and Norman Draper in their book [[Response surface methodology|http://en.wikipedia.org/wiki/Response_surface_methodology]] wrote:
> essentially, all models are wrong, but some are useful.
and as [[Alfred Korzybski]] said: [[The map is not the territory.]]
“I was a single parent for a long time, which I think, for men, makes them feminists.
One of the boxes you have to fill in on a death certificate is ‘Usual occupation,’ and for years, I would often have a son or daughter or a surviving husband say, ‘She was just a housewife.’ And I can remember thinking: You do it for a week and come back and tell me ‘just a.’ Because the effort to minimize the hardest work I’ve ever done was offensive. I can only imagine what it would mean to a woman who had done it all her life.
All the women in my life have been powerful, powerful women with strong medicine—dangerous people. I just don’t see them in any way, shape, or form as having ever traded on victim status.”
I was just thinking how strange life is, full of inexplicable mystery; you know, like anything else.
The protagonist to the NYC cab driver in the Woody Allen movie "Anything Else".
As we practiced (singing in the school choir) I was surprised to find out that harmonizing required you to sing a completely different tune from what other people were singling. You had your part and they had theirs.
: -- from his book //Things I Overheard While Talking to Myself//
[role] [responsibility] [collaboration] [cooperation]
Alright, here goes. I'm old. What that means is that I've survived (so far) and a lot of people I've known and loved did not.
[...]
I wish I could say you get used to people dying. I never did. I don't want to. It tears a hole through me whenever somebody I love dies, no matter the circumstances. But I don't want it to "not matter". I don't want it to be something that just passes. My scars are a testament to the love and the relationship that I had for and with that person. And if the scar is deep, so was the love. So be it. Scars are a testament to life. Scars are a testament that I can love deeply and live deeply and be cut, or even gouged, and that I can heal and continue to live and continue to love. And [sometimes; maybe] the scar tissue is stronger than the original flesh ever was. Scars are a testament to life. Scars are only ugly to people who can't see.
As for grief, you'll find it comes in waves. When the ship is first wrecked, you're drowning, with wreckage all around you. Everything floating around you reminds you of the beauty and the magnificence of the ship that was, and is no more. And all you can do is float. You find some piece of the wreckage and you hang on for a while. Maybe it's some physical thing. Maybe it's a happy memory or a photograph. Maybe it's a person who is also floating. For a while, all you can do is float. Stay alive.
In the beginning, the waves are 100 feet tall and crash over you without mercy. They come 10 seconds apart and don't even give you time to catch your breath. All you can do is hang on and float. After a while, maybe weeks, maybe months, you'll find the waves are still 100 feet tall, but they come further apart. When they come, they still crash all over you and wipe you out. But in between, you can breathe, you can function. You never know what's going to trigger the grief. It might be a song, a picture, a street intersection, the smell of a cup of coffee. It can be just about anything...and the wave comes crashing. But in between waves, there is life.
Somewhere down the line, and it's different for everybody, you find that the waves are only 80 feet tall. Or 50 feet tall. And while they still come, they come further apart. You can see them coming. An anniversary, a birthday, or Christmas, or landing at O'Hare. You can see it coming, for the most part, and prepare yourself. And when it washes over you, you know that somehow you will, again, come out the other side. Soaking wet, sputtering, still hanging on to some tiny piece of the wreckage, but you'll come out.
Take it from an old person. The waves never stop coming, and somehow you don't really want them to. But you learn that you'll survive them. And other waves will come. And you'll survive them too. If you're lucky, you'll have lots of scars from lots of loves. And lots of shipwrecks. [or, may you have many scars from many loves and many shipwrecks].
: -- anonymous (but tracked the source (GSnow) on Reddit).
I wish there was a knob (or setting) on the TV to turn up the intelligence. There's one called brightness, but it doesn't work.
[media] [television] [t.v.]
<html>
<table>
<tr>
<td width="50%">
<a href="./resources/tv brightness digital.png" target="new"><img src="./resources/tv brightness digital.png" width="100%" height="100%" /></a>
</td>
<td width="50%">
<a href="./resources/tv brightness analog.png" target="new"><img src="./resources/tv brightness analog.png" width="100%" height="100%" /></a>
</td>
</tr>
</table>
</html>
(compare to [[Groucho Marx]]'s take on [[television's added value|I find television very educating. Every time somebody turns on the set, I go into the other room and read a book.]])
And Frank Lloyd Wright commented:
> Television is a chewing gum for the eyes.
I won't for a minute believe that love is blind -- indeed, it gives clearness without sharpness, and surely that is the best light in which to look at anything.
I would gladly go back and travel the road not taken, if I knew at the end of it, I'd find the same set of grandkids (or children, for that matter).
compare to [[Robert Brault]]'s own:
I remember well the road I took -- and the friends I traveled with. Did we ever get to where we were going? That I don't recall.
I would not waste my life in friction when it could be turned into momentum.
I think the word ‘mystery,’ this notion of the limits of your own knowledge, this idea of an open space — that was something scary you didn’t want to go towards. What I find in very wise people [whom I interview], and even at the heart of things like where religious people are in the most fruitful dialogue with science or other faiths is that these are people who really honor mystery. Ten years ago I don’t think I would have said that such a big piece [of my own experience] is a delight in mystery…it’s very real for me and it’s so much more expansive than it was 10 years ago. We are so animated by things we can’t pin down and understand.
I'd be a pessimist but it would never work.
I'd like to think that we are sold a map that says if you behave yourself when you grow up and you go to this school and you get these grades and then you go to this college then you can have this career in this life. I've always believed that we sell these maps because they're easy to print but what we really ought to be selling is a compass and that's so you figure out how to attune yourself to what is true North to you.
: -- in [[his|Chase Jarvis]] [[conversation|https://www.youtube.com/watch?v=BVvt2r408cs]] with Angela Duckworth (of [[Grit fame|https://www.ted.com/talks/angela_lee_duckworth_grit_the_power_of_passion_and_perseverance?language=en]])
I'll understand quickly, if you explain slowly.
[[Alan Alda]] played a doctor in the TV series M*A*S*H, but here is what he had to say at the commencement speech to graduating doctors at Columbia University:
I'm certainly not a doctor. In the first place, I'm not a great fan of blood. I don't mind people having it, I just don't enjoy seeing them wear it.
I was unqualified to talk to [the graduating young doctors] about medicine. But I was an expert in one area of medicine: I had been a patient. This was an expertise from which I could speak to young doctors from the heart.
My knowledge of anatomy resides in the clear understanding that the hipbone is connected to the legbone^^1^^.
[...]
But there is one more thing you can learn about the body that only a nondoctor would tell you:
''The head bone is connected to the heart bone -- don't let them come apart.''
"If I tell you where it hurts, can you hear in my voice where I ache? I show you my body, but I bring you my person."
(compare to the style of [[Woody Allen]]:
> I'm not afraid of death; I just don't want to be there when it happens.
----
^^1^^ - Alda is incorrectly (and on purpose? :) quoting from the children's song [[Dem Bones|https://www.songsforteaching.com/folk/dembones.php]]
I'm just capable of entertaining the fantastic idea that, in certain circumstances, //Homo sapiens// might actually be capable of thinking. It must be worth a go, since we've tried everything else.
: ― from [[his|Terry Pratchett]] Collected Non-Fiction "A Slip of the Keyboard"
I'm less interested in why we're here. I'm wholly devoted to while we're here.
I'm not afraid of death; I just don't want to be there when it happens.
To which [[Irvin Yalom]] responds (in his book "//Staring at the Suun"//:
> Epicurus posits that death is nothing to us, because the soul is mortal and is dispersed at death. What is dispersed does not perceive. and anything not perceived is nothing to us. In other words: where I am, death is not; where death is, I am not. Therefore, Epicurus held, "why fear death when we can never perceive it?"
>
> Epicurus's position is the ultimate counter to Woody Allen's quip [...] Epicurus is saying that indeed we won't be there, that we won't know when it happens because death and "I" can never coexist. Because we are dead, we don't know that we are dead, and, in that case, what is there to fear?
"""
"""
Compare to [[Charles Munger]]'s [[All I want to know is where I'm going to die so I'll never go there.]]
Also compare to [[Peter De Vries]]'s:
>The only thing that keeps me from killing myself is the will to live.
And in a similar style, [[Alan Alda]] had said:
>[[I'm certainly not a doctor. In the first place, I'm not a great fan of blood. I don't mind people having it, I just don't enjoy seeing them wear it.]]
People often ask questions like, "How many languages do you speak?" This naïvely black-and-white vision of things makes me uncomfortable so I always deflect the question with hedges such as, “Well, I've studies about twelve” or “It depends on what you mean by 'speak'” or “Do you mean now, or do you mean at some point in my life?”
Sometimes I even reply, “I speak exactly π languages”, explaining that if you took all the languages I've ever studied and for each one estimated the fraction of native-level mastery that I have ever attained in it (generously awarding the fraction at my lifetime peak rather than its value right now), and then summed all those fractions up, you might get a result that was a little over 3 (counting English as 1, of course). And so I say π.
It's a cute joke, but just between you and me, π is probably an overestimate. Maybe e would be closer — but don't tell anyone! These things are extraordinarily blurry.
I don't have a solution to the mind-brain problem but I have found a way of thinking about it that makes it less tantalizing, less frustratingly hopeless to wrestle with. If Wittgenstein is right about philosophy as therapy then I have hit upon a treatment that works for me. It doesn't involve any startlingly original insights, at least none that I've ever had.
I've just taken stock of other people's ideas, turned them over, stuck them together this way and that and built myself a conceptual deck chair on which to lounge and watch the world go by without being bothered to distraction by the mind-brain problem.
This shift is not so much an intellectual step forward as a sense of achieving an intuitive grasp, a visceral understanding, even, of ideas I could already see the logic of.
:: -- from his book "The Darker the Night, the Brighter the Stars"
This, I think, beautifully captures a shift in his state of mind, and acceptance that is not due to resignation, but to an intuitive perception of a truth, resulting, maybe, not just in peace of mind, but also in some clarity.
I’ll be more enthusiastic about encouraging thinking outside the box when there’s evidence of any thinking going on inside it.
I’ll never know everything. My life would be a lot worse if there was nothing I knew the answers about, //and// if there was nothing I //didn’t// know the answers about.
I’m not afraid of being dead. At that point, there’s no consciousness. You’re out of the woods. It’s the lead-up to dying that I’m afraid of. Falling apart, being diminished. Not being all there.
:-- from his article in The New Yorker [["A Father's Last Odyssey"|https://www.newyorker.com/magazine/2017/04/24/a-father-and-sons-final-odyssey]].
I’ve been turning over in my mind the question of nostalgia, and whether I suffer from it. I certainly don’t get soggy at the memory of some childhood knickknack; nor do I want to deceive myself sentimentally about something that wasn’t even true at the time—love of the old school, and so on. But if nostalgia means the powerful recollection of strong emotions—and a regret that such feelings are no longer present in our lives—then I plead guilty.
: ― in //The Sense of an Ending//
<<list-links "[tag{!!title}]">>
''If—''
"""
If you can keep your head when all about you
Are losing theirs and blaming it on you;
If you can trust yourself when all men doubt you,
But make allowance for their doubting too;
If you can wait and not be tired by waiting,
Or, being lied about, don’t deal in lies,
Or, being hated, don’t give way to hating,
And yet don’t look too good, nor talk too wise;
If you can dream—and not make dreams your master;
If you can think—and not make thoughts your aim;
If you can meet with triumph and disaster
And treat those two impostors just the same;
If you can bear to hear the truth you’ve spoken
Twisted by knaves to make a trap for fools,
Or watch the things you gave your life to broken,
And stoop and build ’em up with wornout tools;
If you can make one heap of all your winnings
And risk it on one turn of pitch-and-toss,
And lose, and start again at your beginnings
And never breathe a word about your loss;
If you can force your heart and nerve and sinew
To serve your turn long after they are gone,
And so hold on when there is nothing in you
Except the Will which says to them: “Hold on”;
If you can talk with crowds and keep your virtue,
Or walk with kings—nor lose the common touch;
If neither foes nor loving friends can hurt you;
If all men count with you, but none too much;
If you can fill the unforgiving minute
With sixty seconds’ worth of distance run—
Yours is the Earth and everything that’s in it,
And—which is more—you’ll be a Man, my son!
"""
(compare to what [[Jack Kornfield]] had to say about [[equanimity and "bearing it"|If you can sit quietly after difficult news, if in financial downturns you remain perfectly calm, if you can see your neighbors travel to fantastic places without a twinge of jealousy, if you can happily eat whatever is put on your plate and fall asleep after a day of running around without a drink or a pill, if you can always find contentment just where you are, you are probably a dog.]]).
If a computer simulation of a random process agrees (to some acceptable degree) with a theoretical result, then I think one's confidence in both approaches is enhanced. Such an agreement doesn't, of course, prove that either result is correct, but surely one would then have to believe that a remarkable coincidence had instead occurred.
And:
There is an interesting feature to doing computer simulations that I have noticed, after decades of writing computer codes in different languages to implement them. Problems that are hard to do theoretically may require only an easy simulation; the converse may also be true, that is, a problem easy to analyze theoretically may require a complicated simulation code.
If a fish is the movement of water embodied, given shape, then cat is a diagram and pattern of subtle air.
: -- in her book //Particularly Cats//
(and [[Ursula K. Le Guin]] said about them:
> Cats are intensely opportunistic, practical anarchists.
)
A (Irish-inspired), Jewish-Polish Koan:
If a man who can’t count finds a four leaf clover, is he lucky?
Reminds me of [[Niels Bohr]]'s [[quip about the horseshoe|Better safe than sorry?]].
If [applying] knowledge can create problems, it is not through [choosing] ignorance that we can solve them.
[[Every computer program is a model, hatched in the mind, of a real or mental process...]]
The source of the exhilaration associated with computer programming is the continual unfolding
within the mind and on the computer of mechanisms expressed as programs and the explosion of
perception they generate. __If art interprets our dreams, the computer executes them in the guise of
programs!__
If by "freewill" you mean the freedom to do what you desire, then yes, humans have free will. But if by "free will" you mean the freedom to choose what to desire, then no, humans have no free will.
- from his book //"21 Lessons for the 21^^st^^ Century"//
If debugging is the process of removing software bugs, then programming must be the process of putting them in.
Or as [[I|Haggai Mark]] sometimes tell my students:
> debugging (finding bugs/glitches in your code) is part of life as a coder. It’s like being a detective in a crime movie, where you are also the criminal :)
If humanity is of nature, then so are our inventions.
my interpretation: we (and all humans) are part of nature -- part of what is, including all of our inventions, both physical (e.g., poetry, but also war) and mental (e.g., stories, excuses, encouragements, accusations).
הוּא הָיָה אוֹמֵר, אִם אֵין אֲנִי לִי, מִי לִי. וּכְשֶׁאֲנִי לְעַצְמִי, מָה אֲנִי. וְאִם לֹא עַכְשָׁיו, אֵימָתָי:
(Im ein ani li, mi li, ukshe-ani le-atzmi, mah ani. Ve-im lo achshav, eimatai)
He [Rabbi Hillel/Hilel, or Hillel the Elder] used to say: If I am not for me, who will be for me? And when I am for myself alone, what am I? And if not now, then when?
Pirkei Avot 1:14
[relationship] [compassion]
Or as [[Martin Buber]] put it (in his book //"I and Thou"//):
> [[Without It, man cannot live. But he who lives with It alone is not a man.]]^^1^^
----
^^1^^ //"I and Thou"// argues that within this elementally networked reality there are two basic modes of existence: the I-It, and the I-Thou. These two stances make up our basic ‘twofold attitude’. In the I-It mode, an ‘Ego’ approaches another as an object separate from itself. This type of engagement is driven by a sort of instrumentalism; the object is engaged primarily as something to be known or used, and its nature is always mediated through the subject’s own self-regard. From the I-It stance, we don’t engage with things in their entirety. Instead, we engage with a web of distinct and isolated qualities notable for how they are useful to us. Buber regarded this kind of self-centred outlook – typified, in his view, by proto-existentialists such as Kierkegaard and Nietzsche – as a grave error.
The truth is, we know so little about life, we don’t really know what the good news is and what the bad news is.
And if I die – God forbid – I would like to go to heaven to ask somebody in charge up there, ‘Hey, what was the good news and what was the bad news?’
Compare to [[Usually, you know whether you had made the right decision only after the fact/action; but sometimes not even then.]]
BTW, Asimov had [[a different "burning question"|I am an atheist. I don't have the evidence to prove that God doesn't exist, but I so strongly suspect he doesn't that I don't want to waste my time.]] to ask God.
Vonnegut also said (in a [[blog entry about artists on music|https://www.brainpickings.org/2016/03/15/writers-on-music/]] at ~BrainPickings):
<<<
"""
If I should ever die, God forbid, let this be my epitaph:
THE ONLY PROOF HE NEEDED
FOR THE EXISTENCE OF GOD
WAS MUSIC
"""
<<<
Wolfgang Pauli had a different "Burning Question":
> Pauli once said that if the Lord allowed him to ask anything he wanted, his first question would be “Why 1/137?
[[Bertrand Russell]] had a [[different (more general in scope :) question/complaint|What if you died, and found yourself face to face with God?]]
If I had known what it would be like to have it all, I might have been willing to settle for less.
Reminds me of Yiddish humor, with a mix of heartfelt pain, irony, and self-directed humor.
If I have properly developed the bonds of love among my family and friends, my own withering will be more than offset by blooming in others.
: -- from his essay titled //"Your Professional Decline is Coming (Much) Sooner than You Think"//
''If I seem to be proffering a version of intelligent design, I want to make it clear that I reject any argument that presents itself as a proof of God’s existence. I think there is a degree of irreverence in the very idea of proof.''
At the same time, whether or not His existence is a factor in the nature of the world, there is a glory in creation to which the hyperbolic celebrations of Scripture are uniquely appropriate. The Book of Job describes creation as the moment when “the morning stars sang together, and all the sons of God shouted for joy.” In the long final speech from the whirlwind, God names the beasts and the natural forces and luxuriates in their power and strangeness, in overwhelming reply to the questioning of His justice. Granting that this is a difficult teaching to absorb, it can only mean that the world, the cosmos, in its infinite particularity, should be seen as a joy to God Himself. Let us say, therefore, that it is recommended to our attention. ''And it is not without meaning that we are richly capable of such attention, as the arts and the sciences have demonstrated.''
: -- from her article [["A Theology of the Present Moment"|https://www.nybooks.com/articles/2022/12/22/a-theology-of-the-present-moment-marilynne-robinson/]]
If it is supported by morality, concentration is very fruitful, very beneficial. If it is supported by concentration, wisdom is very fruitful, very beneficial. If it is supported by wisdom, the mind becomes free of all defilements.
See also the value of wisdom in the Bible (Mishlei - Proverbs - Chapter 4): [[The beginning of wisdom (is to) acquire wisdom, therefore with everything you possess, acquire understanding.]]
If it isn't good, let it die. If it doesn't die, make it good.
Richard Feynman, who was not a great supporter of math for its own sake, once said that if math all of a sudden disappeared, physics would be set back by one week.
To which the mathematician Mark Kac responded: yes, but it would have been the week that god created the universe.
If measures of well-being, such as health, prosperity, knowledge, and safety, have increased over time, that would be progress. In fact, they have.
At the same time, progress does not mean that everything gets better for everyone everywhere all the time. That would not be progress. That would be a miracle.
Progress is not a miracle; it’s the result of solving problems. Problems are inevitable, and solutions create new problems that must be solved in their turn. For this reason, some aspects of life can improve while others stand still or go backwards. Progress would still be a reality if most of humanity is better off than they were before
: -- in [[his|Steven Pinker]] [[response to criticism|https://quillette.com/2019/01/14/enlightenment-wars-some-reflections-on-enlightenment-now-one-year-later/]] of his book //Enlightenment Now//.
If men learn this [reading and writing], it will implant forgetfulness in their souls; they will cease to exercise memory because they rely on that which is written, calling things to remembrance no longer from within themselves, but by means of external marks. What you have discovered is a recipe not for memory, but for reminder.
: -- from //Phaedrus//
or as [[Walter J. Ong]] had put it:
Most persons are surprised, and many distressed, to learn that essentially the same objections commonly urged today against computers were urged by Plato in the Phaedrus (274–7) and in the Seventh Letter against writing. Writing, Plato has Socrates say in the Phaedrus, is inhuman, pretending to establish outside the mind what in reality can be only in the mind. It is a thing, a manufactured product. The same of course is said of computers. Secondly, Plato's Socrates urges, writing destroys memory. Those who use writing will become forgetful, relying on an external resource for what they lack in internal resources. Writing weakens the mind.
: -- from [[his|Walter J. Ong]] book //Orality and Literacy: The Technologizing of the Word//
If mortality is what it is like to live after Eden, misunderstanding is what it is like to live after Babel.
: -- Esther Schor in her book "Bridge of Words: Esperanto and the Dream of a Universal Language"
Mortality as a punishment at the Garden of Eden (כִּי - עָפָר אַתָּה, וְאֶל - עָפָר תָּשׁוּב.) (for dust thou art, and unto dust shalt thou return.)
Misunderstanding as a punishment at Babel (הָבָה, נֵרְדָה, וְנָבְלָה שָׁם, שְׂפָתָם -- אֲשֶׁר לֹא יִשְׁמְעוּ, אִישׁ שְׂפַת רֵעֵהוּ.) (Come, let us go down, and there confound their language, that they may not understand one another's speech.)
"""
"""
Or as [[Jose Saramago]] summarized it:
> The history of mankind is the history of our misunderstandings with god, for he doesn't understand us, and we don't understand him.
If my mental processes are determined wholly by the motion of atoms in my brain, I have no reason to believe that my beliefs are true... and hence I have no reason for supposing my brain to be composed of atoms.
: -- from [[his|J. B. S. Haldane]] book //"Possible Worlds"// (1927)
In a slightly similar vein, this famous refrain out of AI:
[[If the brain were so simple that we could understand it, then we would be so simple that we couldn't.]]
[recursive thinking] [circular argument]
THE CASE FOR OBSCURITY
On Thoughts and Words I.
If no thought
your mind does visit,
make your speech
not too explicit.
[in other words, and explicitly: just shut up!]
If one could rewind the tape of life and let events play out again, the results would almost certainly differ dramatically.
[[He|Stephen J. Gould]] clarified with an example:
> We can explain the evolution of humans only as we explain a historical event. There are reasons why William the Conqueror won the Battle of Hastings, but if we played it again it might go the other way. The concept of contingency is central here: any string of events, once it happens, is highly improbable, and the outcome could not be predicted beforehand.
:: -- from an [[interview for the New Scientist|https://www.newscientist.com/article/mg12517055-800-forum-if-only-things-had-been-different-gail-vines-talks-to-stephen-jay-gould-about-the-role-of-contingency-in-evolution]]
Or as Scott Sampson (President & CEO, Science World British Columbia; Dinosaur paleontologist and science communicator; Author, How To Raise A Wild Child) extended this idea by formulating "Sampson's Law of Interdependent Origination":
>Life's unfolding is a tapestry in which every new thread is contingent upon the nature, timing, and interweaving of virtually all previous threads.
If scientific knowledge is knowledge about the interface (like [[the computer desktop metaphor|We’ve been shaped to have perceptions that keep us alive, so we have to take them seriously. I’ve evolved these symbols to keep me alive, so I have to take them seriously. But it’s a logical flaw to think that if we have to take it seriously, we also have to take it literally.]]), not about reality, there is no reason to assume scientific knowledge can ever be complete or fully coherent. If perceptions are about fitness, it is plausible that there can be aspects of perception (and knowledge) that appear contradictory or impossible. This offers a new perspective on anomalous phenomena of all sorts, including psychic phenomena.
[...]
Scientific knowledge, and its cousin technology, may be useful for understanding the interface (like [[the computer desktop metaphor|We’ve been shaped to have perceptions that keep us alive, so we have to take them seriously. I’ve evolved these symbols to keep me alive, so I have to take them seriously. But it’s a logical flaw to think that if we have to take it seriously, we also have to take it literally.]]), but there is no guarantee that they always serve fitness. [[Hoffman|Donald D. Hoffman]] says that illusions are shortcomings in the interface, shortcomings in the sense that they do not aid fitness. At the level of society, there are a number of beliefs that arguably are hindrances to survival, for example that economic growth is always a good thing or that ever more powerful weapons are needed for defense.
In this sense, scientific knowledge, which should be supporting survival, [may have] gone astray.
: -- from [[Brian Martin]]'s article titled [["Do We See Icons or Reality? A Review of Donald Hoffman’s The Case Against Reality, Brian Martin"|https://social-epistemology.com/2019/12/05/do-we-see-icons-or-reality-a-review-of-donald-hoffmans-the-case-against-reality-brian-martin/]]
[user interface]
On which [[Yann Martel]] commented in his book //"Life of Pi "//:
> The world isn't just the way it is. It is how we understand it, no? And in understanding something, we bring something to it, no? Doesn't that make life a story? (or a user interface? :)
If sub specie aeternitatis [from eternity's point of view]^^1^^ there is no reason to believe that anything matters, then that does not matter either, and we can approach our absurd lives with irony instead of heroism or despair.
:: -- from Nagel's "The Absurd" in Mortal Questions
"""
"""
----
^^1^^ Nagel takes this expression from Baruch Spinoza, who writes in his book "The Ethics":
> “It is in the nature of reason to perceive things sub quâdam aeternitatis specie,” that is, under the guise of a certain form of eternity.
If television is educational because watching it can teach you a lot about society, then a cheeseburger is also educational.
If the brain were so simple that we could understand it, then we would be so simple that we couldn't.
[recursive thinking] [circular argument]
From BrainPickings [[The Accidental Uniiverse|https://www.brainpickings.org/2014/02/04/accidental-universe-alan-lightman/]]:
>On one thing most physicists agree. If the amount of dark energy in our universe were only a little bit different than what it actually is, then life could never have emerged. A little larger, and the universe would have accelerated so rapidly that matter in the young universe could never have pulled itself together to form stars and hence complex atoms made in stars. And, going into negative values of dark energy, a little smaller and the universe would have decelerated so rapidly that it would have recollapsed before there was time to form even the simplest atoms.
>Out of all the possible amounts of dark energy that our universe might have, the actual amount lies in the tiny sliver of the range that allows life. There is little argument on this point. It does not depend on assumptions about whether we need liquid water for life or oxygen or particular biochemistries. It depends only on the requirement of atoms. As before, one is compelled to ask the question: Why does such fine-tuning occur? And the answer many physicists now believe: the multiverse. A vast number of universes may exist, with many different values of the amount of dark energy. Our particular universe is one of the universes with a small value, permitting the emergence of life. We are here, so our universe must be such a universe. We are an accident. From the cosmic lottery hat containing zillions of universes, we happened to draw a universe that allowed life. But then again, if we had not drawn such a ticket, we would not be here to ponder the odds.
> ''If the multiverse idea is correct, then the historic mission of physics to explain all the properties of our universe in terms of fundamental principles — to explain why the properties of our universe must necessarily be what they are — is futile, a beautiful philosophical dream that simply isn’t true. Our universe is what it is simply because we are here.''
> The situation can be likened to that of a group of intelligent fish who one day begin wondering why their world is completely filled with water. Many of the fish, the theorists, hope to prove that the cosmos necessarily has to be filled with water. For years, they put their minds to the task but can never quite seem to prove their assertion. Then a wizened group of fish postulates that maybe they are fooling themselves. Maybe, they suggest, there are many other worlds, some of them completely dry, some wet, and everything in between.
[anthropomorphing] -- see [[The Weak and Strong Anthropic Principles]]
If the software doesn't have to work, you can always meet any other requirement.
[software development]
If the unexamined life is not worth living, it’s equally true that the unlived life is not worth examining.
: -- from [[his|Parker Palmer]] [[commencement speech|https://www.brainpickings.org/2015/08/10/parker-palmer-naropa-university-commencement-address/]].
(Echoing [[Adam Phillips]]'s [[The unexamined life is surely worth living, but is the unlived life worth examining?]]).
If the universe is meaningless, so is the statement that it is so… The meaning and purpose of dancing is the dance.
If there be any Truth absolutely unrelated to humanity then for us it is absolutely non-existing. It is not difficult to imagine a mind to which the sequence of things happens not in space but only in time like the sequence of notes in music. For such a mind such conception of reality is akin to the musical reality in which Pythagorean geometry can have no meaning.
There is the reality of paper, infinitely different from the reality of literature. For the kind of mind possessed by the moth which eats that paper literature is absolutely non-existent, yet for Man’s mind literature has a greater value of Truth than the paper itself. In a similar manner if there be some Truth which has no sensuous or rational relation to the human mind, it will ever remain as nothing so long as we remain human beings.
:: -- from a conversation he had with [[Albert Einstein]] in 1930
If there's no solution, then there's no problem.
:: A quote mentioned by Jurriaan Kemp in his book //The Intelligent Optimist's Guide to Life//
The principle is you just need those three things -- variation, selection and heredity. And as Dan Dennett puts it, if you have those, then you must get evolution. Or design out of chaos, without the aid of mind.
You don't need a designer, or a plan, or foresight, or anything else. If there's something that is copied with variation and it's selected, then you must get design appearing out of nowhere. You can't stop it.
:: -- from [[a TED Talk by Susan Blackmore|https://www.ted.com/talks/susan_blackmore_on_memes_and_temes/transcript#t-22157]]
about memes and memetics
My late Uncle Alex Vonnegut […] who was well read and wise, was a humanist like the rest of the family. What Uncle Alex found particularly objectionable about human beings in general, was that they so seldom noticed it when they were happy.
He himself did his best to acknowledge it when times were sweet. We could be drinking lemonade in the shade of an apple tree in the summertime, and Uncle Alex would interrupt the conversation to say, “If this isn’t nice, what is?”
I myself say that out loud at times of easy, natural bliss: “If this isn’t nice, what is?” Perhaps others can also make use of that heirloom from Uncle Alex. I find it really cheers me up to keep score out loud that way.
If we are merely matter intricately assembled, is this really demeaning? If there’s nothing in here but atoms, does that make us less or does that make matter more?
- From the posthumous collection of essays by Carl Sagan titled //The Varieties of Scientific Experience: A Personal View of the Search for God// (published by his life companion Ann Druyan), based on the prestigious Gifford Lectures on Natural Theology he delivered at the university of Glasgow in 1985.
- [[Excerpts on BrainPickings.com|http://www.brainpickings.org/index.php/2013/12/20/carl-sagan-varieties-of-scientific-experience/]]
If we open a quarrel between past and present, we shall find that we have lost the future.
Pleasantries are low entropy [don't contain much information], biased so far that they stop being an earnest inquiry and become ritual. Ritual has its virtues, of course, and I don't quibble with them in the slightest. But, if we really want to start fathoming someone, we need to get them speaking in sentences we can't finish.
:: -- from his book //The Most Human Human//
[[He|Brian Christian]] also wrote:
[[The more helpful our phones get, the harder it is to be ourselves. For everyone out there fighting to write idiosyncratic, high-entropy, unpredictable, unruly text, swimming upstream of spell-check and predictive auto-completion: Don't let them banalize you. Keep fighting.]]
“SE VOGLIAMO CHE TUTTO RIMANGA COM’È BISOGNA CHE TUTTO CAMBI.”
If we want things to stay as they are, things will have to change.
: - the character Tancredi Falconeri, in the book //Il Gattopardo// by Giuseppe Tomasi di Lampedusa, 1958
A wise man once said that all human activity is a form of play. And the highest form of play is the search for Truth, Beauty and Love. What more is needed? Should there be a ‘meaning’ as well, that will be a bonus?
If we waste time looking for life’s meaning, we may have no time to live - or to play.
(compare to [[Jose Saramago]]'s take on [[life and play|Life is so uncertain that it is far better and more joyous to play your way through it than to plan or pray your way through it.]]).
If work were so pleasant, the rich would keep it for themselves.
If you are bored, you are not paying attention.
Compare to [[The cure for boredom is curiosity. There is no cure for curiosity.]]
(compare to [[Boredom is just the reverse side of fascination: both depend on being outside rather than inside a situation, and one leads to the other.]])
If you are not radically amazed, you are not paying attention.
- The expression "radical amazement" is by Rabbi Abraham Joshua Heschel
(see also [[When you are not disturbed, it's only because you are not disturbed, not because nothing is disturbing. It is true that nothing is intrinsically disturbing, but as long as you can be disturbed, you can't know that.]]).
If you are pained by external things, it is not they that disturb you, but your own judgment of them. And it is in your power to wipe out that judgment now.
If you build a man a fire, you'll keep him warm for a night. If you set a man on fire, you'll keep him warm for the rest of his life.
Not as macabre as it looks at first! (regardless of the length of life ...)
It really preserves the original (and similarly constructed) quote about the giving fish vs. teaching to fish
It plays (I think) on the quote about learners are not vessels to be filled, but wood to be lighted :)
If you can do it then why do it?
on learning, skills, performance, curiosity, exploration
If you can see a thing whole… it seems that it’s always beautiful. Planets, lives. . . .
But close up, a world’s all dirt and rocks. And day to day, life’s a hard job, you get tired, you lose the pattern. You need distance, interval.
The way to see how beautiful the earth is, is to see it as the moon.
The way to see how beautiful life is, is from the vantage point of death.
If you can see, look. If you can look, observe.
If you can sit quietly after difficult news, if in financial downturns you remain perfectly calm, if you can see your neighbors travel to fantastic places without a twinge of jealousy, if you can happily eat whatever is put on your plate and fall asleep after a day of running around without a drink or a pill, if you can always find contentment just where you are, you are probably a dog.
(compare to what [[Rudyard Kipling]] had to say about [[equanimity and "bearing it"|If — poem by Rudyard Kipling]]).
[acceptance] [equanimity] [tranquility]
If you change the way you see the world, you can change the world you see.
-- said about Microsoft's Hololense product
Show me a religion that prepares one for death. For nothingness. There's a church I might enter. Yours prepares one only for more life. For dreams and illusions and lies. If you could banish the fear of death from men's hearts they wouldn't live a day. Who would want this nightmare if not for fear of the next? The shadow of the axe hangs over every joy. Every road ends in death. Or worse.
: -- from [[his|Cormac McCarthy]] book //"The Sunset Limited"//
If you don't have time to do it right, when will you have time to do it over?
If you don’t have time to do it right, when will you have time to do it over.
If you don’t read the newspaper, you’re uninformed. If you read the newspaper, you're misinformed.
But [[he|Mark Twain]] also said:
> The man who doesn’t read good books has no advantage over the man who can’t read them.
Compared to what [[he|Mark Twain]] also said about [[reading/finding religion|When you know a man's religious complexion, you know what sort of religious books he reads when he wants some more light, and what sort of books he avoids, lest by accident he get more light than he wants.]]
- compare to [[Robert Brault]]:
> One of life's mysteries is how people who never listen can be so misinformed.
<<comparequote "Erwin Knoll" "Everything you read in the newspapers is absolutely true except for that rare story of which you happen to have firsthand knowledge." "news and misinformation">>
<<comparequote "Michael Crichton" "'wet streets cause rain' stories" "accuracy of News">>
If you find that you're spending almost all your time on theory, start turning some attention to practical things; it will improve your theories.
If you find that you're spending almost all your time on practice, start turning some attention to theoretical things; it will improve your practice.
If you have ten thousand regulations you destroy all respect for the law.
If you have to have a policy manual, publish the Ten Commandments.
on corporate management style, and procedure manuals, from the book [[Up The Organization|http://www.amazon.com/gp/product/0787987751?ie=UTF8&isInIframe=1&n=283155&redirect=true&ref_=dp_proddesc_0&s=books&showDetailProductDesc=1#iframe-wrapper]] (originally published in 1970)
If you know a view as a view, you can be free of that view, beyond views through views. If you know a thought as a thought, you can be free of that thought, free of thought through thought. Views are language, thoughts are language. To train ourselves in language, to open language up, is a practice that cuts to the heart of Buddhist liberation.
: -- from [[his|Norman Fischer]] book "//When You Greet Me I Bow//"
[perspective]
If you live to be one hundred, you've got it made. Very few people die past that age.
If you only believe what you know for sure, you do not understand the purpose of belief.
If you stop telling people it's all sorted out after they're dead, they might try sorting it all out while they're alive.
― Neil Gaiman and Terry Pratchett, Good Omens: The Nice and Accurate Prophecies of Agnes Nutter, Witch
If you stumble about believability, what are you living for? Love is hard to believe, ask any lover. Life is hard to believe, ask any scientist. God is hard to believe, ask any believer. What is your problem with hard to believe?
: ― from [[his|Yann Martel]] book //"Life of Pi"//
[wonder]
(see what [[Stephen Fry]] had to say about [[believability|This world is the only thing we've ever seen and yet it staggers us. It surprises us. We are surprised by what is "the case", "the case" being everything around us.]])
If you talk to God, it's called prayer; if God has the courtesy to reply, it's called schizophrenia.
- from the book //The Voices Within// by Charles Fernyhough as [[reviewed in the WSJ|http://www.wsj.com/articles/charles-fernyhough-listens-in-on-thought-itself-in-the-voices-within-1475862100]] by Raymond Tallis
(Compare to [[Prayer must never be answered: if it is, it ceases to be prayer and becomes correspondence.]]).
(Also compare to the [[little sign in a French church|When you enter this church it may possibly be able to "hear the call of God". However, it is unlikely that He will call you on your mobile device. So thank you for turning off your phone. If you want to talk to God, you may enter, choose a quiet place and talk to Him. And if you want to see Him, send Him a text while driving.]]).
If you think adventure is dangerous, try routine; it is lethal.
[curiosity]
If you think education is expensive, try ignorance.
: -- AKA Bok's Law
Compare to [[Terry Pratchett]] who wrote (in //Equal Rites//):
> They say a little knowledge is a dangerous thing, but it is not one half so bad as a lot of ignorance.
"""
If you understand others you are smart.
If you understand yourself you are wise.
If you overcome others you are powerful.
If you overcome yourself you have strength.
If you know how to be satisfied you are rich.
If you can act with vigor, you have a will.
If you don't lose your objectives you can be long-lasting.
If you die without regret, you are eternal.
"""
:: ― Lao Tzu, Tao Te Ching
If you want others to be happy, practice compassion. If you want to be happy, practice compassion.
If you want to feel better more often, feel better more often.
From an article [[Feeling Lonely When You’re Single Doesn’t Mean You’re Weak by Alana Massey|http://nymag.com/thecut/2016/03/feeling-lonely-when-single-not-weakness.html]]
An African proverb that I think of often says, “If you want to go fast, go alone. If you want to go far, go together.” I used to think it was an indictment of the solitary runner who wanted to go quickly until I realized that speed and distance are morally neutral objectives. There are times when we need to go fast and there are times when we need to go far. Some people need to do each more often than the other.
Or as [[Kenneth Reitz]] had said: [[Life's not a race, but there's no speed limit either.]]
If you want to know the past, look at the present. If you want to know your future, look at the present.
If you want to make God laugh, tell him your future plans.
Similar/borrowed from [[Man plans and God laughs.]]
"""
"""
or as [[Henry Fielding]] observed:
> All Nature wears one universal grin.
Or as [[Jose Saramago]] summarized it:
> The history of mankind is the history of our misunderstandings with god, for he doesn't understand us, and we don't understand him.
Or as Eli Wiesel stated:
> God made man because He loves stories.
:: -- from a lecture by Jonathan Gottschall, author of the book //"The Storytelling Animal"//
If you wish to travel far and fast, travel light. Take off all your envies, jealousies, unforgiveness, selfishness, and fears.
If you're as clever as you can be when you write it, how will you ever debug it?
When people were having a hard time, Ajahn Chah would ask them, with a smile on his face, "Are you suffering today?" If they said no, he'd laugh and say, "Very well." When they said yes, he'd say, "Well, you must be very attached today." It was so simple to see. If you're suffering, you're attached. And right there is the place to learn to be free.
If you’re too afraid of going astray, you won’t go anywhere.
: -- the old, powerful witch [[Esme (Granny) Weatherwax|http://discworld.wikia.com/wiki/Esmerelda_Weatherwax]] to [[Tiffany Aching|http://discworld.wikia.com/wiki/Tiffany_Aching]] (the young apprentice witch) in [[Terry Pratchett]]'s book [["A Hat Full of Sky"|http://discworld.wikia.com/wiki/A_Hat_Full_of_Sky]]
(and [[Haggai Mark]]'s [[corollary|https://www.vocabulary.com/dictionary/corollary]]:
>If you don't know when and how to be a learner, you don't know when and how to be a good teacher.
)
[curiosity]
"""
'Nothing ever finishes. Nothing’s ever really over.’
It was Johnny who said that. He was surprised at himself.
‘Correct! Are you a physicist?’
‘Me?’ said Johnny. ‘I don’t know anything about science!’
‘Marvelous! Ideal qualification!’ said Einstein.
‘What?’
'Ignorance^^1^^ is very important! It is an absolutely //essential// step in the learning process!'
"""
----
^^1^^ - [[He|Terry Pratchett]] also said
> Carefully directed ignorance is the key to all knowledge.
The centuries-old Japanese concept of ikigai was first popularized in 1966 by psychiatrist Mieko Kamiya. Translations vary, but it means something akin to “reason for being” or “reason for waking up in the morning”.
There is a Western interpretation pointing towards a single guiding purpose, and a more traditional version that maps out several different paths to daily fulfillment. Both are helpful frameworks to help you dissect what brings most meaning to your life.
<a href="./resources/ikigai map.png" target="new"><img src="./resources/ikigai map.png" width="95%" height="95%" /></a>
:-- from [[Tool: Ikigai|https://metaversalwellbeing.com/2022/11/29/tool-ikigai/]] at Metaversal Wellbeing
See also [[The Philosophy of Ikigai: 3 Examples About Finding Purpose|https://positivepsychology.com/ikigai/]]
Made up of the Japanese words ’iki’ (生き) life, and ‘gai’ (甲斐) value or worth, ikigai is about finding joy in life through purpose. Ikigai sits somewhere between self-fulfillment and the common good. It’s not linked to social success or ambition, but to the passion of a subject, the love of simple everyday things, the attention and detail of a precise moment, the need to live for the here and now and savour one's reality. It’s the feeling of waking up raring to go each day.
: -- from [["Ikigai - Living A Life With Meaning And Purpose"|https://www.readyresetgo.com/post/ikigai-living-a-life-with-meaning-and-purpose]] by Sonia Jackson
Compare to what [[Nicholas Kemp]] had suggested: [[Avoid Seeking Exact Definitions (e.g., Ikigai)]].
[fulfillment]
Imagination is the ability to bring to mind things that are not present to our senses.
Creativity is a step beyond imagination: it is putting your imagination to work.
Creativity is a practical as well as conceptual process: how and what we create has much to do with the tools and materials we have available, and what we make of and with them.
(Compare to [[Not only is the universe stranger than we imagine, it is stranger than we can imagine.]])
Imagine a world with all the music dried up: what impoverishment, what loss! But give your thanks not to the lyre but to your ears for the music. And then ask yourself, what other harmonies are there in the air, that you lack the ears to hear?
: -- from [[his|Nick Bostrom]] article [["Letters from Utopia"|https://www.nickbostrom.com/utopia.html]] (2008)
[human senses] [human abilities]
I came across a pearl of wisdom by [[Sharon Salzberg]] taken from her book //Lovingkindness// (but also mentioned in [[another essay by her|http://www.enabling.org/ia/vipassana/Archive/S/Salzberg/mettaSalzberg.html]]) about how we deal with "the salt in our lives":
>Imagine taking a very small glass of water and putting into it a teaspoon of salt. Because of the small size of the container, the teaspoon of salt is going to have a big impact upon the water. However, if you approach a much larger body of water, such as a lake, and put into it that same teaspoonful of salt, it will not have the same intensity of impact, because of the vastness and openness of the vessel receiving it. Even when the salt remains the same, the spaciousness of the vessel receiving it changes everything.
>
>We spend a lot of our lives looking for a feeling of safety or protection; we try to alter the amount of salt that comes our way. Ironically, the salt is the very thing that we cannot do anything about, as life changes and offers us repeated ups and downs. Our true work is to create a container so immense that any amount of salt, even a truckload, can come into it without affecting our capacity to receive it.
After reading this, I asked myself: are we (each one of us) the "small glass of water" working on growing into a lake? Or are we the (ethereal) water-taster, who drinks from either the glass of water or the lake and experiences the saltiness? Or are we indistinguishably both (along the Buddhist lines of "all is one")?
From his excellent analysis [[The Seven Deadly Sins of Predicting the Future of AI|https://rodneybrooks.com/the-seven-deadly-sins-of-predicting-the-future-of-ai/]]:
When I was a teenager, [[Arthur C. Clarke]] was one of the “big three” science fiction writers along with Robert Heinlein and [[Isaac Asimov]]. But Clarke was more than just a science fiction writer. He was also an inventor, a science writer, and a futurist.
In February 1945 he wrote a letter to Wireless World about the idea of geostationary satellites for research, and in October of that year he published a paper3 outlining how they could be used to provide world-wide radio coverage. In 1948 he wrote a short story The Sentinel which provided the kernel idea for Stanley Kubrick’s epic AI movie 2001: A Space Odyssey, with Clarke authoring a book of the same name as the film was being made, explaining much that had left the movie audience somewhat lost.
In the period from 1962 to 1973 Clarke formulated three adages, which have come to be known as Clarke’s three laws (he said that Newton only had three, so three were enough for him too):
1. When a distinguished but elderly scientist states that something is possible, he is almost certainly right. When he states that something is impossible, he is very probably wrong.
2. The only way of discovering the limits of the possible is to venture a little way past them into the impossible.
3.Any sufficiently advanced technology is indistinguishable from magic.
Personally I should probably be wary of the second sentence in his first law, as I am much more conservative than some others about how quickly AI will be ascendant. But for now I want to expound on Clarke’s third law.
Imagine we had a time machine (powerful magic in itself…) and we could transport Issac Newton from the late 17th century to Trinity College Chapel in Cambridge University. That chapel was already 100 years old when he was there so perhaps it would not be too much of an immediate shock to find himself in it, not realizing the current date.
Now show Newton an Apple. Pull out an iPhone from your pocket, and turn it on so that the screen is glowing and full of icons and hand it to him. The person who revealed how white light is made from components of different colored light by pulling apart sunlight with a prism and then putting it back together again would no doubt be surprised at such a small object producing such vivid colors in the darkness of the chapel. Now play a movie of an English country scene, perhaps with some animals with which he would be familiar–nothing indicating the future in the content. Then play some church music with which he would be familiar. And then show him a web page with the 500 plus pages of his personally annotated copy of his masterpiece Principia, teaching him how to use the pinch gestures to zoom in on details.
Could Newton begin to explain how this small device did all that? Although he invented calculus and explained both optics and gravity, Newton was never able to sort out chemistry and alchemy. So I think he would be flummoxed, and unable to come up with even the barest coherent outline of what this device was. It would be no different to him than an embodiment of the occult–something which was of great interest to him when he was alive. For him it would be indistinguishable from magic. And remember, Newton was a really smart dude.
If something is magic it is hard to know the limitations it has. Suppose we further show Newton how it can illuminate the dark, how it can take photos and movies and record sound, how it can be used as a magnifying glass, and as a mirror. Then we show him how it can be used to carry out arithmetical computations at incredible speed and to many decimal places. And we show it counting his steps has he carries it.
What else might Newton conjecture that the device in front of him could do? Would he conjecture that he could use it to talk to people anywhere in the world immediately from right there in the chapel? Prisms work forever. Would he conjecture that the iPhone would work forever just as it is, neglecting to understand that it needed to be recharged (and recall that we nabbed him from a time 100 years before the birth of Michael Faraday, so the concept of electricity was not quite around)? If it can be a source of light without fire could it perhaps also transmute lead to gold?
This is a problem we all have with imagined future technology. If it is far enough away from the technology we have and understand today, then we do not know its limitations. It becomes indistinguishable from magic.
When a technology passes that magic line anything one says about it is no longer falsifiable, because it is magic.
This is a problem I regularly encounter when trying to debate with people about whether we should fear just plain AGI, let alone cases C or D from above. I am told that I do not understand how powerful it will be. That is not an argument. We have no idea whether it can even exist. All the evidence that I see says that we have no real idea yet how to build one. So its properties are completely unknown, so rhetorically it quickly becomes magical and super powerful. Without limit.
Nothing in the Universe is without limit. Not even magical future AI.
Watch out for arguments about future technology which is magical. It can never be refuted. It is a faith-based argument, not a scientific argument.
<svg class="tc-image-quote tc-image-button" viewBox="0 0 128 128" width="12pt" height="12pt"></svg>
<svg class="tc-image-quote tc-image-button" width="12pt" height="12pt" viewBox="0 0 128 128">
<g fill-rule="evenodd">
<path d="M51.2188077,117.712501 L51.2188077,62.1993386 L27.4274524,62.1993386 C27.4274524,53.3075754 29.1096526,45.797753 32.4741035,39.669646 C35.8385544,33.541539 42.0867267,28.9154883 51.2188077,25.7913554 L51.2188077,2 C43.7689521,2.96127169 36.8599155,5.18417913 30.4914905,8.668789 C24.1230656,12.1533989 18.6559149,16.5391352 14.0898743,21.8261295 C9.52383382,27.1131238 5.97919764,33.2411389 3.45585945,40.2103586 C0.932521268,47.1795784 -0.208971741,54.6293222 0.0313461819,62.5598136 L0.0313461819,117.712501 L51.2188077,117.712501 Z M128,117.712501 L128,62.1993386 L104.208645,62.1993386 C104.208645,53.3075754 105.890845,45.797753 109.255296,39.669646 C112.619747,33.541539 118.867919,28.9154883 128,25.7913554 L128,2 C120.550144,2.96127169 113.641108,5.18417913 107.272683,8.668789 C100.904258,12.1533989 95.4371072,16.5391352 90.8710666,21.8261295 C86.3050261,27.1131238 82.7603899,33.2411389 80.2370517,40.2103586 C77.7137136,47.1795784 76.5722206,54.6293222 76.8125385,62.5598136 L76.8125385,117.712501 L128,117.712501 Z"></path>
</g>
</svg>
In one of his most important essays, the great twelfth-century Japanese Zen master [[Dogen]] writes, “Impermanence is itself buddha nature.”
This seems quite different from the classical Buddhist notion of impermanence, which emphasizes the loss side of the loss/change/renewal equation. For Dogen, ''impermanence isn’t a problem to be overcome with diligent effort on the path. Impermanence is the path. Practice isn’t the way to cope with or overcome impermanence. It is the way to fully appreciate and live it.''
“If you want to understand buddha nature,” Dogen writes, “you should intimately observe cause and effect over time. When the time is ripe, buddha nature manifests.” In explaining this teaching, Dogen, in his usual inside-out, upside-down way (Dogen is unique among Zen masters in his intricately detailed literary style, which usually involves very counterconceptual ways of understanding typical concepts), writes that practice isn’t so much a matter of changing or improving the conditions of your inner or outer life as a way of fully embracing and appreciating those conditions, especially the condition of impermanence and loss.
When you practice, “the time becomes ripe.” While this phrase naturally implies a “later” (something unripe ripens in time), Dogen understands it in the opposite way: Time is always ripe. Buddha nature always manifests in time, because time is always impermanence.
: -- from [[his|Norman Fischer]] book "//When You Greet Me I Bow//"
In a completely rational society, the best of us would be teachers and the rest of us would have to settle for something less.
In a war of ideas it is people who get killed.
In a wise old person, one can see that time is not only a destroyer but also a creator.
:: -- from his book //Time and the Soul//
In a world as crazy as this one, it ought to be easy to find something that happens solely by chance. It isn't.
<<comparequote "Wislawa Szymborska" "My apologies to chance for calling it necessity. My apologies to necessity if I'm mistaken, after all." "fate and chance">>
In Buddhism, we say that when you have suffered enough, you are going to get yourself to that which will make the difference. Everybody gets there when they want to. It's perfect. You can suffer for as long as you wish, and when you no longer want to suffer, you can stop.
In computer programming: The most secure, the fastest, and the most maintainable code (by far :) is the code not written (or not needed).
In Computer Science: Simplicity does not precede complexity, but follows it.
and my paraphrase:
In life: mindfulness does not precede full-mindness, but follows it.^^1^^
and (presumably) as [[Albert Einstein]] had said:
> Any intelligent fool can make things bigger and more complex... It takes a touch of genius - and a lot of courage to move in the opposite direction.
----
^^1^^ - I think that one can be both Full-Minded (i.e., full of knowledge and breadth) and Mind-Full (i.e., attentive and seeking simplicity and depth).
In creative work — creative work of all kinds — those who are the world’s working artists are not trying to help the world go around, but forward.
In defense of parentheses: What an odd thing parentheses can be. The things you put in may be more important than those you leave out.
[[Torquing|On torquing expressions into new meanings]] [[Simone de Beauvoir]]:
>“What an odd thing a diary is,” a character in Simone de Beauvoir’s novel The Woman Destroyed (La Femme Rompue, 1967) says, “the things you omit are more important than those you put in.”
"""
"""
But, one should (no matter what :) heed Umberto Eco's sound advice:
> (Always) remember that parentheses (even when they seem indispensable) interrupt the flow^^1^^.
----
^^1^^ - see what [[Noel Coward]] had said about [[interrupting the flow|Having to read footnotes resembles having to go downstairs to answer the door while in the midst of making love.]] :)
In faith there is enough light for those who want to believe and enough shadows to blind those who don't.
[faith vs. "establishment/institutional/professional" religion]
In God We Trust, All Others (please) Bring Data.
: -- A NASA plaque on the wall of the Mission Evaluation Room
and a NASA Chief explains:
> Between the lines this suggests that "we are not interested in your opinion on things. If you have data, we will listen, but your opinion is not requested here.
But [[Richard Feynman]] said:
> When you don't have any data, you have to use reason.
<<comparequote "David Epstein" "There are no tools that cannot be dropped, reimagined, or repurposed in order to navigate an unfamiliar challenge. Even the most sacred tools. Even the tools so taken for granted they become invisible." "using tools, data, experience">>
In great mathematics there is a very high degree of unexpectedness, combined with inevitability and economy.
From //A Mathematician's Apology// (London 1941).
In my life I have found two things of priceless worth – learning and loving. Nothing else – not fame, not power, not achievement for its own sake – can possibly have the same lasting value. For when your life is over, if you can say ‘I have learned’ and ‘I have loved,’ you will also be able to say ‘I have been happy’.
<<comparequote "Bertrand Russell" "The good life is one inspired by love and guided by knowledge... Neither love without knowledge, nor knowledge without love can produce a good life." "The Good Life">>
The American philosopher [[Sidney Morgenbesser]] (1921-2004) was an odd case. For decades he held the prestigious John Dewey chair in philosophy at Columbia University. Before that, he was mentor to Hilary Putnam. Yet he rarely wrote anything. Instead, like [[Socrates]], he was known for his viva voce [oral rather than written] philosophising. He was also known for his ‘zingers’, the most famous of which was allegedly uttered during an address on the philosophy of language being given by J.L. Austin.
‘In some languages,’ Austin observed, ‘a double negative yields an affirmative. In others, a double negative yields a more emphatic negative. It is curious, though, that in no language known to me, whether natural or artificial, does a double affirmative yield a negative.’ At which point Morgenbesser piped up from the back of the audience: ‘Yeah, yeah.’
:: -- from [[Jim Holt's blog at the London Review of Books|https://www.lrb.co.uk/blog/2009/09/22/holt1789/morgenbesserisms/]]
BTW, [[John Allen Paulos]] in his book [["Mathematics and Humor"|https://epdf.pub/mathematics-and-humor.html]] (also on local disk drive) (and an article about Paulos and his book titled [["Mathematics and Humor: John Allen Paulos and the Numeracy Crusade"|https://scholarcommons.usf.edu/cgi/viewcontent.cgi?article=1187&context=numeracy]]) retells the same story.
In normal speech and prose our thoughts and feelings are diluted (by stock phrases and roundabout approximations); in poetry those thoughts and feelings can be, must be, concentrated.
: ― from [[his|Stephen Fry]] book //The Ode Less Travelled: Unlocking the Poet Within//
In old age, pulling the cart is hard, especially with small oxen.
My mother used to say it in Romanian, when she was in her late 70's.
In order that all men may be taught to speak truth, it is necessary that all likewise should learn to hear it.
In order to believe in hope [be hopeful] we needn’t believe that everything will turn out well, we need only believe that we are on the right path.
(see also [[Being resilient doesn't mean feeling good all the time - it means you're good with feeling bad sometimes.]]).
In ordinary life, we are not aware of the unity of all things, but divide the world into separate objects and events. This division is useful and necessary to cope with our everyday environment, but it is not a fundamental feature of reality. It is an abstraction devised by our discriminating and categorising intellect. To believe that our abstract concepts of separate 'things' and 'events' are realities of nature is an illusion.
(compare to [[Knowledge is one. Its division into subjects is a concession to human weakness.]]).
<<comparequote "Andy Clark" "Everything leaks. There are no clear-cut level distinctions in nature... .The idea of levels is a useful fiction, great for hygienic text-book writing and quick answers that defend our local turf but seldom advance scientific understanding." "the nature of knowledge">>
In programming (and probably in other domains, too), there is this great tradition of learning from our mistakes how to make the same mistake again.
from his site at https://lamport.azurewebsites.net/
In programming, as in everything else, to be in error is to be reborn.
([[My|Haggai Mark]] possible interpretation: when one has an error in an interpreted program (written in Python, for example), one has to restart the program and run afresh :)
In school, first you receive a lesson and then get a test. In life, first you are tested and then you (maybe) learn a lesson.
(similar to [[Experience is a poor teacher: it gives its tests before it teaches its lessons.]])
In speaking of the move from subjective to objective characterization, I wish to remain noncommittal about the existence of an end point, the completely objective intrinsic nature of the thing, which one might or might not be able to reach. It may be more accurate to think of objectivity as a direction in which the understanding can travel.
And in understanding a phenomenon like lightning [or rainbows, or clouds], it is legitimate to go as far away as one can from a strictly human viewpoint.
In the case of experience, on the other hand, the connection with a particular point of view seems much closer. It is difficult to understand what could be meant by the objective character of an experience, apart from the particular point of view from which its subject apprehends it. ^^1^^
:- from his essay [["What is it like to be a bat"|https://warwick.ac.uk/fac/cross_fac/iatl/study/ugmodules/humananimalstudies/lectures/32/nagel_bat.pdf]]
"""
"""
(Here, I think that Nagel avoids a trap of trying to define or establish a "True", Objective Reality. Since we are not sure we will ever get there (or get out of our "cage" (head, subjective point of view), there is no point in trying to claim the ability/possibility to Objectively know The Truth.^^2^^)
"""
"""
(see also Nagel's take on Spinoza's view (ha!): [[If sub specie aeternitatis (from eternity's point of view) there is no reason to believe that anything matters, then that does not matter either, and we can approach our absurd lives with irony instead of heroism or despair.]])
It seems that [[Donald D. Hoffman]] takes this much further when he claims (in an [[article titled "Do we See Icons or Reality"|https://social-epistemology.com/2019/12/05/do-we-see-icons-or-reality-a-review-of-donald-hoffmans-the-case-against-reality-brian-martin/]]) that we were evolved to not see reality as it is, but rather to increase our fitness of survival/reproduction ("and reality be damned"):
> Fitness enables an organism to survive and reproduce, but evolutionary theory says nothing about whether the development of perceptual capacities necessarily tailors them to register reality.^^3^^
>It is usual to think that all organisms sense the same reality, just registering different intensities or aspects of the same objects, but Hoffman turns this around, saying that the perceptions of different species can be so radically different that it is more logical to think that perceptions create an organism’s personal reality.
----
^^1^^ In his book ”The View from Nowhere”, [[Thomas Nagel]] claims that the ''View from Nowhere'' is necessarily incomplete, (a distinctly non-Spinozist conclusion.) But here is his way of describing the View from Nowhere:
>"It is a conception of the world as simply existing, seen from no particular perspective, no privileged point of view—as simply there, and hence apprehensible from various points of view. … In fact, it is the world, conceived from nowhere within it."
: -- Excerpt From: Rebecca Goldstein. “Betraying Spinoza: The Renegade Jew Who Gave Us Modernity.”
^^2^^ see how [[Steven Pinker]] describes [[our ability (or lack thereof) to get to the truth|We are organisms, not angels, and our minds are organs, not pipelines to the truth. Our minds evolved by natural selection to solve problems that were life-and-death matters to our ancestors, not to commune with correctness.]].
^^3^^ see more about [[Donald D. Hoffman]]'s [[point of view|We’ve been shaped to have perceptions that keep us alive, so we have to take them seriously. I’ve evolved these symbols to keep me alive, so I have to take them seriously. But it’s a logical flaw to think that if we have to take it seriously, we also have to take it literally.]].
This, then, is the trillion-dollar question: Will the approach undergirding AI today—an approach that borrows little from the mind, that’s grounded instead in big data and big engineering—get us to where we want to go? How do you make a search engine that understands if you don’t know how you understand? Perhaps, as Russell and Norvig politely acknowledge in the last chapter of their textbook, in taking its practical turn, AI has become too much like the man who tries to get to the moon by climbing a tree: “One can report steady progress, all the way to the top of the tree.”
: -- from an Atlantic article titled [["The Man Who Would Teach Machines to Think"|https://docs.google.com/document/d/1M5Hwm7S9xHAi06RNaN7W6zOjsaPmOiPRaoISqCA5NAo/edit?usp=sharing]].
(also see [[his|Douglas Hofstadter]] take on [[On The Shallowness of Google Translate]].
Good teaching is an act of hospitality toward the [student], and hospitality is always an act that benefits the host even more than the guest. The concept of hospitality arose in ancient times when this reciprocity was easier to see: in nomadic cultures, the food and shelter one gave to a stranger yesterday is the food and shelter one hopes to receive from a stranger tomorrow. By offering hospitality, one participates in the endless reweaving of a social fabric on which all can depend—thus the gift of sustenance for the guest becomes a gift of hope for the host. It is that way in teaching as well: the teacher’s hospitality to the student results in a world more hospitable to the teacher.
:― from his book //The Courage to Teach: Exploring the Inner Landscape of a Teacher's Life//
In the beginning was the Tao. The Tao gave birth to Space and Time. Therefore Space and Time are Yin and Yang of programming.
Programmers that do not comprehend the Tao are always running out of time and space for their programs. Programmers that comprehend the Tao always have enough time and space to accomplish their goals.
How could it be otherwise?
- from [[The Tao of Programming|http://canonical.org/~kragen/tao-of-programming.html]]
In the design of programming languages, one can let oneself be guided by considering "what the machine can do". Considering, however, that the programming language is the bridge between the user and the machine - that it can, in fact, be regarded as his tool - it seems just as important to take into consideration "what man can think".
In the end, secure happiness comes only with the solid feeling we have when we know that we have become the person we were meant to be in this lifetime -- that we have matured and used the life we have been given in the best way we could.
: -- From the Introduction to his book [[Taking Our Places: The Buddhist Path to Truly Growing Up|http://www.normanfischer.org/books-zen/taking-our-places]]
<<comparequote "Erik Erikson" "An elder is someone who has come to a point of being able to understand his place in the world and the life he has lived in it." "elderhood">>
At this point it would be helpful [to perform] a conceptual turn through 180 degrees, after which the question can no longer be “What can I expect from life?” but can now only be “What does life expect of me?” What task in life is waiting for me?
Now we also understand how, in the final analysis, the question of the meaning of life is not asked in the right way, if asked in the way it is generally asked: it is not we who are permitted to ask about the meaning of life — it is life that asks the questions, directs questions at us…
We are the ones who must answer, must give answers to the constant, hourly question of life, to the essential “life questions.” Living itself means nothing other than being questioned; our whole act of being is nothing more than responding to — of being responsible toward — life. With this mental standpoint nothing can scare us anymore, no future, no apparent lack of a future. Because now the present is everything as it holds the eternally new question of life for us.
The question life asks us, and in answering which we can realize the meaning of the present moment, does not only change from hour to hour but also changes from person to person: the question is entirely different in each moment for every individual.
We can, therefore, see how the question as to the meaning of life is posed too simply, unless it is posed with complete specificity, in the concreteness of the here and now.
: -- from [[his|Viktor Frankl]] book "//Yes to Life//".
In the glory days of the MIT Logo Lab, we used to say, “Logo is Lisp disguised as BASIC.”
Now, with its first class procedures, lexical scope, and first class continuations, Snap! is Scheme disguised as Scratch.
- from the Snap! User Manual at http://snap.berkeley.edu/SnapManual.pdf
Maxim #10 - In the human heart there is a perpetual generation of passions; so that the ruin of one is almost always the foundation of another.
from [[Reflections or Sentences and Moral Maxims|https://www.gutenberg.org/files/9105/9105-h/9105-h.htm]] By Francois Duc De La Rochefoucauld, Prince de Marsillac.
In the long run, there is no distinction between arming ourselves and arming our enemies. The information age is also the disinformation age.
: -- quoted by [[Daniel Dennett]] in his article in Wired Magazine [["Will AI Achieve Consciousness? Wrong Question"|https://www.wired.com/story/will-ai-achieve-consciousness-wrong-question/]] (and also [[on GD|https://docs.google.com/document/d/149X4si8slSi2S97VW8kNul49fAl5kXoqTmdA8S5uJMA/edit?usp=sharing]]).
In the mid-twentieth century, a piece of cutting-edge mathematical gadgetry was "like a computer." (referring to a person/occupation^^1^^).
In the twenty-first century, it is the //human// math whiz that is "like a computer". (referring to the machine).
An odd twist: we're //like// the thing that used to be like us. We imitate our old imitators, one of the strange reversals of fortune in the long saga of human uniqueness.
----
^^1^^ - an explanation, just in case: a "computer" in the pre-~Computer-Science days (and as early as the 17^^th^^ century) meant "a person who computes": one performing mathematical calculations, before electronic computers became commercially available. Later, in the early computer days, computing had been a branch of Math Departments, and Human Computers, as they were called, were people – often women – who used and operated these machines to find mathematical solutions via carefully crafted procedures, what we call programming today.
A Chinese philosopher, Yi-Fu Tuan, in the late ’70s has a book on place, and he has this interesting little observation about how place used to structure time.
Because the longer it took for information to get to me, the farther away it was, and thus theoretically, the farther away from my own lived experience and what was important to me it might have been. And so once electronic media kind of collapsed that ordering function of distance, then now, we have to become active in deciding what is it important for me to give my attention to right now. I mean, that itself, just having to make that decision, can be very taxing.
: -- from an interview [[Ezra Klein]] did with L. M. Sacasas [[in the NYT|https://www.nytimes.com/2021/08/03/podcasts/transcript-ezra-klein-interviews-lm-sacasas.html]]
In three words I can sum up everything I've learned about life: It goes on.
"""
"""
It seems to get at it from an angle different (?) from [[Nemerov's|Howard Nemerov]], who said that [[That was it|A Life - poem by Howard Nemerov]]. (with the same word-count).
"""
"""
But as [[Sarah Manguso]] observes (ha!), this doesn't mean you should not pay attention (and be [[mindful|mindfulness]]):
:{{imgquote}} I tried to record each moment, but time isn’t made of moments; it contains moments. There is more to it than moments.
: So I tried to pay close attention to what seemed like empty time.
"""
"""
Compare to [[Kurt Vonnegut]]'s: [[So it goes.]]
"""
"""
And compare to [[Willard Van Orman Quine]]'s: [[A simple question "What is there?" can be answered in a word: "Everything".]] (as opposed to the not-so-simple question: [["Why it's there"|Not how the world is, is the mystical, but that it is.]]).
"""
"""
And also compare to what I keep learning (from [[Phaedrus]] :) over and over: in life [[Things are not always what they seem|Things are not always what they seem; the first appearance deceives many; the intelligence of few perceives what has been carefully hidden in the recesses of the mind.]]
"""
"""
Or
:{{imgquote}} The further one goes, the less one knows.
:: ― Lao Tzu, Tao Te Ching
"""
"""
or as [[Jose Saramago]] observed:
> [[Doubt is the privilege of those who have lived a long time.]]
"""
"""
Or, as [[_ I _|Haggai Mark]] often discover:
:{{imgquote}} it's wonder-full.^^1^^
"""
"""
Or, as [[I also|Haggai Mark]] often discover:
> Everything is humanly-scaled.
> "Everything" is humanly-scaled! ^^3^^
"""
"""
----
^^1^^ - I like the phrasing because it (somewhat) echoes [[Frost|Robert Frost]]'s phrase, //but// (depending on how you choose to count :), may be less wordy^^2^^.
^^2^^ - a "maximalistic" count yields 4 words; a "minimalistic", 2; (and a [["fractalistic"|https://en.wikipedia.org/wiki/Fractal_dimension]] 2.5 :)
: and speaking of brevity, another ([[pithy|A foolproof way of (avoiding) learning new vocabulary]], only 2 words! :) piece of advice (or what [[I've|Haggai Mark]] learned) about the essence of "a good life" is: [[Be interested|Be interested. Everyone wants to be interesting – but the vitalizing thing is to be interested. Keep a sense of curiosity. Discover new things. Care. Risk failure. Reach out.]].
^^3^^ inspired by what the Edgie David Finkelstein [[said on Edge|https://www.edge.org/response-detail/10907]]:
> Finkelstein's First Law: Everything is relative.
> Finkelstein's Second Law: Everything! (which is relative).
In Zen Practice, if you think you are getting nowhere, it's because you think you are doing something called "getting somewhere".
Inwardness, intellectual or otherwise, is the source and the safeguard of individual human flourishing, without which no community is judged to do well. Individuals must experience their learning as a mode of freedom and spontaneity, not a complex navigation of yet another structure of authority and achievement.
[curiosity] [joy]
[This, I think, is] the role of information curators (and teachers?): They are our curiosity sherpas, who lead us to things we didn’t know we were interested in until we, well, until we are. Until we pay attention to them — because someone whose taste and opinion we trust points us to them, and we integrate them with our existing pool of resources, and they become a part of our networked knowledge and another LEGO piece in our combinatorial creativity.
[creativity] [curiosity]
(see also [[A feature of modern life that is impossible to ignore: the incredible proliferation of ideas, information, images, disciplinary knowledge, and material products that we're all witnessing today. Such proliferation makes the activities of filtering, enabling, synthesizing, framing, and remembering more and more important as basic navigational tools for 21st century life.]])
Information is a difference that makes a difference.
In terms of [[Claude Shannon]]'s //A Mathematical Theory of Communication//, there’s a way of seeing information as "a difference that makes a difference."
See [[the context in which Gregory Bateson had said this|http://www.informationphilosopher.com/solutions/scientists/bateson/]].
(see [[Daniel Hillis]]'s take on [[information, control, and amplification|Amplification allows the difference that makes a difference to make a difference.]])
Or as [[Ray Kurzweil]] observed:
>Neither noise nor information is predictable. Noise is inherently unpredictable, but carries no information. Information, however, is also unpredictable. If we can predict future data from past data, then that future data stops being information.
From the [[Information Philosopher Encyclopedia on Emergence|http://www.informationphilosopher.com/knowledge/emergence.html]]:
Information is neither matter nor energy, although it needs matter to be embodied and energy to be communicated.
Inside every large program is a small program struggling to get out.
[minimalism] [elegance] [coding]
Insofar as the laws of mathematics refer to reality, they are not certain. And insofar as they are certain, they do not refer to reality.
Instead of resisting any emotion, the best way to dispel it is to enter it fully, embrace it and see through your resistance.
What I do wish to maintain — and it is here that the scientific attitude becomes imperative — is that insight, untested and unsupported, is an insufficient guarantee of truth, in spite of the fact that much of the most important truth is first suggested by its means… But in fact the opposition of instinct and reason is mainly illusory.
''Instinct, intuition, or insight is what first leads to the beliefs which subsequent reason confirms or confutes; but the confirmation, where it is possible, consists, in the last analysis, of agreement with other beliefs no less instinctive. Reason is a harmonising, controlling force rather than a creative one. Even in the most purely logical realm, it is insight that first arrives at what is new.''
[...]
Instinct, like all human faculties, is liable to error. Those in whom reason is weak are often unwilling to admit this as regards themselves, though all admit it in regard to others. Where instinct is least liable to error is in practical matters as to which right judgment is a help to survival: friendship and hostility in others, for instance, are often felt with extraordinary discrimination through very careful disguises. But even in such matters a wrong impression may be given by reserve or flattery; and in matters less directly practical, such as philosophy deals with, very strong instinctive beliefs are sometimes wholly mistaken, as we may come to know through their perceived inconsistency with other equally strong beliefs.
It is such considerations that necessitate the harmonising mediation of reason, which tests our beliefs by their mutual compatibility, and examines, in doubtful cases, the possible sources of error on the one side and on the other. In this there is no opposition to instinct as a whole, but only to blind reliance upon some one interesting aspect of instinct to the exclusion of other more commonplace but not less trustworthy aspects. It is such one-sidedness, not instinct itself, that reason aims at correcting.
Intellectual courage consists in actively and vitally preserving this instant of nascent knowledge*, of making it the unceasing fountain of our intuition, and of designing, with the subjective history of our errors and faults, the model of a better, more illuminated life.
----
* in this case, insight about the nature of time, but can be about any insight or flash of understanding.
Intelligence and culture in the service of adaptation and survival:
Civilization is to groups what intelligence is to individuals. It is a means of combining the intelligence of many to achieve ongoing group adaptation. Civilization, like intelligence, may serve well, serve adequately, or fail to serve its adaptive function. When civilization fails to serve, it must disintegrate unless it is acted upon by unifying internal or external forces.
It would be very convenient if intelligence were an emergent behavior of randomly connected neurons in the same sense that snowflakes and whirlpools are the emergent behaviors of water molecules. It might then be possible to build a thinking machine by simply hooking together a sufficiently large network of artificial neurons. The notion of emergence would suggest that such a network, once it reached some critical mass, would spontaneously begin to think.
Unfortunately, as a practical approach to construction, the idea tends to be unproductive. The concept of emergence, in itself, offers neither guidance on how to construct such a system nor insight into why it would work.
Ironically, this apparent inscrutability accounts for much of the idea's continuing popularity, since it offers a way to believe in physical causality while simultaneously maintaining the impossibility of a reductionist explanation of thought. For some, our ignorance of how local interactions produce emergent behavior offers a reassuring fog in which to hide free-will.
: -- from [[his|Daniel Hillis]] article [["Intelligence as an Emergent Behavior or, The Songs of Eden"|http://longnow.org/about/articles/ArtEden.html]].
Intelligence is just a tool to be used toward a goal, and goals are not always chosen intelligently.
Maxim #39: Interest speaks all sorts of tongues and plays all sorts of characters; even that of disinterestedness.
and Maxim # 40: Interest blinds some and makes some see.
from [[Reflections or Sentences and Moral Maxims|https://www.gutenberg.org/files/9105/9105-h/9105-h.htm]] By Francois Duc De La Rochefoucauld, Prince de Marsillac.
The goal of self awareness is actionable insight you can use to change your life for the better.
Self awareness involves three elements to get you where you want to go:
* Introspection is “the process of attempting to directly access one’s own internal psychological processes, judgments, perceptions, or states.”
* Self reflection involves the “examination, contemplation, and analysis of one’s thoughts, feelings, and actions.”
* Insight is “the clear and often sudden discernment of a solution to a problem.” It’s the result of self reflection and introspection.
Introspection gives you access to understanding yourself, self reflection lets you process what you learn, and insights are the answers you come up with and that you can act upon.
:-- from his [[blogpost on introspection|https://www.nirandfar.com/introspection/]].
"Hlör u fang axaxaxas mlö"^^1^^ is a particularly fine example of linguistic invention—of the mad variety of imaginary words and grammars, their proliferation into jungles of exuberant glossolalia—the laborious delight with which sane people translate utter, deliberate nonsense into English, and vice versa—the touching spectacle of poets blissfully writing poems in languages nobody ever heard or heard of.
This is a side of humanity I like very much. These are people doing what only people can do, a peculiarly human and peculiar thing. They do it without malice, and without any gain or profit in sight except the increase of pleasure. If the pleasure can be shared, so much the better; but the thing is done, like most good things and all art, for the doing of it.
[playfulness]
(see also what [[she|Ursula K. Le Guin]] said [[about translating invented languages|The difficulty of translation from a language that doesn't yet exist is considerable, but there's no need to exaggerate it. The past, after all, can be quite as obscure as the future.]]).
----
^^1^^ In the story [["Tlön, Uqbar, Orbis Tertius"|http://www.coldbacon.com/writing/borges-tlon.html]] by [[Jorge Luis Borges]] he makes up a language which has no nouns, which are all replaced by a cluster of adjectives. In that language, the sentence should be translated into English as: upward, behind the onstreaming it mooned (roughly meaning: The moon rose over the sea).
When asked by a reporter how it felt to fail so many times before successfully inventing the lightbulb, Thomas Edison replied,
"my good man, I did not fail. I invented the lightbulb. And it was a 2,000 step process."
"""
Inventory
Four be the things I am wiser to know:
Idleness, sorrow, a friend, and a foe.
Four be the things I'd been better without:
Love, curiosity, freckles, and doubt.
Three be the things I shall never attain:
Envy, content, and sufficient champagne.
Three be the things I shall have till I die:
Laughter and hope and a sock in the eye.
"""
:: -- First printed in Life, (11 November 1926) p. 12
What's the difference between someone being Invested vs. them being Committed?
This is best explained by an example (agreeing with [[Einstein|Albert Einstein]]'s [[pedagogic advice|Example isn't another way to teach, it is the only way to teach.]]):
when you cook ham and eggs, the chicken is invested, the pig is committed :)
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Is it more astonishing that a God created all that exists in six days, or that the natural processes of the creative universe have yielded galaxies, chemistry, life, agency, meaning, value, consciousness, culture without a Creator. In my mind and heart, the overwhelming answer is that the truth as best we know it, that all arose with no Creator agent, all on its wondrous own, is so awesome and stunning that it is God enough for me and I hope much of humankind.
: -- from his article [["BEYOND REDUCTIONISM: REINVENTING THE SACRED"|https://www.edge.org/conversation/stuart_a_kauffman-beyond-reductionism-reinventing-the-sacred]] in Edge.org
Is it progress if a cannibal uses a fork?
(compare to what [[Winston Churchill]] had to say about [[being right|It is a fine thing to be honest, but it is also very important to be right.]]).
Is mathematics invented or discovered? My preferred answer is neither. It exists independently of us humans, and we know about it, as we know about anything else, through explanations.
But if I were forced to stay in this framework of "invented or discovered," the answer would be that mathematics is discovered by methods we invent. However, one has to be careful here not to assume—as most people unfortunately do—that "discovery" or our methods are infallible. What we have "discovered" can always turn out to be wrong or incomplete.^^1^^
[...]
What we can know about mathematics depends on our (real) physical laws. If you accept that a mathematical proof is a physical process governed purely by physical laws, it follows that what proofs you can perform depends on the (real) laws of physics. Our knowledge about physical laws is irrelevant here, but the true laws of physics constrain what functions your brain can perform and, therefore, what proof we can come up with. This means that some theorems that are provably unprovable in our universe can be provable in a universe with different physical laws—and vice versa.
: -- from [[Sven Schnieders]]' post [["The Death of Intellectual Curiosity"|https://unfashionable.substack.com/p/the-death-of-intellectual-curiosity]]
----
^^1^^ Christopher Columbus "discovered India" (hence "Indians")...
Is not my knowing [the secrets of the universe] at all a gift and not a right? And shall it be given before they are given? Data! gifts! something to be to be thankful for! It is a gift that we can approach things at all, and, by means of the time and space of which our minds and they partake, alter our actions so as to meet them.
Is the amount of information inversely proportional to wisdom? As information surges, will noise swamp signals? Will the false and trivial overwhelm the true and meaningful?^^1^^
[As [[James Gleick]] writes:] Every information technology, has aroused these sorts of concerns. Plato worried that writing would lead to mental laziness, but without writing we might not know that Plato ever existed.
Meaningless disorder is to be challenged, not feared^^1^^. We can be overwhelmed or emboldened. Neither information theory—as [[Claude Shannon]] often emphasized—nor any other methodology can find meaning for us. Each of us has to discover—or create—meaning on our own.
----
^^1^^ see [[Edna St. Vincent Millay]]'s worries about [[facts vs. knowledge and wisdom|Sonnet X from Huntsman, What Quarry? - poem by Edna St. Vincent Millay]]
known for Science Fiction writing.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Isn't it enough to see that a garden is beautiful without having to believe that there are fairies at the bottom of it too?
See [[a different angle/dimension on this by Richard Feynman|Scientific knowledge only adds to the appreciation of beauty; it does not subtract.]]
<<list-links "[tag{!!title}]">>
It [evolution] was a concept of such stunning simplicity, but it gave rise, naturally, to all of the infinite and baffling complexity of life. The awe it inspired in me made the awe that people talk about in respect of religious experience seem, frankly, silly beside it. I'd take the awe of understanding over the awe of ignorance any day.
It feels good to be lost in the right direction.
It goes against the grain of modern education to teach students to program. What fun is there to making plans, acquiring discipline, organizing thoughts, devoting attention to detail, and learning to be self critical.
Replaced ''religion'' with ''spirituality'':
It has been often said, very truly, that spirituality is the thing that makes the ordinary man feel extraordinary; it is an equally important truth that spirituality is the thing that makes the extraordinary man feel ordinary.
It has been said that democracy is the worst form of government except all the others that have been tried.
Or, relatedly, as [[Stephen Fry]] had observed:
> Mankind can live free in a society hemmed in by laws, but we have yet to find a historical example of mankind living free in lawless anarchy.”
: ― from [[his|Stephen Fry]] book //The Ode Less Travelled: Unlocking the Poet Within//
This is also reflected in the [[commencement speech given by Joseph Brodsky|https://www.brainpickings.org/2013/12/18/joseph-brodsky-speech-at-the-stadium-commencement/]], where he said:
> a democracy is this halfway house between nightmare and utopia — since it throws fewer obstacles in the way of an individual than its alternatives.
This is echoed by [[Carl Sagan]] who had said:
>Science is far from a perfect instrument of knowledge. It’s just the best we have. In this respect, as in many others, it’s like democracy. Science by itself cannot advocate courses of human action, but it can certainly illuminate the possible consequences of alternative courses of action.
But [[Winston Churchill]] also said:
> Democracy is a government where you can say what you think even if you don't think.
But [[David Deutsch]] (in his book "//The Beginning of Infinity: Explanations That Transform the World//") wrote:
> Good political institutions are those that make it as easy as possible to detect whether a ruler or policy is a mistake, and to remove rulers or policies without violence when they are.
It has often been said that power corrupts. But it is perhaps equally important to realize that weakness, too, corrupts. Power corrupts the few, while weakness corrupts the many.
But as [[Charles Caleb Colton]] had said:
> Power will intoxicate the best hearts, as wine the strongest heads. No man is wise enough, nor good enough to be trusted with unlimited power.
It is a common illusion that something is wrong //because// we are sad, rather than that nothing is wrong //although// we are sad.
It is a fine thing to be honest, but it is also very important to be right.
or as [[Stephen Fry]] observed:
> Seriousness is no more a guarantee of truth, insight, authenticity or probity, than humour is a guarantee of superficiality and stupidity.
(compare to what [[Stanislaus Lec]] had to say [[about morality|Is it progress if a cannibal uses a fork?]])
(also compare to what [[Vaclav Havel]] had said about [[strong character|Vision is not enough. It must be combined with venture. It is not enough to stare up the steps, we must step up the stairs.]]).
On the flip side, as Granny Weatherwax (a Senior Witch, in [[Terry Pratchett]]'s book //Wyrd Sisters//) had said:
> ''We’re bound to be truthful, but there’s no call to be honest.''
It is a profoundly erroneous truism, repeated by all the copybooks, and by eminent people when they are making speeches, that we should cultivate the habit of thinking what we are doing. The precise opposite is the case. Civilization advances by extending the number of operations which we can perform without thinking about them. Operations of thought are like cavalry charges in a battle -they are strictly limited in number, they require fresh horses, and must only be made at decisive moments.
:: - Alfred North Whitehead (in "An Introduction to Mathematics")
Or as [[Jonathan Fields|https://www.jonathanfields.com/]] suggested:
> Ritualize the mundane to make room for the brilliant.
(Compare to [[Edward de Bono]]'s take [[on automating patterns and creativity|The pattern using system is a very efficient way of handling information... Insight and humour both involve the restructuring of patterns. Creativity also involves restructuring but with more emphasis on the escape from restricting patterns. Lateral thinking involves restructuring, escape and the provocation of new patterns.]])
See what [[James Clear]] had to say about [[deliberate practice|The greatest challenge of deliberate practice is to remain focused. In the beginning, showing up and putting in your reps is the most important thing. But after a while we begin to carelessly overlook small errors and miss daily opportunities for improvement. This is because the natural tendency of the human brain is to transform repeated behaviors into automatic habits.]].
It is a trite but true observation, that examples work more forcibly on the mind than precepts.
It is better to solve the right problem the wrong way than the wrong problem the right way.
([[My|Haggai Mark]] interpretation of why?: because if you solve the right problem the wrong way, you have the opportunity to learn from this something of value. You will learn either way, but is learning something about the wrong problem worth it? :)
It is by logic that we prove, but by intuition that we discover.
נהוג לחשוב שהשכחה הינה חסרון. אני סבור שהיא יתרון. לדעת לשכוח, פירושו להשתחרר מכל תלאות העבר
Nahug lachshov she'hashikhe'cha hina chisaron. Ani savur she'hi yitaron. Lada'at lishko'ach, peyrusho le'hishtachrer mi'kol tla'ot ha'avar.
It is customary to consider forgetfulness a disadvantage. I believe it is an advantage. Knowing to forget, means loosening the troubles of the past.
"""
"""
It's interesting, and telling, I think, that the Rabbi is using the word "Lada'at" (to know).
I interpret this as pointing to a deliberate act of "forgetting". This reminds me of what [[Dag Hammarskjold]] said:
> Forgiving is forgetting, in spite of remembering.
It is easier to go down a hill than up, but the view is from the top.
It is easier to write an incorrect program than understand a correct one.
It is easy to think to oneself that one’s emotions used to be more vivid than they are, and one’s mind more keen. If this is true it should be forgotten, and if it is forgotten it will probably not be true.
It is essential to employ, trust, and reward those whose perspective, ability, and judgment are radically different from yours. It is also rare, for it requires uncommon humility, tolerance, and wisdom.
(see also [[On Conceptual Integrity and human character]] by [[Fred Brooks]]).
It is experience which shapes a language; and it is language which controls an experience.
-- [[quoted in BrainPickings|https://www.brainpickings.org/2016/11/11/james-baldwin-shakespeare-language-poetry/]]
It is good to have an end to journey toward, but it is the journey that matters in the end.
It is idle, having planted an acorn in the morning, to expect that afternoon to sit in the shade of the oak.
It is impossible to sharpen a pencil with a blunt axe. It is equally vain to try to do it with ten blunt axes instead.
[effectiveness] [efficiency]
"""
To you the earth yields her fruit, and you shell not want if you but know how to fill your hands.
It is in exchanging the gifts of the earth that you shall find abundance and be satisfied.
Yet unless the exchange be in love and kindly justice, it will but lead some to greed and others to hunger.
"""
:-- from [[his| Kahlil Gibran]] poem [[On Buying and Selling|https://poets.org/poem/buying-and-selling-0]]
[giving and receiving presents] [generosity]
It is much easier to make good men wise, than to make bad men good.
It is not bigotry to be certain we are right; but it is bigotry to be unable to imagine how we might possibly have gone wrong.
<<comparequote "Winston Churchill" "A fanatic is one who can't change his mind and won't change the subject." "fanaticism">>
[[Rabbi Tarfon]] said: it is not for you to finish the task/work, but nor are you free to desist from it.^^1^^
In [[Pirkei Avot 2:16|https://www.sefaria.org/Pirkei_Avot.2?lang=bi]]
לֹא עָלֶיךָ הַמְּלָאכָה לִגְמוֹר, וְלֹא אַתָּה בֶן חוֹרִין לִבָּטֵל מִמֶּנָּה,
(lo alecha hamelacha ligmor, velo ata ben chorin libatel mimena)
This may be echoed in [[David Whyte]]'s observation:
> We are the ending of some stories, the carrying on of others, and often just the beginning of many it is not our place to finish.
Or Also,
> My undertaking is not difficult, essentially. I should only have to be immortal to carry it out. (from [[Jorge Luis Borges Quotes]]).
Compare this to [[Shunryu Suzuki]]'s [[You are perfect the way you are, and you can use a little improvement.]]
where it has a similar flavor of combining neatly self-acceptance with personal growth (in the case of Suzuki) and (I think, one interpretation of) [[Tikkun Olam]] (in the case of [[Rabbi Tarfon]]).
Which, I think, is posing a "balanced dichotomy' similar to the one expressed by [[Johann Wolfgang von Goethe]]:
>There are two things of which a man cannot be careful enough: of obstinacy if he confines himself to his own line of thought; of incompetency, if he goes beyond it.
or as [[Charles Caleb Colton]] remarked in the same spirit:
> He that has energy enough to root out a vice should go further, and try to plant a virtue in its place. [ [[Tikkun Olam]] ]
Or as said [[Janna Levin]] (in [[a conversation|https://www.brainpickings.org/2015/01/09/krista-tippett-einsteins-god-janna-levin/]] with [[Krista Tippett]], regarding the possible implications of [[Rabbi Tarfon]]'s saying on free will:
> If I conclude that there is no free will, it doesn’t mean that I should go run amok in the streets. I’m no more free to make that choice than I am to make any other choice.
----
^^1^^ because, as [[Octavia E. Butler]] had said:
> There is no end to what a living world will demand of you.
It is not the answer that enlightens, but the question.
It is not the strongest of the species that survives, nor the most intelligent that survives. It is the one that is most adaptable to change.
It is not worth an intelligent person's time to be in the majority. By definition, there are already enough people to do that.
(compare to [[Oscar Wilde]]'s [[logical observation|Be yourself; everyone else is already taken.]])
[individuality] [politics]
It is one of the most beautiful compensations of life that no man can sincerely try to help another without helping himself.
It is our duty not to suppress tenderness by suspicion; it is better to suffer wrong than to do it, and happier to be sometimes cheated than not to trust.
(I think that it's good advice for teachers dealing with students :)
It is possible to live almost without remembering, indeed, to live happily, as the beast demonstrates; however, it is generally completely impossible to live without forgetting. Or, to explain myself more clearly concerning my thesis: There is a degree of insomnia, of rumination, of the historical sense, through which living comes to harm and finally is destroyed, whether it is a person or a people or a culture.
[...]
for the health of a single individual, a people, and a culture the unhistorical and the historical are equally essential.
: -- from [[his|Friedrich Nietzsche]] essay [["On the Use and Abuse of History for Life"|https://la.utexas.edu/users/hcleaver/330T/350kPEENietzscheAbuseTableAll.pdf]]
Life can only be understood backwards; but it must be lived forwards.
Det er ganske sandt, hvad Philosophien siger, at Livet maa forstaaes baglaends. Men derover glemmer man den anden Saetning, at det maa leves forlaends. Hvilken Saetning, jo meer den gjennemtaenkes, netop ender med, at Livet i Timeligheden aldrig ret bliver forstaaeligt, netop fordi jeg intet Øieblik kan faae fuldelig Ro til at indtage Stillingen: baglaends.
("It is really true what philosophy tells us, that life must be understood backwards. But with this, one forgets the second proposition, that it must be lived forwards. A proposition which, the more it is subjected to careful thought, the more it ends up concluding precisely that life at any given moment cannot really ever be fully understood; exactly because there is no single moment where time stops completely in order for me to take position [to do this]: going backwards."
Often shortened to "Life can only be understood backwards; but it must be lived forwards" -- in Danish, Livet skal forstaas baglaens, men leves forlaens.)
<<comparequote "Steve Jobs" "You can’t connect the dots looking forward; you can only connect them looking backwards." "reflection and living">>
<<comparequote "Wendy Lustbader" "Just as an Impressionist painting becomes coherent only at a distance, a lifetime is a journey whose full meaning only becomes comprehensible over time." "reflection and living">>
It is said that over the music of Beethoven is spread the twilight of eternal loss and eternal hope. The same goes for life, except for the eternal part.
(from the movie "Coda" starring Patrick Stewart (as a superb aging pianist), and Katie Holmes (as a young music reporter))
[mindfulness] [compassion]
It is said that your life flashes before your eyes just before you die. That is true, it's called Living.
It is software that gives form and purpose to a programmable machine, much as a sculptor shapes clay.
It is stupid to claim that birds are better than frogs because they see farther, or that frogs are better than birds because they see deeper. The world is both broad and deep. We need birds and frogs working together to explore it.
: -- from [[David Epstein]]'s book "Range - Why generalists triumph in a specialized world"
It is the final proof of God's omnipotence that he need not exist in order to save us.
It is the most persistent and greatest adventure in human history, this search to understand the universe, how it works and where it came from. It is difficult to imagine that a handful of residents of a small planet circling an insignificant star in a small galaxy have as their aim a complete understanding of the entire universe, a small speck of creation truly believing it is capable of comprehending the whole.
It is the supreme art of the teacher to awaken joy in creative expression and knowledge.
It is true that altered states of consciousness are more likely as one gets better at meditation, just as good moves are more likely as one gets better at chess. But these are the cart that follows after the horse of skill.
Making good moves does not make one better at chess – practicing chess correctly makes one better at chess, and thereby increases the likelihood of making good moves.
Similarly, having unusual experiences does not make one a better meditator; practicing meditation correctly makes one a better meditator, and //may// increase the likelihood of unusual experiences.
But the author cautions:
>This analogy isn’t perfect because one assesses the skill of chess players by their ability to make good moves, but skill at meditation is certainly not measured by how often one has unusual experiences.
>
>The only way to get better at meditation, and to maximally benefit from the many fruits meditation practice has to offer, is to practice meditation well^^1^^. One-off unusual experiences may be encouraging and fun, but they are a symptom of progress, not the means. Trying to progress by generating unusual experiences is a dead end.
: -- from [[a blog entry|http://rationaldharma.com/blog/i-wasted-8-years-of-meditation-because-i-didnt-understand-these-4-things/]] at rationaldharma.com (by Ollie.shinkai, AKA RationalShinkai, AKA Ollie Bray?)
----
^^1^^ see what [[James Clear]] had to say about [[deliberate practice|The greatest challenge of deliberate practice is to remain focused. In the beginning, showing up and putting in your reps is the most important thing. But after a while we begin to carelessly overlook small errors and miss daily opportunities for improvement. This is because the natural tendency of the human brain is to transform repeated behaviors into automatic habits.]].
[skill acquisition] [practice] [meditation] [deliberate practice]
From her book [[Lighthousekeeping|https://en.wikipedia.org/wiki/Lighthousekeeping]]^^1^^:
Some people say that the best stories have no words. They weren't brought up to Lighthousekeeping. It is true that words drop away, and that the important things are often left unsaid. The important things are learned in faces, in gestures, not in our locked tongues. The true things are too big or too small, or in any case always the wrong size to fit the template called language.
I know that. But I know something else too, because I was brought up to Lighthousekeeping. Turn down the daily noise and at first there is the relief of silence. And then, very quietly, as quiet as light, meaning returns. Words are the part of silence that can be spoken.
----
^^1^^ - on the art of lighthousekeeping (from the book):
> Every lighthouse has a story to it - more than one, and if you sail from here to America, there'll not be a light you pass where the keeper didn't have a story for the seamen. In those days the seamen came ashore as often as they could, and when they put up at the inn, and they had eaten their chops and lit their pipes and passed the rum, they wanted a story, and it was always the lighthousekeeper who told it, while his Second or his wife stayed with the light.
>
>These stories went from man to man, generation to generation, hooped the sea-bound world and sailed back again, different decked maybe, but the same story. And when the lightkeeper had told his story, the sailors would tell their own, from other lights. A good keeper was one who knew more stories than the sailors.
It is vital to remember that information – in the sense of raw data – is not knowledge, that knowledge is not wisdom, and that wisdom is not foresight. But information is the first essential step to all of these.
It is well to remember that the entire universe, with one trifling exception, is composed of others.
[humbleness] [consideration] [respect]
(see also what [[Piet Hein]] had to say about [[respect and freedom|Freedom means you're free to do just whatever pleases you; — if, of course that is to say, what you please is what you may.]].
(compare to [[what Douglas Adams had to say about freedom|The American idea of freedom has more to do with my freedom to do what I want than your freedom to do what you want.]])
It is well, when judging a friend, to remember that he is judging you with the same godlike and superior impartiality.
[humility] [forgiveness]
It is worth pausing for a moment to consider how far our conclusions are affected by considerations which our simplifying assumptions have forced us to neglect.
[humility] [caution] [carefulness]
It may be possible to lie with statistics, but it is easier to lie without them.
:: - Hetan Shah of the Royal Statistical Society
"""
It may be that when we no longer know what to do
we have come to our real work,
and that when we no longer know which way to go
we have come to our real journey.
The mind that is not baffled is not employed.
The impeded stream is the one that sings.
"""
: -- from his book of poems //Standing by Words//
The human intellect, in its ineptitude to pursue what is vital, immobilizes time within an ever-artificial present. Such present is pure nothingness — a nothingness that cannot even succeed at truly separating past from future.
It seems indeed that the past carries its forces into the future, and that the future is necessary as an outlet for forces issuing form the past. A single sweeping life force, an identical élan vital, would thus suffice to consolidate duration. Thought, as a fragment of life, should not impose its rules upon life.
Devoted as it is to the contemplation of static being, of spatial being, the intellect must guard against misunderstanding the reality of becoming… It then becomes necessary for us to take time as a whole, if we are to grasp its reality.
Time is at the very source of the élan vital. Though life may be showered with flashes of insight, it is truly duration that explains life.
(compare/contrast to [[We enter into each moment holding hands with a future composed of infinite possibilities and a past composed of infinite realities.]]).
[momentariness]
It seems to me that beliefs about the future are so rarely correct that they usually aren’t worth the extra rigidity they impose, and that the best strategy is simply to be aggressively open-minded. Instead of trying to point yourself in the right direction, admit you have no idea what the right direction is, and try instead to be super sensitive to the winds of change.
This is similar to how [[Charlie Munger|https://en.wikipedia.org/wiki/Charlie_Munger]] expressed the advice:
>Don’t try to predict the future, but instead collect models and metaphiers [the tool/process/reference point used to explain something] so that you’ll recognize opportunity for new combinations, patterns, and ideas when they come.
: -- from an essay [[Metaphors and mental models: the key to understanding/|http://investorfieldguide.com/metaphors-and-mental-models-the-key-to-understanding/]] by [[Patrick O’Shaughnessy|http://investorfieldguide.com/about/]]
It takes two people to make you, and one people to die. That's how the world is going to end.
It turns out that an eerie type of chaos can lurk just behind a facade of order - and yet, deep inside the chaos lurks an even eerier type of order.
: -- from his [[Metamagical Themas: Questing for the Essence of Mind and Pattern|http://avalonlibrary.net/ebooks/Douglas%20Hofstadter%20-%20Metamagical%20Themas.pdf]]:
About an exceptional wit and quip-maker:
It was seldom that she came out with anything that was not both as pointed and as pleasantly formed as a hedgehog.
: -- from [[her|Maria Gainza]] book //"The Lady Vanishes"//
[style] [speaking] [expression]
A friend I loved very much died recently, and I (Joel Lovell) was trying to describe the state I sometimes still found myself in — not quite of this world, but each day a little less removed — and how I knew it was a good thing, the re-entry, but I regretted it too, because it meant the dimming of a kind of awareness that doesn’t get lit up very much.
“It would be so interesting if we could stay like that,” Saunders said, meaning: if we could conduct our lives with the kind of openness that sometimes comes with proximity to death.
: -- from an interview of [[George Saunders]] by Joel Lovell in the NYT titled [["George Saunders Has Written the Best Book You’ll Read This Year"|https://www.nytimes.com/2013/01/06/magazine/george-saunders-just-wrote-the-best-book-youll-read-this-year.html]]
It's a fine night to have an evening.
See also [[Yogi Berra - on everything (and nothing?)]]
It's a little like wrestling a gorilla. You don't quit when you're tired, you quit when the gorilla is tired.
[stamina] [grit] [perseverance] [determination]
<<comparequote "George Bernard Shaw" "Never wrestle with a pig. You both get dirty, and besides, the pig likes it." "arguing and struggling">>
It's a useful habit never to believe more than half of what people tell you, and not to concern yourself with the rest. Rather keep your mind free and your path your own.
::― Halldór Laxness, Independent People
It's about Big Meaning, not Big Data.
Said Alan Kay in a talk which opens with his thoughts on "Big Data":
>Big data is a way that a lot of people are trying to make money today. And it's a favorite of marketing people, because it's in the wind. Everybody has heard the phrase “big data.” Not everybody knows what it means. And so it's the perfect context for doing things that people can say, “Well this is an application of big data and this is an application of big data.” But in fact, the interesting future's not about data at all—it's about meaning.
[[Kay commented on it|https://news.ycombinator.com/item?id=11803165]] later saying:
> the real issues are not "big data" but "big understanding", not "Machine Learning" but "Machine Thinking". [...T]he "[[Dream Machine|http://www.nytimes.com/2001/10/07/books/review/07PAULOST.html]]" [ [[book|https://www.amazon.com/Dream-Machine-Licklider-Revolution-Computing/dp/014200135X]] ] is about how the funders were willing to put forth considerable resources for "problem finding" not just "problem solving" -- a lot more of that needs to be done today.
You can watch the whole [[TED Talk: The Future Doesn't Have to Be Incremental|https://www.youtube.com/watch?v=gTAghAJcO1o]] (on ~YouTube)
In [[another TED Talk|http://ed.ted.com/lessons/the-rise-of-human-computer-cooperation-shyam-sankar]] Shyam Sankar, said: "it's not a question of how to compute things, but what to compute". His point was that you have to include the humans and human values in the picture.
From Robert Townsend's classic book Up The Organization comes this beauty. It has short alphabetical chapters and the chapter called "Killing Things, V.P. in Charge of" has this:
It's about eleven times as easy to start something as it is to stop something. But ideas are good for a limited time--but not forever. Dr. Robert Sobel, Associate Professor of History at Hofstra University says that the British created a civil-service job in 1803 for a man to stand on the Cliffs of Dover with a spyglass. He was supposed to ring a bell if he saw Napoleon coming. The job was abolished in 1945.
From Ariel Foxman's blogpost titled [["Always On Time"|https://arielfoxman.substack.com/p/always-on-time]]
(and the byline is: Rosh Hashanah may be "early" this year, but parents know there's nothing quite as compelling as the here and now).
Hang around even the most remotely observant Jewish people long enough, and you’ll likely hear us remark about how a given holiday is either early or late in the calendar.
[...]
Rosh Hashanah is traditionally a holiday that feels like the arrival of fall. Kids debut new clothes in heavier fabrics and rich tones at High Holiday services. The festival’s focus on purpose and renewal jives well with the whole “back to school” vibe we all feel as September moves into high gear. And, of course, apples figure quite prominently.
[...]
But this year, the super-early timing won’t lend itself to that cherished, nostalgic Rosh mood. Landing on Labor Day, this Rosh Hashanah will inevitably feel bound up with summer-vacation energy. Too warm for wine-hued wool. Too languid for new beginnings. And while Starbucks has been selling its bellwether Pumpkin Spice Latte since August 24 this year, we’ll probably still have piles of apricots, not apples, in the crisper.
Nevertheless, the holiday persists. And that’s because it’s Rosh Hashanah’s content, not its context, that truly matters. When sundown caps off the Labor Day weekend on that Monday evening, Jews everywhere will switch hearts and minds over to the holiday’s primary preoccupations: joy, gratitude, love, and forgiveness. We will evaluate our actions and our intentions. We will think about the coming year and how we can ensure a sweet and peaceful outcome not only for ourselves and our families but also for the world at large. And while there will definitely be more shvitzing in shul this Rosh, our internal thermostats will delicately settle in at a temperate “reflect and chill”.
[...]
[Unfortunately, as parents] We are encouraged not necessarily to support our children’s development as it unfolds organically but rather to match that development against averages and fixed measurements. How does my child compare? Is she on target? Are they lagging, or is he beating some sort of cumulative curve?
What’s always true though, no matter the noise, is that our children—all children—are realizing themselves as they are meant to be, in their own ways, and on their own timelines. The context will never trump the content. Just like the lunar calendar, kids will do their thing, regardless. External influences or overlapping grids can never hasten or hinder what is destined to happen ordinarily. We ought to think of ‘early’ and ‘late’ as unwelcome, judgmental distractions.
----
email message:
Shana Tova!
Well, it is early this year.
Hang around a Jew long enough, and you’ll likely hear us remark about how a given holiday is either early or late in the calendar :)
Rosh Hashanah is traditionally a holiday that feels like the arrival of fall. Adults and kids start wearing clothes in heavier fabrics and rich tones, and so on. The holiday’s focus on purpose and renewal goes well with the whole “back to school” vibe we all feel as September moves into high gear. And, of course, apples figure quite prominently.
But this year, the super-early timing won’t lend itself to that cherished, nostalgic Rosh mood. Nevertheless, the holiday persists (or as [[Robert Frost]] had said: [[Life goes on|In three words I can sum up everything I've learned about life: It goes on.]]). And that’s because it’s Rosh Hashanah’s content, not its context, that truly maters. So this year, on the day, at sundown, many Jews everywhere will switch hearts and minds over to the holiday’s primary preoccupations: new beginnings, joy, gratitude, love, and forgiveness.
So, let's hope we can enjoy and appreciate the things we have, since gratitude is like a flashlight. It lights up what is already there.
You don't necessarily have anything more or different, but suddenly you can actually see what is. And because you can see, you no longer take it for granted.^^1^^
----
^^1^^ as [[M.J. Ryan]] [[had said|Gratitude is like a flashlight. It lights up what is already there. You don't necessarily have anything more or different, but suddenly you can actually see what is. And because you can see, you no longer take it for granted.]].
[Jewish holidays]
Each moment is new and full of possibilities, so how can we expect to know anything about it, if we are dozing?
''It's good not to be lulled into a false sense of security and stability. We like things to be consistent and predictable, so that our sleep won't be disturbed.''
:-- from her book //That Which You Are Seeking Is Causing You To Seek//
It's not enough that we do our best; sometimes we have to do what's required.
"""
"""
compare to [[Robert Brault]]:
>Nothing supports evil like the assumption of good people that there is some sort of line it will not cross.
"""
"""
Compare to [[Sarah Manguso]]:
>The will can achieve some things, but one must exhaust one’s will in order to learn which things they are.
It's okay to worry, plot, and plan — but only until it's not useful anymore.
From the interesting, insightful, funny book //"10% Happier"// by [[Dan Harris]], about his 10 day Buddhist retreat experience.
From a question and answer session lead by Joseph Goldstein:
:{{imgquote}} I ask, "How can you advise us not to worry about the things we have to do when we reenter the world [after the 10 day retreat is over]? If I miss my plane, that's a genuine problem. These are not just irrelevant thoughts."
:{{imgblank}}
: "Fair enough" [Goldstein] concedes. "But when you find yourself running through your trip to the airport for the seventeenth time, perhaps ask yourself the following question: 'Is this useful'?"
:{{imgblank}}
His answer is so smart I involuntarily jolt back in my chair and smile.
:{{imgquote}} "Is this useful?" It's a simple, elegant corrective to my "price of security" motto. It's okay to worry, plot, and plan, he's saying -- but only until it's not useful anymore. I've spent the better part of my life trying to balance my penchant for maniacal overthinking with the desire of peace of mind. And here, with one little phrase, Goldstein has handed me what seems like a hugely constructive tool for taming this impulse [[without throwing the baby out with the bathwater|Often, throwing the baby with the bath water is throwing out too much.]].
It's too late to be ready.
My thoughts on this:
if one wants to express the idea (truism) that one can //never// be ready, one might try saying "it's two //early// to be ready". ''But'', the latter sentence implies that at one point in time one may be able to be ready (when the time comes). So, saying //that// is not correctly capturing the sentiment.
And so, one is left with the other alternative, and //has// to say: "it's too //late// to be ready."
It's very difficult to predict; especially the future.
But, on the other hand, [[Claude Shannon]] had said:
> It’s impossible to overestimate the future.
(compared to [[Peter Drucker|I never predict, I just look out the window and see what's visible - but not yet seen.]])
<<comparequote "G. K. Chesterton" "I agree with the realistic Irishman who said he preferred to prophesy after the event." "predicting">>
But as [[Colin Blakemore|https://www.edge.org/memberbio/colin__blakemore]]'s "Second Law" states:
>The only form of intelligence that really matters is the capacity to predict.
[[Soren Kierkegaard]] had a pessimistic twist on this:
>[[The most painful state of being is remembering the future, particularly the one you'll never have.]]
It's wrong to think that the past is something that’s just gone. It’s still there. It’s just that you’ve gone past. If you drive through a town, it’s still there in the rear-view mirror. Time is a road, but it doesn’t roll up behind you. Things aren’t over just because they’re past.
While it is important to be optimistic about the things you control, being optimistic about the world outside of your control often just sets you up to suffer that much more when things don’t go your way. Another way to think about this is that ''it’s best to be pessimistic about the actions of the world around you, but optimistic in your own ability to surmount those obstacles — outward pessimist, inward optimist.''
Or as [[Marcus Aurelius]] wrote in his diary:
> When you wake up in the morning, tell yourself: The people I will deal with today will be meddling, ungrateful, arrogant, dishonest, jealous and surly.
[stoicism]
It’s clear that you cannot pin yourself down as any one particular “thing” but rather that you resemble a story line, an endless progression, variations on a theme, something that enables you to relate your present “self” to the past and future ones.
It’s harder to be kind than clever. And there is a difference between gifts and choices.
Cleverness is a gift, kindness is a choice. Gifts are easy — they’re given after all. Choices can be hard. You can seduce yourself with your gifts if you’re not careful, and if you do, it’ll probably be to the detriment of your choices.
: -- from [[his|Jeff Bezos]] [[graduation speech at Princeton|https://jamesclear.com/great-speeches/what-matters-more-than-your-talents-by-jeff-bezos]]
It’s impossible to fail if one doesn’t know how the end should look. And it’s impossible to succeed. But it’s possible to enjoy.
It’s more like a corkscrew than a path!
: — Lewis Carroll (Through the Looking Glass, [[chapter 2|https://ebooks.adelaide.edu.au/c/carroll/lewis/looking/chapter2.html]])
Compare to [[what Terry Pratchett had to say|The road, one felt, had to go somewhere. This geographical fiction has been the death of many people. Roads don’t necessarily have to go anywhere, they just have to have somewhere to start.]]
It’s nonsense to say money can’t buy happiness. But people exaggerate the extent to which more money can buy more happiness.
It’s not that I’m so smart; it’s just that I stay with problems longer.
Or as (presumably) [[Isaac Newton]] said, “If others would think as hard as I did, then they would get similar results.”
<<list-links "[tag{!!title}]">>
A poem about returning home...
or living well... (until you die: כִּי־עָפָר אַתָּה, וְאֶל־עָפָר תָּשׁוּב (ki meafar ata/ba-atah ve-el afar tashuv))
"""
''Ithaka''
As you set out for Ithaka
hope the journey is a long one,
full of adventure, full of discovery.
[...]
Keep Ithaka always in your mind.
Arriving there is what you are destined for.
But do not hurry the journey at all.
Better if it lasts for years,
so you are old by the time you reach the island,
wealthy with all you have gained on the way,
not expecting Ithaka to make you rich.
Ithaka gave you the marvelous journey.
without her you would not have set out.
She has nothing left to give you now.
And if you find her poor, Ithaka won't have fooled you.
Wise as you will have become, so full of experience,
you will have understood by then what these Ithakas mean.
"""
(compare to [[Coming back to where you started is not the same as never leaving.]]).
John Burdon Sanderson Haldane FRS (Fellow of the Royal Society) (5 November 1892 – 1 December 1964)[1] was an English, later Indian scientist known for his work in the study of physiology, genetics, evolutionary biology, and in mathematics, where he made innovative contributions to the fields of statistics and biostatistics.
<<list-links "[tag{!!title}]">>
Joseph Carl Robnett Licklider, known simply as J. C. R. or "Lick", was an American psychologist and computer scientist who is considered one of the most important figures in computer science and general computing history (or a "[[CS Sage|https://en.wikipedia.org/wiki/List_of_computer_scientists]]").
<<list-links "[tag{!!title}]">>
one of the leading Buddhist teachers in America. A practitioner for over 40 years, he is one of the key teachers to introduce mindfulness and vipassana meditation to the West.
http://www.jackkornfield.org/home.php
<<list-links "[tag{!!title}]">>
H. Jackson Brown, Jr. is an American author best-known for his inspirational book, Life's Little Instruction Book, which was a New York Times bestseller (1991-1994), its sequel Life's Little Instruction Book: Volume 2 also made it to the same best seller list in 1993.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
wrote (with Shoshana Alexander) the book "Awakening Joy" - 10 steps that will put you on the road to real happiness.
<<list-links "[tag{!!title}]">>
His blog at https://jjbeshara.com/blog/
<<list-links "[tag{!!title}]">>
https://www.cato-unbound.org/contributors/james-c-scott
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
author of the book [[Wit's End|https://www.wsj.com/articles/wits-end-review-youve-got-to-be-kidding-1541721044]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
[[James Mattis|https://www.defense.gov/Our-Story/Biographies/Biography/Article/1055835/james-mattis/]]
<<list-links "[tag{!!title}]">>
at https://github.com/jsomers/ and http://jsomers.net/
<<list-links "[tag{!!title}]">>
Technology in Education pioneer
https://sites.google.com/site/janhawkinsaward/
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
a cofounder of GBN [Global Business Network], a Partner in the Monitor Group of Companies
an [[Edgie|https://www.edge.org/memberbio/jay_ogilvy]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
attorney, programmer, lead developer of Berkeley Snap!
Inventor (with Brian Harvey) of the Snap! programming environment (modeled after Scratch from MIT).
<<list-links "[tag{!!title}]">>
http://blogs.law.nyu.edu/magazine/2015/his-first-century/
<<list-links "[tag{!!title}]">>
professor of English & Comparative Literature
<<list-links "[tag{!!title}]">>
Jewish Kabbalists describe the body as "the shoe of the soul."
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
a Benedictine nun
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
American poet associated with the San Francisco Renaissance.
<<list-links "[tag{!!title}]">>
https://jocelynbrewer.com/
<<list-links "[tag{!!title}]">>
Died in 2019.
https://twitter.com/joeerl?lang=en
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
A German writer, pictorial artist, biologist, theoretical physicist, and polymath.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
the second President of the United States and the first Vice President.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
cartoonist, creating at [[https://wronghands1.com/2013/01/02/abook/]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Publisher & Editor, [[Edge|http://www.edge.org]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
wrote the wonderful book //Little, Big//.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
* Beware the fury of a patient man.
* We first make our habits, then our habits make us.
* I am sore wounded but not slain \ I will lay me down and bleed a while \ And then rise up to fight again.
* Better shun the bait, than struggle in the snare.
* Errors, like straws, upon the surface flow; He who would search for pearls, must dive below.
* Happy the man, and happy he alone, He who can call today his own: He who, secure within, can say, Tomorrow do thy worst, for I have lived today.
* words are but pictures of our thoughts.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
author of the book //American Philosophy: A Love Story//
https://www.uml.edu/FAHSS/Philosophy/faculty/kaag-john.aspx
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
([[A different, but related take on questions|David Whyte - questions]] is given by [[David Whyte|http://www.davidwhyte.com/]], who [[John O'Donohue|https://www.johnodonohue.com/]] knew).
>All thought is about putting a face on experience… One of the most exciting and energetic forms of thought is the question. I always think that the question is like a lantern. It illuminates new landscapes and new areas as it moves. Therefore, the question always assumes that there are many different dimensions to a thought that you are either blind to or that are not available to you. So a question is really one of the forms in which wonder expresses itself. One of the reasons that we wonder is because we are limited, and that limitation is one of the great gateways to wonder.
: -- from the transcript of //Walking on the Pastures of Wonder: John O’Donohue in Conversation with John Quinn//
and as Oliver Wendell Holmes had said: [[Man's mind, once stretched by a new idea, never regains its original dimensions.]]
an American poet and essayist, a cattle rancher, and a cyberlibertarian political activist who had been associated with both the Democratic and Republican parties.
<<list-links "[tag{!!title}]">>
US Supreme Court Chief Justice
<<list-links "[tag{!!title}]">>
English art critic of the Victorian era, also an art patron, draughtsman, watercolourist, a prominent social thinker and philanthropist.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Former Chief Scientist of Xerox Corporation and former director of the Xerox Palo Alto Research Center (PARC).
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Secretary of Health, Education, and Welfare (HEW) under President Lyndon Johnson.
https://en.wikipedia.org/wiki/John_W._Gardner
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
https://www.jonkolko.com/bio.php
Designer
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Chess Grandmaster
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Spanish author.
<<list-links "[tag{!!title}]">>
* Don't talk unless you can improve the silence.
* Life itself is a question.
* Reality is not always probable or likely.
** (similar to ''The difference between reality and fiction? Fiction has to make sense.'' attributed to [[Tom Clancy|https://en.wikiquote.org/wiki/Tom_Clancy]])
* So plant your own gardens and decorate your own soul, instead of waiting for someone to bring you flowers.
* To die for a religion is easier than to live it absolutely. [belief]
* rereading, not reading, is what counts.
* You can't measure time by days, the way you measure money by dollars and cents, because dollars are all the same while every day is different and maybe every hour as well.
* I have no way of knowing whether the events that I am about to narrate are effects or causes.
* there is no act that is not the coronation of an infinite series of causes and the source of an infinite series of effects.
* When you reach my age, you realize you couldn't have done things very much better or much worse than you did them in the first place. [aging]
* The dictionary is based on the hypothesis -- obviously an unproven one -- that languages are made up of equivalent synonyms. [translation]
* I walk slowly, like one who comes from so far away he doesn't expect to arrive. [aging] [mindfulness]
* A book is not an isolated being: it is a relationship, an axis of innumerable relationships.
* I think that the reader should enrich what he is reading. He should misunderstand the text; he should change it into something else.
* A man sets himself the task of portraying the world. Shortly before he dies he discovers that this patient labyrinth of lines is a drawing of his own face. [awareness]
* There is a concept that is the corrupter and destroyer of all others. I speak not of Evil, whose limited empire is that of ethics; I speak of the infinite. [logic] [mathematics]
* The central problem of novel-writing is causality.
* My undertaking is not difficult, essentially. I should only have to be immortal to carry it out. [aging] [language] [ [[Tikkun Olam]] ]
* Heaven and hell seem out of proportion to me: the actions of men do not deserve so much. [religion]
https://plato.stanford.edu/entries/gasset/
<<list-links "[tag{!!title}]">>
As with all his fiction, the largely unpunctuated prose flows like water, so that you don't so much read it as move through it fully immersed.
: -- Samantha Harvey in [[The Independent|https://www.independent.co.uk/arts-entertainment/books/reviews/book-of-a-lifetime-all-the-names-by-jos-saramago-6282677.html]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Wrote "Catch 22"
<<list-links "[tag{!!title}]">>
[[Joseph Heller]], when asked why he had never written anything as good since Catch 22, replied: “Who has?”
[wit]
https://en.wikipedia.org/wiki/Joseph_Joubert
<<list-links "[tag{!!title}]">>
https://joseph-ledoux.com/
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
[[Joseph Stein|https://en.wikipedia.org/wiki/Joseph_Stein]] author of [[“Fiddler on the Roof”|https://en.wikipedia.org/wiki/Fiddler_on_the_Roof]]
<<list-links "[tag{!!title}]">>
The Minimalists: Joshua Fields Millburn & Ryan Nicodemus
Their website at http://www.theminimalists.com/
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Joy is happiness that doesn’t depend on what happens.
: -- from a conversation with [[Krista Tippett]] on [["How to Be Grateful in Every Moment (But Not for Everything)"|https://onbeing.org/programs/david-steindl-rast-how-to-be-grateful-in-every-moment/#transcript]]
Echoes [[Maya Angelou]]'s:
> This is a wonderful day. I’ve never seen this one before.
[gratefulness]
Joy is to fun what the deep sea is to a puddle.
The conclusion the young witch Tiffany Aching (from the book "A Hat Full of Sky") reaches at the end of the book.
<<list-links "[tag{!!title}]">>
Israeli, Russian-born https://www.poetryinternational.org/pi/poet/22504/Julia-Wiener/en/list
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
the co-founder of "[[The Intelligent Optimist|http://www.theoptimist.com/]]".
<<list-links "[tag{!!title}]">>
Just as an asymptotic curve comes closer and closer to a line but never actually touches it, so we move ever closer toward death throughout life but never actually reach death in experience (if by death we mean the end of an individual’s consciousness).
-- in his book //Zen Physics//
(and as Epicurus had said: [[Where death is I am not; where I am death is not, so we never meet.]])
<<comparequote "Ian McEwan" "Those who believe in the afterlife will never be disappointed. That's because if they're wrong, they'll never know about it." "the afterlife">>
''Just as an Impressionist painting becomes coherent only at a distance, a lifetime is a journey whose full meaning only becomes comprehensible over time.'' This truth is inherently inaccessible to the young, to whom “sorrows in later life seem so relentless that . . . we conclude that old age must be a dire time, indeed. It is only later that we find that fresh life evolves out of each grief.” Continuous renewal seems like a lot to hope for, but hers is a welcome challenge to the equation of aging with physical deterioration.
-- from [[a book review|https://thischairrocks.com/2011/11/10/life-gets-better-by-wendy-lustbader-a-good-book-with-a-glaring-flaw/]] of //Life Gets Better//.
<<comparequote "Soren Kierkegaard" "It is really true what philosophy tells us, that life must be understood backwards. But with this, one forgets the second proposition, that it must be lived forwards. A proposition which, the more it is subjected to careful thought, the more it ends up concluding precisely that life at any given moment cannot really ever be fully understood; exactly because there is no single moment where time stops completely in order for me to take position (to do this): going backwards." "reflection and living">>
<<comparequote "Steve Jobs" "You can’t connect the dots looking forward; you can only connect them looking backwards." "reflection and living">>
In [[this way of looking at the world|Amplification allows the difference that makes a difference to make a difference.]], a control system needed to be as complex as the system it controlled. Cyberneticist W. Ross Ashby proved that this was true in a precise mathematical sense, in what is now called [[Ashby’s Law of Requisite Variety, or sometimes the First Law of Cybernetics|The third law of Artificial Intelligence states that any system simple enough to be understandable will not be complicated enough to behave intelligently, while any system complicated enough to behave intelligently will be too complicated to understand.]]. The law tells us that to control a system completely, the controller must be as complex as the controlled. Thus cyberneticists tended to see control systems as a kind of analog of the systems they governed, like the homunculus—the hypothetical little person inside the brain who controls the actual person.
This notion of analogous structure is sometimes confused with the notion of analog encoding of messages, but the two are logically distinct.
[...]
In digital signals, one needed only to preserve [[the difference in signals that made a difference|Amplification allows the difference that makes a difference to make a difference.]]. It is this distinction and signal coding that we commonly use to distinguish “analog” versus “digital.” Digital signal encoding was entirely compatible with cybernetic thinking—in fact, enabling to it. What was constraining to cybernetics was the presumption of an analogy of structure between the controller and the controlled. By the 1930s, Kurt Gödel, Alonzo Church, and Alan Turing had all described universal systems of computation, in which the computation required no structural analogy to functions that were computed. These universal computers could also compute the functions of control.
The analogy of structure between the controller and the controlled was central to the cybernetic perspective. Just as digital coding collapses the space of possible messages into a simplified version that represents only the difference that makes a difference, so the control system collapses the state space of a controlled system into a simplified model that reflects only the goals of the controller. [[Ashby’s Law|The third law of Artificial Intelligence states that any system simple enough to be understandable will not be complicated enough to behave intelligently, while any system complicated enough to behave intelligently will be too complicated to understand.]] does not imply that every controller must model every state of the system but only those states that matter for advancing the controller’s goals. Thus, in cybernetics, the goal of the controller becomes the perspective from which the world is viewed.
Norbert Wiener adopted the perspective of the individual human relating to vast organizations and trying to “live effectively within that environment.” He took the perspective of the weak trying to influence the strong.
: – From John Brockman's book “Possible Minds - 25 Ways of Looking at AI”.
[Artificial Intelligence]
Just as the good life is something beyond the pleasant life, the meaningful life is beyond the good life.
‘Doe maar normaal, dan ben je al gek genoeg’ (just be normal, that’s already crazy enough)
:: -- Dutch proverb
Ogilvy's Law
Many well defined manifolds lack unifying centers that define or control them.
• Just because some things are genuinely sacred does not mean that there is a god.
• Just because a corporation or a country seems to be hierarchically structured does not mean that any single leader is really in charge.
• Just because some behavior is conscious and intentional does not entail a "ghost in the machine," a homunculus, or a central intender.
• ''Just because evolution appears to be directional, from less order and complexity toward greater order and complexity, that does not presuppose either an alpha-designer or an omega-telos'' [an ultimate object or aim].
[[Einstein|Albert Einstein]] said he went to his office at the Institute for Advanced Study “just to have the privilege of walking home with Kurt Gödel.” (Godel, Goedel)
Einstein once remarked to Oskar Morgenstern, one of the cofounders of game theory, that he went to the Institute chiefly to walk home with Gödel. ("Um das Privileg zu haben, mit Gödel zu Fuss nach Hause gehen zu dürfen." (There is in the original German a note of gentle deference that cannot quite be translated.)
Kahlil Gibran, sometimes spelled Khalil Gibran, was a Lebanese-American artist, poet, and writer. Born in the town of Bsharri in modern-day Lebanon, as a young man he emigrated with his family to the USA.
Born: January 6, 1883, Bsharri
Died: April 10, 1931, New York City
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Kant said our senses were like the nightclub doorkeeper who only let people in who were sensibly dressed, and the criteria for being properly dressed or respectably dressed, whatever, was that things had to be covered up in space and time.
(see also [[Richard Hamming]]'s take on [[the limitations of our thinking|Perhaps there are thoughts we cannot think]]).
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Keep your face always toward the sunshine - and shadows will fall behind you.
"""
In a field
I am the absence
of field.
This is
always the case.
Wherever I am
I am what is missing.
When I walk
I part the air
and always
the air moves in
to fill the spaces
where my body’s been.
We all have reasons
for moving.
I move
to keep things whole.
"""
[filling/feeling/being a hole]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
http://sirkenrobinson.com/
<<list-links "[tag{!!title}]">>
One of the CS Sages creating the Unix Operating System and C Programming Language
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
https://www.kennethreitz.org/
<<list-links "[tag{!!title}]">>
Evangelist of "eXtreme Programming" (agile software development methodology).
<<list-links "[tag{!!title}]">>
One of Jim Henson's [[Muppet Puppets|http://en.wikipedia.org/wiki/Kermit_the_Frog]]
<<list-links "[tag{!!title}]">>
http://www.kevingriffin.net/biography/
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
from "The Orderly Pursuit of Pure Disorder"
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
https://meltingasphalt.com/about/
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
"""
Before you know what kindness really is
you must lose things,
feel the future dissolve in a moment
like salt in a weakened broth.
What you held in your hand,
what you counted and carefully saved,
all this must go so you know
how desolate the landscape can be
between the regions of kindness.
How you ride and ride
thinking the bus will never stop,
the passengers eating maize and chicken
will stare out the window forever.
Before you learn the tender gravity of kindness
you must travel where the Indian in a white poncho
lies dead by the side of the road.
You must see how this could be you,
how he too was someone
who journeyed through the night with plans
and the simple breath that kept him alive.
Before you know kindness as the deepest thing inside,
you must know sorrow as the other deepest thing.
You must wake up with sorrow.
You must speak to it till your voice
catches the thread of all sorrows
and you see the size of the cloth.
Then it is only kindness that makes sense anymore,
only kindness that ties your shoes
and sends you out into the day to gaze at bread,
only kindness that raises its head
from the crowd of the world to say
It is I you have been looking for,
and then goes with you everywhere
like a shadow or a friend.
"""
Kindness in words creates confidence, kindness in thinking creates profoundness, kindness in feeling creates love.
Kindness is the only non-delusional response to the human condition.
And the intersection between our perceptions, and understanding, and what’s actually true are pretty small and pretty occasional. There’s a whole bunch of stuff out there that is beyond our grasp.
So if you have any sense of that, then a kind of ritual humility would be the right stance. I mean, imagine if somebody saw in all the wrong colors and all the shapes that he saw were incorrect. And all of his understandings were messed up. That person would be wise to be a little humble, because the data’s coming in, and he’s messing it up. And essentially, I think that’s what human beings are doing in our little, sweet, pathetic way.
So then, if you are in that kind of flawed thinking machine, and you see another flawed thinking machine, it would seem almost crazy and irrational to start judging and fighting that person. You might more reasonably say, oh, wow, you too.
: -- from an interview of [[George Saunders]] by [[Ezra Klein]] in the [["NYT/Ezra Klein Show"|https://www.nytimes.com/2021/02/19/podcasts/ezra-klein-show-george-saunders-transcript.html]]
(compare to [[an African proverb on kindness|Let us take care of the children for they have a long way to go. Let us take care of the elders for they have come a long way. Let us take care of those in between for they are doing the work.]]).
Knowing how to free oneself is nothing; it's being free that is hard.
<<list-links "[tag{!!title}]">>
Knowledge and productivity are like compound interest.
Given two people of approximately the same ability and one person who works ten percent more than the other, the latter will more than twice outproduce the former.
The more you know, the more you learn; the more you learn, the more you can do; the more you can do, the more the opportunity.
:: -- from his lecture at Bell Labs [["You And Your Research"|https://www.cs.virginia.edu/~robins/YouAndYourResearch.pdf]]
Knowledge cannot be separated from a certain way of life which becomes its living manifestation. To acquire mystical knowledge means to undergo a transformation; one could even say that the knowledge is the transformation.
Knowledge is one. Its division into subjects is a concession to human weakness.
(compare to what [[Fritjof Capra]] had to [[say about this|In ordinary life, we are not aware of the unity of all things, but divide the world into separate objects and events. This division is useful and necessary to cope with our everyday environment, but it is not a fundamental feature of reality. It is an abstraction devised by our discriminating and categorising intellect. To believe that our abstract concepts of separate 'things' and 'events' are realities of nature is an illusion.]]).
<<comparequote "Andy Clark" "Everything leaks. There are no clear-cut level distinctions in nature... .The idea of levels is a useful fiction, great for hygienic text-book writing and quick answers that defend our local turf but seldom advance scientific understanding." "the nature of knowledge">>
(and also as [[Ken Wilber]] had [[observed about boundaries|The ultimate metaphysical secret, if we dare state it so simply, is that there are no boundaries in the universe. Boundaries are illusions, products not of reality but of the way we map and edit reality. And while it is fine to map out the territory, it is fatal to confuse the two.]])
Knowledge isn't just a matter of belief, and it's not just a matter of human psychology. It is information that has causal power.
: -- from his conversation with Chris Anderson (of TED fame) titled [["On the infinite reach of knowledge"|https://www.ted.com/talks/the_ted_interview_david_deutsch_on_the_infinite_reach_of_knowledge/transcript]]
Kosmos makros chronos paradoksos
(In the grand universe, time is a paradox.)
Compare to [[Time and space are modes by which we think and not conditions in which we live.]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
His [[blog|https://thefrailestthing.com/]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
From the book (and the [[accompanying video interviews|https://www.youtube.com/playlist?list=PLzLGaX_JvmJoIGJFR_1M088pMz68qUtnc]] [[A Glorious Accident|https://en.wikipedia.org/wiki/A_Glorious_Accident]]) by Wim Kayzer, in his interview with [[Oliver Sacks]]:
* I'm not saying that all thinking and all of consciousness depend on language, but it is probably crucial in the development [of a human]. And one needs it early.
* Clearly, however, there are many kinds of thought that occur in infancy, before language, and there are many kinds of thought that occur without language, especially in the higher apes, and there are many forms of human thought that do not depend on a language, although they may have other representation systems. What do we know about Beethoven's consciousness, or for that matter about mathematician's consciousness? What is the language of the brain? I am even surprised the brain has a language.
* It may be that the brain has to have—if not to have innately, then to construct - representational systems in time and space, in logic, reference, and self reference, in order to matrix thoughts or feelings, connect them properly with one another, and to focus. A framework of this kind, syntax or syntactics, is crucial.
* [Noam] Chomsky thinks in terms of innate mechanisms, of a built-in set of perhaps seven or eight hundred grammatical rules, which are somehow released at a critical age. But an alternative explanation would be that the child's brain is able to construct grammatical categories in the same way it constructs categories of other sorts. The Chomskian explanation demands and almost miraculous sort of hardware and software in the brain programming. But one might also view this as a possible example of neural evolution.
* Language always has this double use: not just for communication, but also for organizing your thoughts.
* [in the Gallaudet school for the deaf] there was a wonderful sort of fraternity or community, with a sharing of language, of sensibility, of perspectives, of forms of art, culture, and humor. There are forms of humor, theater, and poetry that are unique to sign language, since they depend on the full use of the body. One can have disembodied speech in a way, but not disembodied sign language. The whole fullness of the body, its emotional expression, and its intellectual possibilities are built into it.
* [[Lev Vygotsky|https://en.wikipedia.org/wiki/Lev_Vygotsky]] said in the 1920s—that inner speech is unknown to science. Vygotsky also says, “Words die as they give up meaning.” For Vygotsky inner thought is thinking in pure meanings. Vygotsky is a genius and a kind of poet. This phrase and this notion of thinking in pure meanings appealed to me, although I am not sure how to understand it. I mentioned it to a friend of mine who is a translator, and she said, "When I'm translating from one language into another, I extract the meaning and I put it in another word, or another phrase. There is an intermediate stage in which the meaning is not in either language, while I'm searching for the appropriate vehicle for it.” I don't know what thinking in pure meanings could mean, but perhaps that's what inner speech is.
* What kind of mental process is remembering, and is language at all involved? Certainly remembering has to do with looking for meaning, looking for the largest context and for different contexts. Talking about meaning makes me want to come back to robots and animals. It's the nature of human nature, and maybe of animal nature, to search for meaning. Is that to say also that if we found the meaning of life, life would become meaningless? No, I wouldn't say that. First, I'm not sure what could possibly be meant by the meaning of life. But one form of the search for meaning is making theories.
* Then the question arises as to whether there is an end to theorizing. Now I think [[Stephen Hawking]], for example, will suggest that there is an end to theorizing, that sooner or later we will arrive at a T.O.E., a theory of everything, and the scientific enterprise will come to an end. I prefer not to think that this is so. Certainly in my own minor way, whenever any solution has become apparent to me, it in turn opened a new realm of questions which was broader than any could have asked before. So it seems to me that the realm of questioning and theorizing and inquiry gets larger and larger.^^1^^ It might be a the physical universe is finite and there is a limit to theorizing But not to the biological or the mental universe, which is continually evolving. The very form of theories about the brain may have to be quite different from physical theories.
* [[Gerald Edelman]] likes to say that as we had the Galilean revolution four hundred years ago, we may now need a comparable new revolution to produce a science of the subjective, of the unique and individual, and a science of consciousness. I go along with that.
* One of the reasons I am against mechanical models is that they are too physicalistic, too inductive, too impoverished, and too boring. They break down hopelessly, finally, before the sheer creativity of the brain.
* The nervous system stimulates itself constantly. New patterns are being generated all the while and at every level, from these very simple geometrical patterns in the primary cortex up to the complex patterns that are thoughts, which [[Charles Sherrington|https://www.nobelprize.org/prizes/medicine/1932/sherrington/biographical/]] talks about in a lovely metaphor when he compares the brain to an enchanted loom which is continually weaving patterns that dissolve into one another. The patterns are patterns of meaning. When we're awake, this autonomous activity of the mind and the brain is held in check by our perceptions and by reality, by social constraints. When we're asleep, it's not; then we have license to dream. It could reasonably be said that we're dreaming all the while, except that when we're awake, the dreams are constrained by reality.
(compare to [[Cormac McCarthy]]'s [[take on the unconscious|The fact that the unconscious prefers avoiding verbal instructions pretty much altogether—even where they would appear to be quite useful—suggests rather strongly that it doesn't much like language and even that it doesn't trust it.]])
----
^^1^^ or as [[Ralph Sockman]] said [[The larger the island of knowledge, the longer the shoreline of wonder.]]
Language is remarkable, except under the extreme constraints of mathematics and logic, it never can talk only about what it's supposed to talk about but is always spreading around.
Can we get friendly with language; can we know what we are?
In “The Meridian,” the poet Paul Celan writes, “Whenever we speak with things in this way [in poetry] we dwell on the question of their where-from and where-to, an open question without resolution.”
So language is, on the one hand, a prison: we’re locked inside it, created by it, defined by it, and can see only as far as we can say. On the other hand, language frees us: it unlocks our imagination, allowing us to reach out to the world, and to fly beyond it. This is what poets try to do. Of course, they always fail. The point is not to succeed but to make the attempt; in this there is already some freedom and some delight.
In Zen practice you are always trying to stand within language as an amazement, to open up the hand of thought and gawk at language, let language gawk at you. This means coming to understand and dwell within language in many ways. A word means something and not something else. But also a word is gone even as we speak or write it and so it isn’t anything. When we speak or write something, we think we are understanding or communicating, but actually that is not so. When we are speaking or writing, we are speaking about nothing. Primarily what we are doing when we are speaking or writing is articulating humanness. Speaking or writing is just being ourselves, expressing that.
When we get tangled up in something we think we are speaking about, we suffer. All language is music. Music doesn’t mean anything, but this doesn’t diminish its importance. We need music. Air and water don’t mean anything either. And yet the paradox of language is that meaning is part of the medium; words have meanings assigned to them, but meaning doesn’t mean anything, it’s just part of the procedure. [part of human existence/being/process?]
: -- from [[his|Norman Fischer]] book "//When You Greet Me I Bow//"
(compare to what [[Viktor Frankl]] had said about [[the significance and "permanence" of every act and expression of a person|Any hour whose demands we do not fulfill, or fulfill halfheartedly, this hour is forfeited, forfeited “for all eternity.” Conversely, what we achieve by seizing the moment is, once and for all, rescued into reality, into a reality in which it is only apparently “canceled out” by becoming the past. In truth, it has actually been preserved, in the sense of being kept safe. Having been is in this sense perhaps even the safest form of being. The “being,” the reality that we have rescued into the past in this way, can no longer be harmed by transitoriness.]]).
a mystic philosopher of ancient China, and best known as the author of the Tao Te Ching.
[[Lao Tzu|http://en.wikipedia.org/wiki/Lao_Tzu]]
<<list-links "[tag{!!title}]">>
writer of Science Fiction books (e.g. Protector)
<<list-links "[tag{!!title}]">>
Later on in life, you expect a bit of rest, don't you? You think you deserve it. I did, anyway. But then you begin to understand that the reward of merit is not life's business.
: ― in //The Sense of an Ending//
[resting] [fatigue]
Laughter is carbonated wholesomeness.
(inspired by Anne Lamott's "Laughter is carbonated holiness".)
Or, as [[Doris Lessing]] puts it:
:{{imgquote}} Laughter is by definition healthy.
: -- from her book //The Summer Before the Dark//
<<list-links "[tag{!!title}]">>
Law is born from despair of human nature.^^1^^
[disappointment] [realism] [pessimism]
On the other (more optimistic) hand:
Society could be a useful tool for men. It is the main instrument he has for reaching his maximum effectiveness. Through its proper functioning, society could provide the outlet for
man's fullest potentiality.
[utility] [usefulness]
----
^^1^^ [[Ortega|Jose Ortega y Gasset]] in his essay "the Revolt of the Masses" sees those masses as standing for no value —immorality rather than ammorality. Anarchical and violent, the barbarian masses abolish legal proceedings, and to impose their whims they take direct action. To control
those masses, he urges the government of law and norms, for "a life without principles is a greater privation [existential lack or breakdown] of self than death."
https://www.lawrencemkrauss.com/biographyphysi
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Lean forward into your life...catch the best bits and the finest wind. Just tip your feathers in flight a wee bit and see how dramatically that small lean can change your life.
The best thing for being sad," replied Merlin, beginning to puff and blow, "is to learn something. That's the only thing that never fails. [...] Learn why the world wags and what wags it. That is the only thing which the mind can never exhaust, never alienate, never be tortured by, never fear or distrust, and never dream of regretting. Learning is the only thing for you. Look what a lot of things there are to learn.”
-- from //The Once and Future King//
<<list-links "[tag{!!title}]">>
As part of [[his|Tiago Forte]] blogpost titled [["The 4 Identities of a Teacher"|https://fortelabs.co/blog/4-identities-of-a-teacher/]], he writes about being a "Reporter" which is very much the "Beginner's Mind": the stage you are in when you learn something new:
Every teacher naturally moves through four stages or identities over time:
* Reporter
* Expert
* Mentor
* Role model
Each one of these stages is important and valuable. There is always more knowledge to acquire, but whether you teach as a profession or as part of your career or business, every step has something precious to teach you [and others!] now.
!! Reporter [being in a state of "Beginner's Mind"]
When you first start reading about and researching a subject, you probably don’t know much about it. That’s the reason you started looking into it in the first place – you knew little and wanted to know more.
At this point it can feel like you don’t have much to offer, when in fact you do: you have the naivete and innocence of a beginner. Your mind is like a blank slate, free of unspoken assumptions and unquestioned traditions.
At this first stage, your credibility comes from your lack of experience. You are a reporter, chasing leads, asking questions, and reporting your findings “live from the field.”
Think about an investigative journalist exploring a niche subculture or an emerging underground trend. We don’t expect them to be experts in that arena. How could they be? Their authority and contribution comes from their willingness to face the unknown and give us the play by play of everything they learn, discover, and are surprised by.
I sometimes see online creators who are “waiting” until they have enough knowledge and expertise to begin creating content and sharing their message. But in doing so, they are entirely missing out on this first stage, which will soon pass. Being a beginner is an incredibly valuable stage for a teacher.
Instead of treating “learning” as an initial step that you have to get through before becoming an expert with something to offer, treat the process of learning as a subject in itself – an experience that is worth reporting on in real time. There are insights and revelations you have in the midst of learning something for the first time that you won’t remember after the fact.
You can act as an open-minded observer who is seeing a subject through the eyes of a novice, and allow others to look through that lens and discover it alongside you. Not only is this a much more fun and collaborative approach to learning, but this reporting can bring you the attention, respect, and resources you need to get to the later stages.
Learning by Trial and Error has the double advantage of developing grit //and// guaranteeing success, as long as the number of Trials is at least one more than the number of Errors.
```
def success():
return(#trials >= #errors + 1)
or
if #trials >= #errors + 1:
success = True
else:
success = False
```
Learning how not to do things is as hard as learning how to do them. Harder, maybe.
: -- The powerful witch Mistress (Granny, Esme) Weatherwax to the young witch Tiffany Aching (from the book "A Hat Full of Sky").
This may be very sound teaching and learning advice, and is, I think, a sign of an expert (or Master).
(compare to [[Queen Elizabeth II]]'s take [[on doing nothing|To do nothing is often the best course of action, but I know from personal experience how frustrating it can be. History was not made by those who did nothing.]]).
Learning how to think really means learning how to exercise some control over how and what you think. It means being conscious and aware enough to choose what you pay attention to and to choose how you construct meaning from experience. Because if you cannot or will not exercise this kind of choice in adult life, you will be totally hosed.
Learning involves the nurturing of nature.
[[My|Haggai Mark]] take on it: I think that //Learning// is in our nature (i.e., we (or at least most of us :) can't help it). Effective learning, possibly/maybe called //Education//, may fit better in this quote.
Ultimately, learning should not be about hoarding stockpiles of knowledge like gold coins. It is about becoming a different kind of person with a different way of thinking.
The beauty of this approach [of developing a ZettelKasten-like knowledge collection and organization system] is that we co-evolve with our slip-boxes [ZettelKasten]: We build the same connections in our heads as we deliberately develop them in our slip-box. Writing then is best seen not only as a tool for thinking but as a tool for personal growth.
: -- From [[his|Tiago Forte]] blogpost [["How To Take Smart Notes: 10 Principles to Revolutionize Your Note-Taking and Writing"|https://fortelabs.co/blog/how-to-take-smart-notes/]], summarizing and reflecting on the book "//How To Take Smart Notes//" by [[Sönke Ahrens|https://takesmartnotes.com/about/]], inspired by the Zettelkasten method/system of the the 20th-century German sociologist Niklas Luhmann.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Known mononymously as Gallagher.
<<list-links "[tag{!!title}]">>
Leo Calvin Rosten was an American humorist in the fields of scriptwriting, storywriting, journalism, and Yiddish lexicography. He was also a political scientist interested especially in the relationship of politics and the media.
<<list-links "[tag{!!title}]">>
Canadian born singer, song-writer.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
www.lesliejamison.com/
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Let All Your Thinks Be Thanks.
or as [[Oliver Sacks]] quotes his friend (Wystan):
> Let your last thinks all be thanks.
(see [[Patrick Kurp's blogpost|https://evidenceanecdotal.blogspot.com/2013/11/get-begging-part-over-with-quickly.html]]).
Let the refining and improving of your own life keep you so busy that you have little time to criticize others.
I believe that the time is ripe for significantly better documentation of programs, and that we can best achieve this by considering programs to be works of literature.
''Let us change our traditional attitude to the construction of programs: Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do.''
The practitioner of literate programming can be regarded as an essayist, whose main concern is with exposition and excellence of style. Such an author, with thesaurus in hand, chooses the names of variables carefully and explains what each variable means. He or she strives for a program that is comprehensible because its concepts have been introduced in an order that is best for human understanding, using a mixture of formal and informal methods that reinforce each other.
: — Donald Knuth (AKA [["The Yoda of Silicon Valley"|https://www.nytimes.com/2018/12/17/science/donald-knuth-computers-algorithms-programming.html]]) (in his article [["Literate Programming"|http://www.literateprogramming.com/knuthweb.pdf]]^^1^^)
[clear communication through programming]
----
^^1^^ About choosing the title "Literate Programming" [[Knuth|Donald Knuth]] writes:
I must confess that there may also be a bit of malice in my choice of a title. During the 1970s I was coerced like everybody else into adopting the ideas of structured programming, because I couldn’t bear to be found guilty of writing unstructured programs. Now I have a chance to get even. By coining the phrase “literate programming,” I am imposing a moral commitment on everyone who hears the term; surely nobody wants to admit writing an //illiterate// program.
"""
Let us take care of the children for they have a long way to go.
Let us take care of the elders for they have come a long way.
Let us take care of those in between for they are doing the work.
"""
:: - African Prayer
(or as [[Jack Kornfield]] had said: [[Life is so hard, how can we be anything but kind?]]).
[[similarly, by Philo of Alexandria|Be kind, for everyone you meet is fighting a great battle.]]
Also compare to [[Ram Dass]]'s [[take on kindness|When all is said and done, we're really just all walking each other home.]]
(and as echoed by [[George Saunders]] about [[being kind|Kindness is the only non-delusional response to the human condition.]])
[generosity] [gratitude]
From P.M. Ferni's book and website [[Choosing Civility|http://krieger2.jhu.edu/civility/onerule.html]]
ON SAYING YES TO CIVILITY
Another way of being agreeable is saying yes to civility. By allowing others to be civil–and thus pleasant–to us, we please them. Whenever possible, let's say yes (and thank you) when others offer us the gift of their regard, kindness, and consideration. By accepting, we reward the giver. We often decline kind offers because we don't want to inconvenience the other person, because of excessive pride, because we lack self-esteem (we don't think we deserve the attention), or because we feel we are losing control. But others need to give us their kindness as much as we need to receive and treasure it.
As you say good-bye to your friend, he hands you his spare umbrella, telling you that he doesn't need it. Consider taking it, even if you are thinking that your raincoat may give you enough protection from the drizzle. Walking your dog on a hot summer day, you stop to exchange a few words with an older neighbor relaxing in his yard. He volunteers to get a bowl of water for your panting puppy. Even though you are almost home, you may want to say yes. Tending to a thirsty puppy (and petting him) might make your kind neighbor's day. Noticing that you look tired after a grueling week at work, your wife tells you to take the passenger's, rather than your usual driver's, seat for the three-hour drive to your weekend destination. Don't fight her good intention.
''Let's learn how to give. But let's also become proficient in the difficult art of receiving.''
On Writing Code Comments:
Let's not overstate the case - there are things far more important to get right than comments. When you've written truly good code your comments are the //icing on the cake//, delicately placed to add aesthetics and value, rather than liberally slapped on to cover up all the cracks and blemishes.
[programming advice] [programming technique]
(compare to what [[Guy Steele]] had said about [[code commenting|Being forced to write comments actually improves code, because it is easier to fix a crock than to explain it.]])
Let’s take the wings off and try writing on foot, shall we?
:: - [[Szymborska in a column in a Polish newspaper|https://www.poetryfoundation.org/articles/68657/how-to-and-how-not-to-write-poetry-56d2484397277]] giving advice to readers who want to write poetry.
or another piece of advice to a reader (budding writer):
> “You need a new pen. The one you’re using makes a lot of mistakes. It must be foreign.”
(compare to [[Octavia E. Butler]]'s writing advice:
> [[First forget inspiration. Habit is more dependable. Habit will sustain you whether you're inspired or not. Habit will help you finish and polish your stories. Inspiration won't. Habit is persistence in practice.]]
From the author's postscript to his book The Three Body Problem:
There is a strange contradiction revealed by the naivete and kindness demonstrated by humanity when faced with the Universe: On Earth, humankind can step onto another continent and, without a thought, destroy the kindred civilizations found there through warfare and disease. But when they gaze up at the stars, they turn sentimental and believe that if extraterrestrial intelligences exist, they must be civilizations bound by universal, noble, moral constrains, as if cherishing and loving different forms of life are parts of a self-evident universal code of conduct.
I think it should be precisely the opposite: Let’s turn the kindness we show toward the stars
to members of the human race on Earth and build up trust and understanding between the different peoples and civilizations that make up humanity. But for the universe outside the solar system, we should be ever vigilant, and be ready to attribute the worst of intentions to any Others that might exist in space. For a fragile civilization like ours, this is without a doubt the most responsible path.
Letting go doesn't have to mean walking away. It means the things that hurt you don't hurt you anymore.
[caring]
Letting go goes hand in hand with acceptance. One does not occur without the other. Letting go is opening the hand. Acceptance is what the open hand receives.
<<list-links "[tag{!!title}]">>
AKA Charles Lutwidge Dodgson
<<list-links "[tag{!!title}]">>
Buddhist author and teacher and author of three published books and the soon to be published Aging as a Spiritual Practice, (to be released in Spring 2012).
http://www.lewisrichmond.com/
<<list-links "[tag{!!title}]">>
https://lexfridman.com/
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Libertarians appear to have a coherent moral philosophy, which includes a general opposition to forcing any particular moral code upon others.
Libertarians seem willing to reject both liberal concerns for social justice and conservative concerns for respecting existing social structure when those concerns conflict with their superordinate interest in maintaining individual liberty. The goal of our first study is to confirm these observations by directly surveying a broad range of moral values and concerns, and testing whether self-described libertarians place a higher value on liberty and a lower value on other moral concerns, compared to self-described liberals and conservatives.
[...]
Libertarians have a unique moral-psychological profile, endorsing the principle of liberty as an end and devaluing many of the moral concerns typically endorsed by liberals or conservatives. Although causal conclusions remain beyond our current reach, our findings indicate a robust relationship between libertarian morality, a dispositional lack of emotionality, and a preference for weaker, less-binding social relationships.
: -- from a research paper [["Understanding Libertarian Morality: The Psychological Dispositions of Self-Identified Libertarians"|https://doi.org/10.1371/journal.pone.0042366]]
"""
The sun was near the horizon.
The shortest-lived creatures on the [[Disc|https://discworld.fandom.com/wiki/Discworld]] were mayflies, which barely make it through twenty-four hours.
Two of the oldest zigzagged aimlessly over the waters of a trout stream, discussing history with some younger members of the evening hatching.
‘You don’t get the kind of sun now that you used to get, ‘ said one of them.
'You’re right there. We had proper sun in the good old hours. It were all yellow. None of this red stuff.’
‘It were higher, too.’
‘It was. You’re right.’
‘And nymphs and larvae showed you a bit of respect.’
‘They did. They did,’ said the other mayfly vehemently.
'I reckon, if mayflies these hours behaved a bit better, we’d still be having proper sun.’
The younger mayflies listened politely.
‘I remember, ‘ said one of the oldest mayflies, ‘when all this was fields, as far as you could see.'
The younger mayflies looked around.
‘It’s still fields,’ one of them ventured, after a polite interval.
‘I remember when it was better fields,’ said the old mayfly sharply.
‘Yeah, ‘ said his colleague. ’And there was a cow.'
'That’s right! You’re right! I remember that cow! Stood right over there for, oh, forty, fifty minutes. It was brown, as I recall.’
‘You don’t get cows like that these hours.’
‘You don’t get cows at all.’
‘What’s a cow?’ said one of the hatchlings.
‘See?’ said the oldest mayfly triumphantly. ’That’s modern Ephemeroptera [mayflies] for you.’ It paused. ’What were we doing before we were talking about the sun?'
'Zigzagging aimlessly over the water,’ said one of the young flies; This was a fair bet in any case.
‘No, before that.’
‘Er . . . you were telling us about the Great Trout.’
‘Ah. Yes. Right. The Trout. Well, you see, if you’ve been a good mayfly, zigzagging up and down properly -’
‘- taking heed of your elders and betters -’
‘- yes, and taking heed of your elders and betters, then eventually the Great Trout -'
Clop
Clop
‘Yes?’ said one of the younger mayflies.
There was no reply.
‘The Great Trout what?’ said another mayfly, nervously.
They looked down at a series of expanding concentric rings on the water.
‘The holy sign!’ said a mayfly. ’I remember being told about that! A Great Circle in the water! Thus shall be the sign of the Great Trout!'
The oldest of the young mayflies watched the water thoughtfully. It was beginning to realise that, as the most senior fly present, it now had the privilege of hovering closest to the surface.
‘They say, ‘ said the mayfly at the top of the zigzagging crowd, ‘that when the Great Trout comes for you, you go to a land flowing with . . . flowing with . . .'
Mayflies don’t eat. It was at a loss.
’Flowing with water, ‘ it finished lamely.
‘I wonder, ‘ said the oldest mayfly.
‘It must be really good there, ‘ said the youngest.
‘Oh? Why?’
'Cos no-one ever wants to come back.'
"""
: -- from [[his|Terry Pratchett]] book //“Discworld 11 - Reaper Man”//
"""
Churchy:
We could of been talkin’ ’bout life an’ ever’thin’ else.
Porky:
If you talks ’bout life an’ ever’thin’ else...the ever’thin’ else gotta be death ...That what we gone talk ’bout?
Churchy:
Death!? Heck, no!
Porky:
Wull...you can’t have one with out you got t’other.
Churchy:
Seem to me that makes life a perty risky business.
"""
: -- from //"Potluck Pogo"// by [[Walt Kelly]]
Life does not begin when people are born, if it were so, each day would be a day gained, life begins much later^^*^^, and how often too late, not to mention those lives that have no sooner begun than they are over, which has led one poet to exclaim, Ah, who will write the
history of what might have been.
----
^^*^^ I'm not sure (yet?) what this means, but it has a ring of depth to it :)
Life does not cease to be funny when people die any more than it ceases to be serious when people laugh.
Which reminds me of the poem [["Under One Small Star"|https://www.poemhunter.com/poem/under-one-small-star/]] by [[Wislawa Szymborska]]
>Forgive me, distant wars, for bringing flowers home.
>Forgive me, open wounds, for pricking my finger.
>I apologize for my record of minuets to those who cry from the depths.
>I apologize to those who wait in railway stations for being asleep today at five a.m.
"""
"""
Or as the inimitable Terry Pratchett (Sir Terry, for you :) had said:
>When someone is saved from certain death by a strange concatenation of circumstances they say that’s a miracle. But of course if someone is killed by a freak chain of events – the oil spilled just there, the safety fence broken just there – that must also be a miracle. Just because it’s not nice doesn’t mean it’s not miraculous.
"""
"""
Which reminds me of a poem by [[Wislawa Szymborska]]: [[Could Have - poem by Wislawa Szymborska]]
Life has to be given a meaning because of the obvious fact that it has no meaning.
(Compare to [[Steven Weinberg]]'s [[conclusion from a scientist's perspective|We find nothing that gives our lives an objective meaning. There’s nothing in the laws of nature to suggest that we have a particular place in the universe. That doesn’t mean I find my life pointless. We can love each other and try to understand the world. But we have to give our lives that meaning ourselves.]]).
Every morning, I vow to be grateful for the precious gift of human birth. It's a big gift, and it includes a lot of stuff I never particularly wanted for my birthday. Some of the things in the package I wish I could exchange for a different size or color.
But I want to find out what it means to be a human being -- my curiosity remains intense even as I get older -- so I say thanks for the whole thing. It's all of a piece.
: -- from her book //This is getting old//, in the chapter titled "For the Time Being"
Life is a dream for the wise, a game for the fool, a comedy for the rich, a tragedy for the poor.
Shalom Aleichem, Sholom Aleichem,
A Buddhist belief: life is a joyful participation in a world of sorrows.
Life is a long road on a short journey.
compare to [[Robert Brault]]: I remember well the road I took -- and the friends I traveled with. Did we ever get to where we were going? That I don't recall.
Compare to [[what Terry Pratchett had to say|The road, one felt, had to go somewhere. This geographical fiction has been the death of many people. Roads don’t necessarily have to go anywhere, they just have to have somewhere to start.]].
On the other hand [[Wilson Mizner]] quipped: Life's a tough proposition, and the first hundred years are the hardest.
Life is a trick and you get one chance to learn it.
"""
You have been told also that life is darkness, and in your weariness you echo what was said by the weary.
And I say that life is indeed darkness save when there is urge,
And all urge is blind save when there is knowledge,
And all knowledge is vain save when there is work,
And all work is empty save when there is love;
And when you work with love you bind yourself to yourself, and to one another, and to God.
"""
Compare to Henry James' [[Life is, in fact...|Life is, in fact, a battle. On this point optimists and pessimists agree. Evil is insolent and strong; beauty enchanting but rare; goodness very apt to be weak; folly very apt to be defiant; wickedness to carry the day; imbeciles to be in great places, people of sense in small, and mankind generally, unhappy.]]
Life is hard. Just to keep on keeping on is sometimes an act of courage.
: -- from [[his|John W. Gardner]] speech about [[Personal Renewal|http://www.pbs.org/johngardner/sections/writings_speech_1.html]]
[heroism] [growth] [stagnation] [aging]
Life is like stepping onto a boat that is about to sail out to sea and sink.
Compare to [[The plane of life is a frozen sea, on which all make many slips, and finally break through into eternity.]]
Also compare to [[The Niagara River - poem by Kay Ryan]].
Life is no brief candle to me. It is a sort of splendid torch which I have got a hold of for the moment, and I want to make it burn as brightly as possible before handing it on to future generations.
Life is so hard, how can we be anything but kind?
[[similarly, by Philo of Alexandria|Be kind, for everyone you meet is fighting a great battle.]]
Also compare to [[Ram Dass]]'s [[take on kindness|When all is said and done, we're really just all walking each other home.]]
Or as the journalist [[Norman Cousins|https://en.wikipedia.org/wiki/Norman_Cousins]] wrote:
> Life is an adventure in forgiveness.
Or as [[Kurt Vonnegut]] (in //If This Isn't Nice, What Is?: Advice for the Young//) had said:
>There’s only one rule I know of—Goddam it, you’ve got to be kind.
Life is so uncertain that it is far better and more joyous to play your way through it than to plan or pray your way through it.
::― in [[his|Dee Hock]] //Autobiography of a Restless Mind: Reflections on the Human Condition//
(compare to [[Jose Saramago]]'s [[take on playing/planning your cards|You never know beforehand what people are capable of, you have to wait, give it time, it's time that rules, time is our gambling partner on the other side of the table and it holds all the cards of the deck in its hand, we have to guess the winning cards of life, our lives.]])
(compare to [[Arthur C. Clarke]]'s take on [[life as play|If we waste time looking for life’s meaning, we may have no time to live - or to play.]]).
Life is the art of drawing without an eraser.
: -- : -- from [[John W. Gardner]]'s speech about [[Personal Renewal|http://www.pbs.org/johngardner/sections/writings_speech_1.html]]
Life is, in fact, a battle.^^1^^ On this point optimists and pessimists agree. Evil is insolent and strong; beauty enchanting but rare; goodness very apt to be weak; folly very apt to be defiant; wickedness to carry the day; imbeciles to be in great places, people of sense in small, and mankind generally, unhappy.
But the world as it stands is no illusion, no phantasm, no evil dream of a night; we wake up to it again for ever and ever; we can neither forget it nor deny it nor dispense with it. We can welcome experience as it comes, and give it what it demands, in exchange for something which it is idle to pause to call much or little so long as it contributes to swell the volume of consciousness.
In this there is mingled pain and delight, but over the mysterious mixture there hovers a visible rule, that bids us learn to will and seek to understand.
:: from his article [[The Sorrowful World of Turgénieff|https://www.bartleby.com/400/prose/2128.html]]
----
^^1^^ but compare to Kahlil Gibran's [[life is darkness, save when ...]].
Life lasts but a few scratches of the claw in the sand.
(I suspect that this sense becomes stronger the older we get).
Life offers more than one path to combine "good living" with "good fortune".
This is true in the dual (at least) meanings of both "good living" and "good fortune" :)
- "good life" in the sense of "The Good Life" (meaning, purpose, fulfillment of potential, etc.), and "doing well", "being well off", and being materially comfortable.
- "good fortune" in the sense of enough material means (as in "a small fortune"), and having "good luck" and being fortunate.
The way this belief/sentence is phrased suggests that one has something to do with that choice^^1^^ (along the lines of "fortune comes to those prepared", etc. :)
It may also mean that regardless of who/what you are (your "true nature"; the things you cannot change and have no choice^^1^^ about), there is the possibility of "good living" and "good fortune".
"""
"""
----
^^1^^ [[May Swenson]] writes about having choices (or not), and whether one condition is better than another:
"""
Feel like A Bird
understand
he has no hand
instead A Wing
close-lapped
mysterious thing
[...]
hand better than A Wing?
to gather A Heap to count
to clasp A Mate?
or leap
lone-free and mount
on muffled shoulders
to span A Fate?
"""
: -- from [[her|May Swenson]] poem //Feel Like A Bird//
The Möbius strip has only one side! What look like its inner and outer surfaces flow into each other seamlessly, co-creating the whole.
That’s exactly how life works!
Whatever is inside of us continually flows outward, helping to form or deform the world — depending on what we send out. Whatever is outside us continually flows inward, helping to form or deform us — depending on how we take it in. Bit by bit, we and our world are endlessly re-made in this eternal inner-outer exchange.
Much depends on what we choose to put into the world from within ourselves — and much depends on how we handle what the world sends back to us.
: -- from [[his|Parker Palmer]] [[blog entry at OnBeing|https://onbeing.org/blog/life-on-the-mobius-strip/]]
As an aside: [[J.S. Bach's Crab Canon is animated and played on a Möbius (Mobius, Moebius) Strip|https://youtu.be/xUHQ2ybTejU]].
[moebius]
[Conway's Game of] Life shows us something that Darwin hit upon when he was looking at Life, the organic version. Complexity arises from simplicity! That is such a revelation; we are used to the idea that anything complex must arise out of something more complex. Human brains design airplanes, not the other way around. Life shows us complex virtual “organisms” arising out of the interaction of a few simple rules — so goodbye "Intelligent Design."
: -- from the article [["The Lasting Lessons of John Conway’s Game of Life"|https://www.nytimes.com/2020/12/28/science/math-conway-game-of-life.html]] by Siobhan Roberts
[evolution]
Life While-You-Wait – poem by Wislawa Szymborska
"""
Life While-You-Wait.
Performance without rehearsal.
Body without alterations.
Head without premeditation.
I know nothing of the role I play.
I only know it’s mine. I can’t exchange it.
I have to guess on the spot
just what this play’s all about.
Ill-prepared for the privilege of living,
I can barely keep up with the pace that the action demands.
I improvise, although I loathe improvisation.
I trip at every step over my own ignorance.
I can’t conceal my hayseed manners.
My instincts are for happy histrionics.
Stage fright makes excuses for me, which humiliate me more.
Extenuating circumstances strike me as cruel.
Words and impulses you can’t take back,
stars you’ll never get counted,
your character like a raincoat you button on the run —
the pitiful results of all this unexpectedness.
If only I could just rehearse one Wednesday in advance,
or repeat a single Thursday that has passed!
But here comes Friday with a script I haven’t seen.
Is it fair, I ask
(my voice a little hoarse,
since I couldn’t even clear my throat offstage).
You’d be wrong to think that it’s just a slapdash quiz
taken in makeshift accommodations. Oh no.
I’m standing on the set and I see how strong it is.
The props are surprisingly precise.
The machine rotating the stage has been around even longer.
The farthest galaxies have been turned on.
Oh no, there’s no question, this must be the premiere.
And whatever I do
will become forever what I’ve done.
"""
"""
I slept and dreamt
that life was joy.
I awoke and saw
that life was duty.
I worked — and behold,
duty was joy.
"""
To which [[Viktor Frankl]] commented:
> So, life is somehow duty, a single, huge obligation. And there is certainly joy in life too, but it cannot be pursued, cannot be “willed into being” as joy; rather, it must arise spontaneously, and in fact, it does arise spontaneously, just as an outcome may arise: Happiness should not, must not, and can never be a goal, but only an outcome.
: -- from [[his|Viktor Frankl]] book "//Yes to Life//".
<<list-links "[tag{!!title}]">>
Life's not a race, but there's no speed limit either.
from Kenneth Reitz [[webpage|https://www.kennethreitz.org/values/]]
''Light after Darkness'' (1879)
"""
Light after darkness, gain after loss,
strength after weakness, crown after cross;
sweet after bitter, hope after fears,
home after wandering, praise after tears.
Sheaves after sowing, sun after rain,
sight after mystery, peace after pain;
joy after sorrow, calm after blast,
rest after weariness, sweet rest at last.
Near after distant, gleam after gloom,
love after loneliness, life after tomb;
after long agony, rapture of bliss,
right was the pathway, leading to this.
"""
([[Mark Twain]] had a more [[practical reason to go to heaven|Go to Heaven for the climate, Hell for the company.]] :))
Light thinks it travels faster than anything but it is wrong. No matter how fast light travels, it finds that darkness has always got there first, and is waiting for it.
Or as the poet [[Howard Nemerov]] had said:
> Nothing in the universe can travel at the speed of light, they say, forgetful of the shadow`s speed.
Light tomorrow with today.
Lighthouses don’t go running all over an island looking for boats to save; they just stand there shining.
"""
"""
(Compare to [[Queen Elizabeth II]]'s take [[on action|To do nothing is often the best course of action, but I know from personal experience how frustrating it can be. History was not made by those who did nothing.]]).
Like all great rationalists you believed in things that were twice as incredible as theology.
:: ― Halldór Laxness, Under the Glacier
Like an explosive awaiting a spark, unimaginably numerous environments in the universe are waiting out there, for aeons on end, doing nothing at all or blindly generating evidence and storing it up or pouring it out into space. Almost any of them would, if the right knowledge ever reached it, instantly and irrevocably burst into a radically different type of physical activity: intense knowledge-creation, displaying all the various kinds of complexity, universality and reach that are inherent in the laws of nature, and transforming that environment from what is typical today into what could become typical in the future. If we want to, we could be that spark.
: from [[his|— David Deutsch]] book "//The Beginning of Infinity: Explanations That Transform the World"//
Like punning, programming is a play on words.
"""
Suppose we did our work
like the snow, quietly, quietly,
leaving nothing out.
"""
[persistence] [calm] [thoroughness] [practice]
```
Unlimited Growth on a Planet of Finite Size
The brisk spring wind sets in motion the wheel
of mind restless as five monkeys
running in place
At least it’s entertaining
when there are dreams of many
energetically bringing “Zen”
from India to China to Japan
to California and New York
riding on a wave of understanding
and like sunlight
arriving without a sound
```
April 3, 2010
Like writing, programming is a difficult and complex art. Few programmers write in flowing poetry; most write in halting^^1^^ prose.
:: -- from his paper [[One Man's View of Computer Science|http://worrydream.com/refs/Hamming%20-%20One%20Man's%20View%20of%20Computer%20Science.pdf]]
>I doubt that style in programming is tied very closely to any particular machine or language, any more than good writing in one natural language is significantly different than it is in another. There are, of course, particular idioms and details in one language that favor one way of expressing the idea rather than another, but the essentials of good writing seem to transcend the differences in the Western European languages with which I am familiar. And I doubt that it is much different for most general purpose digital machines that are available these days.
----
^^1^^ as in aborting due to an error/bug? :)
Liking is probably the best form of ownership, and ownership the worst form of liking.
<<list-links "[tag{!!title}]">>
Mary Jean "Lily" Tomlin (born September 1, 1939) is an American actress, comedian, writer and producer. She has won multiple awards from many quarters, including Tony Awards, Emmy Awards, and a Grammy Award and has also been nominated for an Academy Award.
Tomlin was born in Detroit, Michigan, the daughter of Lillie Mae (née Ford), a housewife and nurse's aide, and Guy Tomlin, a factory worker.[1] Tomlin's parents were Southern Baptists who moved to Detroit from Paducah, Kentucky, during the Great Depression.
<<list-links "[tag{!!title}]">>
Lisp has jokingly been called "the most intelligent way to misuse a computer". I think that description is a great compliment because it transmits the full flavor of liberation: it has assisted a number of our most gifted fellow humans in thinking previously impossible thoughts.
Listening is much more invigorating than giving voice to all the thoughts and prejudices that anyway keep me company twenty-four hours a day.
Compare to [[Our heads are round so our thoughts can change direction.]]
Also compare to [[For a very good reason, we humans were given two ears but only one mouth.]]
And from a different angle (by [[Johann Wolfgang von Goethe]]):
>The most foolish of all errors is for clever young men to believe that they forfeit their originality in recognizing a truth which has already been recognized by others.
Listening is the better part of speaking.
Or the way I would (personally speaking) put it: Listening to, is the better part of speaking with.
Listening well, as [[Carl Rogers]] said, is ‘a growth experience’. It allows us to get the best of others. The carousel of souls is endless. People have deeply felt and fascinating lives, and they can enfranchise us to worlds we would never otherwise know. If we truly listen, we expand our own intelligence, emotional range, and sense that the world remains open to discovery. Active listening is a kindness to others but, as Rogers was always quick to make clear, it is also a gift to ourselves.
: -- from an article titled [["The Art of Listening"|https://aeon.co/essays/the-psychologist-carl-rogers-and-the-art-of-active-listening]] by [[M M Own|https://aeon.co/users/m-m-owen]]
[active listening] [kindness]
Live as if you were living already for the second time and as if you had acted the first time as wrongly as you are about to act now!
Live as if you were to die tomorrow. Learn as if you were to live forever.
Live the dash. Between the date you’re born and the date you die, you’d better make your time worthwhile.
: -- from his article [[Driving Lessons With a Whiff of Mortality|https://www.nytimes.com/2020/10/16/well/family/driving-lessons-cemetery.html]].
The article describes the author teaching his son, Sebastian, how to drive a car, doing rounds in an L.A. cemetery:
> A chief advantage of teaching your kid to drive in a graveyard is that you probably won’t kill anybody. But there are other benefits both for the young motorist and the parent pumping imaginary brakes in the passenger seat. Those forgiving paved loops insulate you from certain menaces on the alive-and-kicking side of the wrought iron: The speed demons, the tailgaters, the mysterious signaler who never turns. There are no joggers or bicyclists, no kids chasing balls into the street, no Amazon Prime delivery vans stopping without warning. Now that driving is only one of a dozen technologies competing for Sebastian’s attention, anything I can do to offset distractions helps.
"""
"""
See also how [[Brian Christian]] describes [[this brief opportunity we are given|We all start off the same and we all end up the same, with a brief moment of difference in between. Fertilization to fertilizer. Ashes to ashes. And we spark across the gap.]]
(see also [[Henri Poincare]]'s take on [[the brief and "Glorious Accident" called 'our life'|Geologic history shows us that life is only a short episode between two eternities of death, and that, even in this episode, conscious thought has lasted and will last only a moment. Thought is only a gleam in the midst of a long night. But it is this gleam which is everything.]]).
"""
Live with intention.
Walk to the edge.
Listen Hard.^^1^^
Practice wellness.
Play with abandon.
Laugh.
Choose with no regret.
Appreciate your friends.
Continue to learn.
Do what you love.
Live as if this is all there is.
"""
----
^^1^^ - See also what [[Dee Hock]] said about [[listening to silences|While you can learn much by listening carefully to what people say, a great deal more is revealed by what they do not say. Listen as carefully to silence as to sound.]].
Living has yet to be generally recognized as one of the arts. Being born and growing up are such common experiences that people seldom consider what they involve^^1^^. As most readers of books pass from cover to cover, realizing not at all that the letters which form the words are the product of painstaking craftsmanship and that the imposition of the type upon the page, the composition of the title-piece, the binding of the volume, are the result of centuries of study and design, so also we take as a matter of course the miracle of being alive, and the comings and goings of the men and women about us.
: -- from [[his|Karl De Schweinitz]] book "//The Art of Helping People Out of Trouble//"
----
^^1^^ attentive parenting shows you the importance and impact of "good education" and compassionate and adaptable upbringing. At the crux of the art of living is the skill of nimbleness and adaptation to circumstances, or what he calls “the fundamental question of adjustment”
Living is a thing you do now or never — which do you?
Paraphrasing Doctorow (see below):
Living is like driving at night in the fog. You can only see as far as your headlights, but you can make the whole trip that way.
>Planning to write is not writing. Outlining, researching, talking to people about what you're doing, none of that is writing. Writing is writing. . . . Writing is like driving at night in the fog. You can only see as far as your headlights, but you can make the whole trip that way.
Living things are too beautiful for there not to be a mathematics that describes them.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Logic only gives man what he needs. Magic gives him what he wants.
Look at the world:
Beings, afflicted with thick ignorance, and repeated suffering,
are unreleased from clinging to, and aversion from and passion for what has come to be.
Paraphrasing a quotation from the [[Udana scripture|https://en.wikipedia.org/wiki/Udana]], as produced in the book [[The Paradox of Becoming|https://www.accesstoinsight.org/lib/authors/thanissaro/paradoxofbecoming.pdf]] by Thanissaro Bhikkhu (Geoffrey DeGraff)
[[Brainpickings has the famous astronomer, Maria Mitchell, (mis)quoted|https://www.brainpickings.org/2016/12/02/maria-mitchell-astronomy-needlework/]] saying:
>Nothing comes out more clearly in astronomical observations than the immense activity of the universe. “All change, no loss, ’tis revolution all.”
But the poet Edward Young wrote in [[Night Thoughts|https://www.gutenberg.org/files/33156/33156-h/33156-h.htm]] (published 1742):
>Look nature through, ’tis revolution all;
>All change, no death. Day follows night, and night
>The dying day; stars rise and set and rise;
>Earth takes th’ example. See the summer gay,
>With her green chaplet, and ambrosial flowers,
>Droops into pallid autumn; winter gray,
>Horrid with frost, and turbulent with storm,
>Blows autumn, and his golden fruits away;
>Then melts into the spring. Soft spring, with breath
>Favonian, from warm chambers of the south,
>Recalls the first.
and
>In senses, which inherit earth, and heavens;
>Enjoy the various riches Nature yields;
>Far nobler! give the riches they enjoy;
>Give taste to fruits; and harmony to groves;
>Their radiant beams to gold, and gold’s bright fire;
>Take in, at once, the landscape of the world,
>At a small inlet, which a grain might close,
>And half create the wondrous world they see.
>Our senses, as our reason, are divine.
>But for the magic organ’s powerful charm,
>Earth were a rude, uncolour’d chaos still.
>Objects are but th’ occasion; ours th’ exploit;
>Ours is the cloth,[30] the pencil, and the paint,
>Which nature’s admirable picture draws;
>And beautifies creation’s ample dome.
What, I thought to myself as I gazed at [my daughter], if anything should happen to that creature? Looking back, we seem to detect clairvoyance in certain moments of apprehension, but mine were no more than pass like a chill over the heart of any parent watching his treasure asleep in bed or taking off down the road on a bicycle.
<<comparequote "Marilynne Robinson" "Religion is a human projection of humanity's conceptions of beauty, goodness, power, and other valued things, a humanizing of experience by understanding it as structured around and mirroring back these values." "reflecting feelings">>
an anthropologist and naturalist.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
"""
I am part of a lost generation,
and I refuse to believe that
I can change the world
I realize this may be a shock but
'Happiness comes from within'
is a lie, and
'Money will make me happy'
So in thirty years I will tell my children
they are not the most important thing in my life.
My employer will know that
I have my priorities straight because
work
is more important than
family
I tell you this
Once upon a time
Families stayed together
but this will not be true in my era
this is a quick fix society
Experts tell me
Thirty years from now I will be celebrating the 10th anniversary of my divorce
I do not concede that
I will live in a country of my own making
In the future
Environmental destruction will be the norm
No longer can it be said that
My peers and I care about this earth
It will be evident that
My generation is apathetic and lethargic
It is foolish to presume that
There is hope.
"""
''And all of this will come true unless we choose to reverse it.''
(In other words: In case it hasn't dawned on you that something is strange with this poem, now read from bottom to top.)
{see also [[Refugees - poem by Brian Bilston]]).
----
This is mentioned in [[an article|https://s3-eu-west-1.amazonaws.com/content.gresham.ac.uk/data/binary/3498/2021-03-09-1300_HART_Fiction-T.pdf]] "Mathematical Structure in Fiction" by professor [[Sarah Hart|https://www.gresham.ac.uk/professors-and-speakers/professor-sarah-hart/]]:
> Another way to direct readers through a narrative is by giving instructions on how it is to be read. I’ll just give two examples, one mathematical and one not. Reverse poems are poems that are read the “right way” first, and are followed by the instruction “now read this poem backwards”. Often, the first, top to bottom, reading of the poem is pessimistic, but then the reverse version is uplifting.
[reversed poem] [literary devices] [read backwards]
Lots of my dying patients say they grow in bounds and leaps, and finish all the unfinished business. But assisting a suicide is cheating them of these lessons, like taking a student out of school before final exams. That's not love, it's projecting your own unfinished business.
(this may be true, but it takes a lot of courage ...)
[[She|Elizabeth Kubler-Ross]] also said:
> Those who have the strength and the love to sit with a dying patient in the silence that goes beyond words will know that this moment is neither frightening nor painful, but a peaceful cessation of the functioning of the body. Watching a peaceful death of a human being reminds us of a falling star; one of a million lights in a vast sky that flares up for a brief moment
: ― in her book //"On Death and Dying"//
[life lessons]
An American critic and author. He was a novelist and biographer, and wrote extensively on drama and the 18th century.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Love at first sight isn't always 20/20.
From the Woody Allen movie [["Anything Else"|I was just thinking how strange life is, full of inexplicable mystery; you know, like anything else.]]
Love does not consist of gazing at each other, but in looking outward together in the same direction.
Love people and use things. The reverse does not make you happy.
:: - from the documentary The Minimalists: Joshua Fields Millburn & Ryan Nicodemus
their website at http://www.theminimalists.com/
It was as if they had leapt over the arduous cavalry of conjugal life and gone straight to the heart of love. They were together in silence like an old married couple wary of life, beyond the pitfalls of passion, beyond the brutal mockery of hope and the phantoms of disillusion: beyond love. For they had lived together long enough to know that love was always love, anytime and anyplace, but it was more solid the closer it came to death.
: -- from //Love in the Time of Cholera//
```
Love while you've got
love to give.
Live while you've got
life to live.
```
:: -- Memento Vivere
(in addition to Memento Mori)
Luck is my middle name,’ said [[Rincewind|http://discworld.wikia.com/wiki/Rincewind]], indistinctly. ‘Mind you, my first name is Bad.'
As opposed to how Her Majesty's 007 Agent introduces himself: The name is Bond; James Bond.
a German philosopher and anthropologist
<<list-links "[tag{!!title}]">>
> When I was still doubtful as to his ability, I asked [[G. E. Moore|https://plato.stanford.edu/entries/moore/]] for his opinion. Moore replied, 'I think very well of him indeed.' When I enquired the reason for his opinion, he said that it was because Wittgenstein was the only man who looked puzzled at his lectures.
:: — [[Bertrand Russell]]
> I once read about Wittgenstein that he used to think so hard that you could actually see him doing it.
:: — [[David Markson]] in his book //Wittgenstein's Mistress//
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
http://www.mj-ryan.com/
<<list-links "[tag{!!title}]">>
US Secretary of State under Bill Clinton.
<<list-links "[tag{!!title}]">>
Astronaut Dr. Mae Jemison - Astronaut, engineer, entrepreneur, physician and educator
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
[[Searching for a quote]]
[[Quote Categories]]
[[Quote Authors]]
[[GettingStarted]]
[[Customization Notes]]
Make it right before you make it fast. Make it clear before you make it faster. Keep it right when you make it faster.
:: -- from P. J. Plauger - Kernighan and Plauger, The Elements of Programming Style
Art is anything you can do well. Anything you can do with Quality.
Making... an art out of your technological life is the way to solve the problem of technology.
:: -- in an [[NPR Interview (1974)|https://www.npr.org/2017/11/13/4612364/zen-and-the-art-of-motorcycle-maintenance-author-robert-pirsig]] with [[Connie Goldman|http://www.congoldman.org/]]
a Mauritian writer, painter, and visionary, known especially for his [[Sens-Plastique|https://cakeordeathsite.wordpress.com/2019/11/21/sens-plastique/]], a work consisting of several thousand aphorisms and pensées.
<<list-links "[tag{!!title}]">>
* Ah is the shortest of human cries, Oh the longest. Man is born in an Ah and dies in an Oh, for birth is immediate and death is like an airplane taking off.
* Brusque movements of the eye cast a single gleam, and slow movements add a thousand others.
* Art is nature speeded up and God slowed down.
* The flower in the vase smiles, but no longer laughs.
* We always keep God waiting while we admit more importunate suitors. [attending to the most important things] [priorities] [reminds me of [[Joy Williams]]'s personification of God].
* A mirror has no heart but plenty of ideas.
* Monkeys are superior to men in this: when a monkey looks into a mirror, he sees a monkey.
* The sun is pure communism everywhere but in cities, where it's private property.
* We speak with our lips to explain, with our throats to convince.
* We see a friend’s eye as one and indivisible. A stranger’s eye we take in part by part: the white, the iris, and the pupil. [compare to [[Loren Eiseley|One does not meet oneself until one catches the reflection from an eye other than human.]]'s observation ].
From [[his|Stanislaw Lem]] Sci-Fi book "//Solaris//":
> Man does not create gods, in spite of appearances. The times, the age, impose them on him. Man can serve his age or rebel against it, but the target of his cooperation or rebellion comes to him from outside.
Which is a part of a dialog between Kelvin and Snow, where Kelvin asks:
> do you happen to know if there was ever a belief in an...imperfect God?'
>
>'What do you mean by imperfect?' Snow frowned. 'In a way all the gods of the old religions were imperfect, considered that their attributes were amplified human ones. The God of the Old Testament, for instance, required humble submission and sacrifices, and he was jealous of other gods. The Greek gods had fits of sulks and family quarrels, and they were just as imperfect as mortals...'
>
>'No,' I interrupted. 'I'm not thinking of a god whose imperfection arises out of the candor of his human creators, but one whose imperfection represents his essential characteristic: a god limited in his omniscience and power, fallible, incapable of foreseeing the consequences of his acts, and creating things that lead to horror.
>He is a...sick god, whose ambitions exceed his powers and who does not realize it at first. A god who has created clocks, but not the time they measure. He has created systems or mechanisms that serve specific ends but have now overstepped and betrayed them. And he has created eternity, which was to have measured his power, and which measures his unending defeat.'
[human nature]
Man must learn to live without those consolations called religions, which his own intelligence must by now have told him belong to the childhood of the race. Philosophy can really give us nothing permanent to believe either; it is too rich in answers, each canceling out the rest.
The quest for Meaning is foredoomed. Human life ‘means’ nothing. But that is not to say that it is not worth living. What does a Debussy Arabesque ‘mean,’ or a rainbow or a rose? A man delights in all of these, knowing himself to be no more—a wisp of music and a haze of dreams dissolving against the sun.
Man has only his own two feet to stand on, his own human trinity to see him through: Reason, Courage, and Grace. And the first plus the second equals the third.
Man is the animal that draws lines which he himself then stumbles over.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor.
Yiddish - .דער מענטש טראַכט און גאָט לאַכט
Der mentsh trakht un Got lakht.
Man plans/strives/toils and God laughs.
English equivalent; Man proposes, God disposes.
Source: Furman, Israel (1968). יידישע שפריכווערטער און רעדנסארטן.
German equivalent: Der Mensch denkt und Gott lenkt. (man thinks/plans and God steers/controls)
German gloss (unattested): Der Mensch trachtet und Gott lacht.
or, [[my|Haggai Mark]] free Hebrew translation: האדם עמל והאל צוהל
Compare to [[Woody Allen]]: [[If you want to make God laugh, tell him your future plans.]]
(or as [[Henry Fielding]] observed:
> All Nature wears one universal grin.
)
But Terry Pratchett tones it down a bit, describing an exchange between someone and (the personified, and ALWAYS speaking in CAPITALS) [[DEATH|http://www.chrisjoneswriting.com/death.html]]:
>'Are you a hunter?'
>I LIKE TO THINK I AM A PICKER-UP OF UNCONSIDERED TRIFLES.
[[Soren Kierkegaard]] tells the following:
>A strange thing happened to me in my dream. I was rapt into the Seventh Heaven. There sat all the gods assembled. As a special dispensation I was granted the favor to have one wish. "Do you wish for youth," said Mercury, "or for beauty, or power, or a long life; or do you wish for the most beautiful woman, or any other of the many fine things we have in our treasure trove? Choose, but only one thing!" For a moment I was at a loss. Then I addressed the gods in this way: "Most honorable contemporaries, I choose one thing — that I may always have the laughs on my side." Not one god made answer, but all began to laugh. From this I concluded that my wish had been granted and thought that the gods knew how to express themselves with good taste: for it would surely have been inappropriate to answer gravely: your wish has been granted.
(This spirit is reflected, I think, in [[The Calf-Path - poem by Sam Walter Foss]]).
Man sacrifices his health to make money, then he sacrifices his money to recuperate his health. He is so anxious about the future, that he doesn't enjoy the present. And he lives as if he's never going to die, and then dies having never really lived.
: -- the 14th Dalai Lama Tenzin Gyatso
I think that __love__ is actually the root of it so I would say that I don't think molecules of water feel conscious or consciousness but there is some proto-micro quantum thing of love that's the generativity when there's more energy than what they need to maintain equilibrium and that when you sum it all up is something that leads to life and love.
I had my mind blown one day as an undergrad at the physics computer lab. I logged in and as you know when you log into bash [Unix Bourne Shell] there was a little fortune that would come out and it said ''man was created by water to carry itself uphill'' and I just logged out and went to the coffee shop and I got a coffee and I sat there on the quad like you know it's not wrong and yet wtf it could be right. So when you look at it that way it's like yeah okay non-equilibrium physics is a thing.
: -- [[Peter Wang]] in an interview with [[Lex Fridman|https://lexfridman.com/]] titled [["Peter Wang: Python and the Source Code of Humans, Computers, and Reality"|https://www.youtube.com/watch?v=X0-SXS6zdEQ]].
This is similar to [[Niels Bohr]]'s quote: [[A physicist is just an atom’s way of looking at itself.]]
[evolution]
Man's mind, once stretched by a new idea, never regains its original dimensions.
(Compare to [[Tools do more than extend our bodies: they expand our minds. Technology facilitates ideas that might otherwise be inconceivable.]]).
<<comparequote "Cindy Ross" "Returning home is the most difficult part of long-distance hiking; You have grown outside the puzzle and your piece no longer fits." "expanding your horizons and spirit">>
<<list-links "[tag{!!title}]">>
Many of us spend our whole lives running from feeling with the mistaken belief that we cannot bear the pain. But we have already borne the pain. What we have not done is feel all we are beyond that pain.
[suffering] [courage] [honesty]
Many people explain things – although ‘explain’ is probably too positive a word, and it often really means failed to explain but at some length.
compare to [[He left the darkness of the subject unobscured.]]
[style]
Many people would accept that we do not really have knowledge of the world; we have knowledge only of our representations of the world. Yet we seem condemned by our constitution to treat these representations as if they were the world, for our everyday experience feels as if it were of a given and immediate world.
:-- from his book "The Embodied Mind"
<<list-links "[tag{!!title}]">>
Valentin Louis Georges Eugène Marcel Proust (10 July 1871 – 18 November 1922) was a French novelist, critic and essayist best known for his monumental À la recherche du temps perdu (In Search of Lost Time; earlier translated as Remembrance of Things Past).
[[Marcel Proust|http://en.wikipedia.org/wiki/Marcel_Proust]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Marcus Aurelius Antoninus (26 April 121 – 17 March 180) was Roman Emperor from 161 to 180. He ruled with Lucius Verus as co-emperor from 161 until Verus' death in 169. He was the last of the "Five Good Emperors", and is also considered one of the most important Stoic philosophers.
<<list-links "[tag{!!title}]">>
Wrote the play Wit: [ext[(local) play transcript|resources/wit-script-transcript-emma-thompson.html]] (or [[on script-o-rama|http://www.script-o-rama.com/movie_scripts/w/wit-script-transcript-emma-thompson.html]]) of the [[movie with Emma Thompson|http://openlibrary.org/books/OL9394233M/Wit]].
.
<<list-links "[tag{!!title}]">>
''Marginalia''
"""
Sometimes the notes are ferocious,
skirmishes against the author
raging along the borders of every page
in tiny black script.
If I could just get my hands on you,
Kierkegaard, or Conor Cruise O’Brien,
they seem to say,
I would bolt the door and beat some logic into your head.
Other comments are more offhand, dismissive –
“Nonsense.” “Please!” “HA!!” –
that kind of thing.
I remember once looking up from my reading,
my thumb as a bookmark,
trying to imagine what the person must look like
who wrote “Don’t be a ninny”
alongside a paragraph in The Life of Emily Dickinson.
Students are more modest
needing to leave only their splayed footprints
along the shore of the page.
One scrawls “Metaphor” next to a stanza of Eliot’s.
Another notes the presence of “Irony”
fifty times outside the paragraphs of A Modest Proposal.
Or they are fans who cheer from the empty bleachers,
hands cupped around their mouths.
“Absolutely,” they shout
to Duns Scotus and James Baldwin.
“Yes.” “Bull’s-eye.” “My man!”
Check marks, asterisks, and exclamation points
rain down along the sidelines.
And if you have managed to graduate from college
without ever having written “Man vs. Nature”
in a margin, perhaps now
is the time to take one step forward.
We have all seized the white perimeter as our own
and reached for a pen if only to show
we did not just laze in an armchair turning pages;
we pressed a thought into the wayside,
planted an impression along the verge.
Even Irish monks in their cold scriptoria
jotted along the borders of the Gospels
brief asides about the pains of copying,
a bird singing near their window,
or the sunlight that illuminated their page–
anonymous men catching a ride into the future
on a vessel more lasting than themselves.
And you have not read Joshua Reynolds,
they say, until you have read him
enwreathed with Blake’s furious scribbling.
Yet the one I think of most often,
the one that dangles from me like a locket,
was written in the copy of Catcher in the Rye
I borrowed from the local library
one slow, hot summer.
I was just beginning high school then,
reading books on a davenport in my parents’ living room,
and I cannot tell you
how vastly my loneliness was deepened,
how poignant and amplified the world before me seemed,
when I found on one page
a few greasy looking smears
and next to them, written in soft pencil–
by a beautiful girl, I could tell,
whom I would never meet–
“Pardon the egg salad stains, but I’m in love.”
"""
<<list-links "[tag{!!title}]">>
Maria Mitchell (August 1, 1818 – June 28, 1889) was an American astronomer, who in 1847, by using a telescope, discovered a comet which as a result became known as the "Miss Mitchell's Comet". She won a gold medal prize for her discovery which was presented to her by King Frederick VII of Denmark. Mitchell was the first American woman to work as a professional astronomer.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
content curator of http://www.brainpickings.org/
About: http://www.brainpickings.org/index.php/about/
<<list-links "[tag{!!title}]">>
>Robinson is a ferocious defender of all that language cannot express, its ability "to evoke a reality beyond its grasp, to evoke a sense of what cannot be said."
and also,
> Robinson is adept at studying the small print and reading between the lines but she never forgets to look up at the stars.
: -- from [[a review|https://www.theglobeandmail.com/arts/books-and-media/when-i-was-a-child-i-read-books-by-marilynne-robinson/article4223574/]] of her book of essays //When I Was a Child I Read Books//
<<list-links "[tag{!!title}]">>
One of the things I love about Emily Dickinson is the way that, every time I read her poetry, I feel as though I’m encountering it for the first time. It has a reserve of meaning that seems to open very slowly over a long series of readings. Part of that is due to the extreme compression of her poems, which strip away everything inessential, greatly magnifying the potency of each individual word. She puts an extraordinary pressure on language by her parsimoniousness.
: -- From The NYT article [["Marilynne Robinson on Finding the Right Word"|https://www.nytimes.com/2017/09/22/books/review/marilynne-robinson-on-finding-the-right-word.html]]
http://www.mariolivio.com/
<<list-links "[tag{!!title}]">>
A professor at Georgia Tech.
His education blog is at https://computinged.wordpress.com/
<<list-links "[tag{!!title}]">>
A Polish American mathematician, mainly interested in probability theory.
<<list-links "[tag{!!title}]">>
at his blog [[Life Advice that Doesn't Suck|https://markmanson.net/]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
https://en.wikipedia.org/wiki/Mark_Van_Doren
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
A common joke when I was growing up reading "Scientific American", was that the magazine was just a wrapper for getting Martin Gardner’s monthly column into your mailbox.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
a "[[CS Sage|https://en.wikipedia.org/wiki/List_of_computer_scientists]]".
<<list-links "[tag{!!title}]">>
Wrote the book //Lean Forward Into Your Life: Begin Each Day as If It Were on Purpose//.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Author of the books (among others):
//Proust and the Squid: The story and science of the reading brain// and //Reader, Come Home//.
<<list-links "[tag{!!title}]">>
From her book //Proust and the Squid: The story and science of the reading brain// about reading, learning, neurology, and brain development, and specifically (in [[chapter 3 of the book|https://drive.google.com/open?id=14b_u1TBZAJi7kjVjeqADebgJfgYNqDZG]]) about Socrates and his thoughts about (and objections to) [[reading]] and [[writing]]:
* [[Socrates]] taught students to question the words and concepts through the spoken language so they could see what beliefs and assumptions lay beneath them. Socrates demanded that everything be questioned - a passage from Homer, a political issue, a single word - until the essence of the originating though became clear; understanding how it reflected - or failed to reflect - the deepest values of society was always the goal, and the questions and answers in dialogue were the vehicles of interaction.
* [[Socrates]] believed that unlike the “dead discourse” [that is] written speech, oral words, or ‘living speech’ represented dynamic entities full of meanings, sounds, melody, stress, intonation, and rhythms - ready to be uncovered layer by layer through examination and dialogue. By contrast, written words could not speak back. The inflexible muteness of written words doomed the dialogic process [[Socrates]] saw as the heart of education.
** [But, Lev] [[Vygotsky|https://en.wikipedia.org/wiki/Lev_Vygotsky]] observed that the very process of writing one’s thoughts leads individuals to refine their thoughts and to discover new ways of thinking. In this sense, the process of writing can actually reenact within a single person the dialectic that Socrates described to Phaedrus.
*** In other words, the writer’s efforts to capture ideas with ever more precise written words contain within them an inner dialoguer, which each of us who has struggled to articulate our thoughts knows from the experience of watching our ideas change shape through the sheer effort of writing. [[Socrates]] could never have experienced this dialogic capacity of written language, because writing was still too young. Had he lived only one generation later, he might have held a more generous view.
* Hundreds of generations later, I wonder how [[Socrates]] might have responded to the capacity for dialogue in the interactive dimension of communication in the twenty-first century. The capacity of words to “speak back” is with us in many different ways, as children text-message each other, as we email one another and as machines speak, read and translate into different languages. Whether these capacities are being developed in a way that sufficiently reflect the true, critical examination of thought would be, for [[Socrates]] and for us, the essential question.
* A more subtle concern for [[Socrates]] is that written words can be mistaken for reality; their seeming impermeability masks their essentially illusory nature. Because they “seem… as though they were intelligent” and, therefore, closer to the reality of a thing, words can delude people, [[Socrates]] feared, into a superficial, false sense that they understand something when they have only just begun to understand it.
* [[Socrates]] held his entire system in esteem not so much from a concern for preserving tradition as from the belief that only the arduous process of memorization was sufficiently rigorous to form the basis of personal knowledge that could then be refined in dialogue with a teacher. From this larger interconnected view of language, memory, and knowledge, [[Socrates]] concluded that written language was not a “recipe” for memory, but a potential agent of its destruction. Preserving the individual’s memory and its role in the examination and embodiment of knowledge was more important than the indisputable advantages of writing in preserving cultural memory.
* [[Socrates]] did not fear reading. He feared superfluity of knowledge and its corollary - superficial understanding:
::{{imgquote}} Once a thing is put in writing, the composition, whatever it may be, drifts all over the place, getting into the hands not only of those who understand it, but equally to those who have no business with it; it doesn’t know how to address the right people, and not address the wrong. And when it is ill treated and unfairly abused it always needs its parents to come to its help, being unable to defend or help itself.
* Reading presented Socrates with a new version of Pandora’s box: once written language was released there could be no accounting for what would be written, who would read it, or how readers might interpret it.
** Socrates’s concerns become greatly amplified by our present capacity for everyone with a computer to learn very, very quickly about virtually anything, anywhere, anytime at an ‘unguided’ computer screen. Does this combination of immediacy, seemingly limitless information, and virtual reality pose the most powerful threat so far to the kind of knowledge and virtue valued by Socrates, Plato and Aristotle?
* [[Socrates]]' enemy never really was the writing down of words, as [[Plato]] realized. Rather, Socrates fought against failures to examine the protean capacities of our language and to use them “with all our intelligence".
<<list-links "[tag{!!title}]">>
Math is a narrative of human endeavor that shares much with art, music and religion.
[[David Bloor]] in Knowledge and Social Imagery applied the sociology of knowledge to mathematics. Bloor argued that mathematical concepts, such as the number system, can be understood as chosen for their usefulness rather than their inherent correspondence with the nature of the universe. Mathematics can be considered a system of logic, but given that [[there are many possible logical systems|Alternative Mathematics?]], the choice of a particular system can be linked to its usefulness for human purposes. Sal Restivo (1983, 2016) has also undertaken a sociological examination of mathematics, emphasising that mathematics is a social product, not a transcendental domain.
Bloor’s and Restivo’s analyses raise the question of whether the FBT [Fitness Beats Truth] theorem might be undermined by its dependence on a socially shaped system of mathematics. In other words, if our perceptions are the product of evolution and don’t register the truth, and our logical systems are similarly shaped by evolution, maybe they do not register the truth either, with the consequence that the FBT theorem might not be true. While superficially this might seem to be a problem, on reflection it seems unlikely that a different logical system—different from the mathematical system underpinning game theory—would lead to a contrary theorem, Truth-Beats-Fitness, being true. In other words, even if evolutionary games are biased in some systematic way, it seems exceedingly unlikely that this bias would lead to a different conclusion.
Addressing these concerns, [[Donald D. Hoffman]] says the FBT theorem applies only to perceptions of the world. Cognitive capacities need to be studied separately to see how they are shaped by evolution. Not all evolutionarily derived capacities are necessarily unreliable. Indeed, there can be selection pressures for ability with logic. For example, the value of reciprocity for humans can contribute to selection for logical ability. [[Donald D. Hoffman]] says skills in mathematics and logic can exist compatibly with the FBT theorem and with Interface Theory of Perception (ITP), but whether concepts in mathematics and logic enable understanding of objective reality remains to be seen.
: -- from [[his|Brian Martin]] article titled [["Do We See Icons or Reality? A Review of Donald Hoffman’s The Case Against Reality, Brian Martin"|https://social-epistemology.com/2019/12/05/do-we-see-icons-or-reality-a-review-of-donald-hoffmans-the-case-against-reality-brian-martin/]]
(compare to [[Mario Livio]]'s view on [[the effectiveness of mathematics|There is no doubt that the selection of topics we address mathematically has played an important role in math's perceived effectiveness. But mathematics would not work at all were there no universal features to be discovered. You may now ask: Why are there universal laws of nature at all? Or equivalently: Why is our universe governed by certain symmetries and by locality? I truly do not know the answers, except to note that perhaps in a universe without these properties, complexity and life would have never emerged, and we would not be here to ask the question.]]).
(It's interesting to think of how to interpret [[Bertrand Russell]]'s take on the [[nature of our knowledge of the physical and our use of mathematics|Physics is mathematical not because we know so much about the physical world, but because we know so little; it is only its mathematical properties that we can discover.]]).
(and compare to [[G. H. Hardy]]'s belief in the [["solidity" of mathematics|I believe that mathematical reality lies outside us, that our function is to discover or observe it, and that the theorems which we prove, and which we describe grandiloquently as our "creations," are simply the notes of our observations.]]).
Mathematical modeling is about rules - the rules of reality. What distinguishes a mathematical model from, say, a poem, a song, a portrait or any other kind of 'model', is that the mathematical model is an image or picture of reality painted with logical symbols instead of with words, sounds or watercolors.
These symbols are then strung together in accordance with a set of rules expressed in a special language, the language of mathematics. A large part of the story told in the 800 pages or so comprising the two volumes of this work is about the grammar of this language. But a piece of the real world encoded into a set of mathematical rules (i.e. a model) is itself an abstraction drawn from the deeper realm of 'the real thing.' Based as it is upon a choice of what to observe and what to ignore, the real-world starting point of any mathematical model must necessarily throw away aspects of this 'real thing' deemed irrelevant for the purposes of the model.
So when trying to fathom the meaning of the title of this volume, I invite the reader to regard the word 'rule' as either a noun or a verb - or even to switch back and forth between the two - according to taste.
- from "Reality Rules, volume 1"
Mathematical proof is foolproof, it seems, only in the absence of fools.
: -- from [[his|Brian Hayes]] article [["Foolproof"|http://bit-player.org/wp-content/extras/bph-publications/AmSci-2007-01-Hayes-Foolproof.pdf]].
(compare this to what he said about [[the state of crisis in math|I do believe there is a kind of crisis going on (in mathematics)—but only because the entire history of mathematics is just one crisis after another. The foundations are always crumbling, and the barbarians are always at the gate.]]).
The whole thing that makes a mathematician’s life worthwhile is that he gets the grudging admiration of three or four colleagues.
: -- [[Donald Knuth]]
<<list-links "[tag{!!title}]">>
Mathematicians start with axioms and draw consequences, theorems. Physicists have theorems or facts, observed by experiment, and they are looking for axioms, that is to say, laws of physics, backwards. So in physics the idea is to deduce this system of laws or axioms from which the observed things would follow.
<<list-links "[tag{!!title}]">>
Mathematics is not a careful march down a well-cleared highway, but a journey into a strange wilderness, where the explorers often get lost. Rigour should be a signal to the historian that the maps have been made, and the real explorers have gone elsewhere.
But also compare with [[There is not a discovery in science, however revolutionary, however sparkling with insight, that does not arise out of what went before.]]
www.matthaig.com/
Author of the book //The Humans//.
<<list-links "[tag{!!title}]">>
Matter is less material and mind is less spiritual than is generally supposed. The habitual separation of physics and psychology, mind and matter is metaphysically indefensible.
Maurice Polydore Marie Bernard, Count Maeterlinck (29 August 1862 – 6 May 1949) was a Belgian playwright, poet and essayist who wrote in French. He was awarded the Nobel Prize in Literature in 1911.
[[Maurice Maeterlinck|http://en.wikipedia.org/wiki/Maurice_Maeterlinck]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
From [[Michael Spooner]]'s [[analysis of her work|https://digitalcommons.usu.edu/cgi/viewcontent.cgi?article=1235&context=lib_pubs]]:
Poetry for Swenson is an access to the world of the senses, and providing this access “is done with words; with their combination—sometimes with their unstringing”.
I love the word “unstringing.” Language becomes a bracelet of beads, and the poet is allowed to snip the string. “If so, it is in order to make the mind re-member (by dismemberment) the elements, the smallest particles, ventricles, radicals, down to, or into, the Grain—the buried grain of language . . . on which depends the transfer of Sense.”
Thus, if she invents a typographical effect, if she dismembers the word or the page, this is calculated to make the familiar unfamiliar, so that we may re-member it as an available means of effect or persuasion. “It moves,” she tells us. This may leave a reader nonplussed, but never unwelcomed.
(see also [[May Swenson: Self-Portrait]]).
<<list-links "[tag{!!title}]">>
From [["How Everything Happens: Notes on May Swenson's Theory of Writing"|https://digitalcommons.usu.edu/cgi/viewcontent.cgi?article=1235&context=lib_pubs]] by [[Michael Spooner]] at Utah State University:
When she was invited to contribute to a book called Self-Portrait: Book People Picture Themselves (Britton), May Swenson offered the following.
<a href="./resources/May Swenson.png" target="new"><img src="./resources/May Swenson.png" width="55%" height="55%" /></a>
“Damn,” you can hear the other contributors muttering. “Wish I’d thought of that.” Where others in the book “pictured” themselves—wart, eyebrow, tooth, and nose—the one thing Swenson didn’t give us is a visage. She gave the circle and the square. A literally self-effacing gesture, yet in this self-effacement, she transcended the prompt “picture yourself,” doodling us into a trompe l’oeil [visual illusion] of the self that is at once more enigmatic and more revealing.
As she did so often in her poems, Swenson employed two quite simple, deliberately childlike tropes: circle and square. “Aw shucks” they seem to say. “I’m just a cowgirl in the city. Well-rounded but still a little square.” And, of course, it’s the tension between them that she wanted us to see. They are not just a circle and a square; they are a circle within a square within a circle within a square within a circle, and it is the tension and repetition between these simple geometric forms that gives “Self-Portrait” its telescoping illusion.
As she reminds us in her poem [[“The Wonderful Pen”|The Wonderful Pen - poem by May Swenson]], May Swenson is bold enough to show herself, her mind, but she doesn’t need to spell everything out.
"""
I have a wonderful mind:
Inventive. It is
for you to find.
Read me. Read my mind.
"""
If we read her mind, the simple, shy, self-deprecating shapes of “Self-Portrait” become an icon of infinite depth. We might say she is of two minds, even.
[cleverness] [regression] [self]
<<list-links "[tag{!!title}]">>
Meaning in life, as an antidote to suffering and malevolence, is to be found in responsibility.
Meaning is not about happiness, or self esteem, nor momentary pleasure. Meaning is the bearing of the sacrificial burden, which actually enriches and ennobles your life in ways that make the tragic element of our lives tolerable, and keeps you from bitterness.
Meaning is not something you stumble across, like the answer to a riddle or the prize in a treasure hunt. Meaning is something you build into your life. You build it out of your own past, out of your affections and loyalties, out of the experience of humankind as it is passed on to you, out of your own talent and understanding, out of the things you believe in, out of the things and people you love, out of the values for which you are willing to sacrifice something.
The ingredients are there. You are the only one who can put them together into that unique pattern that will be your life. Let it be a life that has dignity and meaning for you. If it does, then the particular balance of success or failure is of less account.
> It's the nature of human nature, and maybe of animal nature, to search for meaning. Is that to say also that if we found the meaning of life, life would become meaningless? No, I wouldn't say that. First, I'm not sure what could possibly be meant by the meaning of life. But one form of the search for meaning is making theories.
: -- [[Oliver Sacks]] in his [[interview with Wim Kayzer|Language always has this double use: not just for communication, but also for organizing your thoughts.]] for the book //A Glorious Accident//
<<list-links "[tag{!!title}]">>
The original quote attributed to Bill Gates: Measuring programming progress by lines of code is like measuring aircraft building progress by weight.
But since aircraft building progress //may// be reasonably measured by the rate of weight-addition, as it is built according to plan (!), I would paraphrase it to:
Measuring program and programmer effectiveness by lines of code is like measuring aircraft effectiveness by weight.
(see also [[You get what you measure]]).
[airplanes]
Media distort reality and breed pessimism. We need optimism for more health, happiness, and success. We need freedom //from// the press to get there.
Meditation [and Mindfulness] is the art of fully conscious living. What we make of our life—the sum total of thoughts, emotions, words, and actions that fill the brief interval between birth and death—is our one great creative masterpiece.
The beauty and significance of a life well lived consists not in the works we leave behind, or in what history has to say about us. It comes from the quality of conscious experience that infuses our every waking moment, and from the impact we have on others.
: -- from [[his|Culadasa (John Yates)]] book "//The Mind Illuminated//"
(compare to what [[Irvin Yalom]] had said about [[rippling|The idea that we can leave something of ourselves, even beyond our knowing, offers a potent answer to those who claim that meaninglessness inevitably flows from one's finiteness and transiency.]]).
[meditator] [elephant] [monkey]
Meditation is not about feeling a certain way. It's about feeling the way you feel.
anthropologist and medical doctor
<<list-links "[tag{!!title}]">>
Memory is the seamstress (and a capricious one at that), who threads our lives together.
Memory is the seamstress, and a capricious one at that. Memory runs her needle in and out, up and down, hither and thither. We know not what comes next, or what follows after. Thus, the most ordinary movement in the world, such as sitting down at a table and pulling the inkstand towards one, may agitate a thousand odd, disconnected fragments, now bright, now dim, hanging and bobbing and dipping and flaunting, like the underlinen of a family of fourteen on a line in a gale of wind.
:: -- from [[Virginia Woolf on Memory|https://www.brainpickings.org/2016/09/26/virginia-woolf-orlando-memory/]]
(compare to [[Julian Barnes]]'s observation: [[What you end up remembering isn't always the same as what you have witnessed.]]).
Men occasionally stumble over the truth, but most of them pick themselves up and hurry off as if nothing had happened.
on which [[Soren Kierkegaard]] relatedly observed:
> Many of us pursue pleasure with such breathless haste that we hurry past it.
or as [[Terry Pratchett]] wrote (in Wyrd Sisters):
>Particles of raw inspiration sleet through the universe all the time. Every once in a while one of them hits a receptive mind, which then invents DNA or the flute sonata form or a way of making light bulbs wear out in half the time. But most of them miss. Most people go through their lives without being hit by even one.
>Some people are even more unfortunate. They get them all.
Men travel faster now, but I do not know if they go to better things.
:― from [[her|Willa Cather]] book //Death Comes for the Archbishop//
a Socratic dialogue scripted by Plato.
<<list-links "[tag{!!title}]">>
Meta-induction is the idea that, because we now know scientific theories of yore have often been wrong, it’s safe to assume our own present-day theories are quite possibly wrong as well.
At best, we nurture the fantasy that knowledge is always cumulative, and therefore concede that future eras will know more than we do. But we ignore or resist the fact that knowledge collapses as often as it accretes, that our own most cherished beliefs might appear patently false to posterity.
That fact is the essence of the meta-induction — and yet, despite its name, this idea is not pessimistic. Or rather, it is only pessimistic if you hate being wrong. If, by contrast, you think that uncovering your mistakes is one of the best ways to revise and improve your understanding of the world, then this is actually a highly optimistic insight.
: -- from [[her|Kathryn Schulz]] entry on [[Edge|https://www.edge.org/]] titled [["The Pessimistic Meta-Induction from the History of Science"|https://www.edge.org/response-detail/11135]]
<<list-links "[tag{!!title}]">>
https://michaelshermer.com/bio/
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
https://www.prageru.com/presenter/mike-rowe
<<list-links "[tag{!!title}]">>
[[Gaston Bachelard]] on attention (and mindfulness):
Since attention has both the need and the power to recapture itself, it is in essence to be found entirely in its resumptions. Attention is also a series of beginnings; it is constituted by those mental rebirths that occur in consciousness when it heeds time’s instants.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Miracles ... seem to me to rest not so much upon faces or voices or healing power coming suddenly near to us from afar off, but upon our perceptions being made finer, so that for a moment our eyes can see and our ears can hear what is there about us always.
: ― from [[her|Willa Cather]] book //Death Comes for the Archbishop//
Misery is almost always the result of thinking.
A Zen Master on his deathbed, was approached by a close disciple, who said to him quite emotionally: I will miss you.
To which the Master responded: why? Are you going somewhere?
One of the founders of the Scratch programming system at MIT.
https://www.media.mit.edu/people/mres/publications/
<<list-links "[tag{!!title}]">>
[[Mohandas Gandhi|http://en.wikipedia.org/wiki/Gandhi]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Molière [Moliere] (Jean-Baptiste Poquelin)
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
The sister of Steve Jobs, the co-founder of Apple Computer.
She is a novelist and a professor of English at the University of California, Los Angeles.
<<list-links "[tag{!!title}]">>
Money is better than poverty, if only for financial reasons.
This reminds me of the saying (in Yiddish) [[my father|Alfred Mark]] has:
> it's not so good with money, as it is bad without it.
but as [[Arnold Bennett]] had observed:
> Much ingenuity with a little money is vastly more profitable and amusing than much money without ingenuity.
In his excellent book "The Darker the Night, the Brighter the Stars" [[Paul Broks]] writes:
>IN GREEK MYTHOLOGY the Moon, Selene, fell in love with a beautiful shepherd, Endymion, as her beams fell on his sleeping face. Dreading the prospect that, like all mortals, he would age and die, she got Zeus to grant him eternal youth, which he did. But also eternal sleep.
>
>AT 02:56 COORDINATED Universal Time on 21 July 1969, Neil Armstrong becomes the first human being to set foot on the surface of the Moon. He has prepared [[a few words to mark the occasion|https://www.ndtv.com/world-news/is-neil-armstrongs-famous-moon-landing-quote-really-a-misquote-524458]]^^1^^: “That's one small step for (a) man, one giant leap for mankind.” The “a” is in parenthesis because, although it is required for the sentence to make any sense at all, it was not uttered by the astronaut—or, at least, it was not heard by the millions of earthlings tuned in for the Moon landing.
>
>Armstrong later claimed to have voiced the “a” and that, somehow, the crucial little word was lost in transmission. We'll never know. Who cares?
>
>Aldrin descended the lunar module ladder for his Moonwalk about twenty minutes later. I wonder if thoughts of his mother crossed his mind on his lunar stroll. She had killed herself the previous year in a state of depression triggered, apparently, by the prospect of her son's forthcoming Moon mission and the fame and the acclaim it would be bound to bring. She feared she wouldn't cope. Her maiden name: Moon.
>
>THOSE FIRST FOOTFALLS in the moon dust punctured a membrane—the thin, porous film that separates reality and imagination. Some saw this as an act of destruction, a violation. It was a sentiment that inspired Tom Stoppard to write //Jumpers//, a play about philosophy, murder and Moon landings. He was curious to know whether, “if and when men landed on the Moon, something interesting would occur in the human psyche.” He cites a statement from the Union of Persian Storytellers (“if you can imagine such a thing”) to the effect that a Moon landing would be damaging to the livelihood of the storytellers.
>
>The Moon as romantic metaphor, as symbol of love and dreams, of the unconscious mind, the passage of time, of life and death, would be diminished.^^2^^ The veil would drop and the Moon would be revealed as rock and dust. We knew that anyway, but there are different ways of knowing.
>
>Then it happened. Armstrong and Aldrin walked on the Moon and nothing changed.
"""
"""
----
^^1^^ see [[Neil Armstrong's quote (GD local copy)|https://docs.google.com/document/d/1PAsseF0KS2ka3L6CbT3b6krwXcY3688JAJRy5RkAPHA/edit?usp=sharing]]
^^2^^ The poet [[May Swenson]] wrote in her poem //Landing On The Moon//:
>On the moon there shines earth light
>as moonlight shines upon the earth…
>If on its obsidian we set our weightless foot,
>and sniff no wind, and lick no rain
>and feel no gauze between us and the Fire
>will we trot its grassless skull, sick for the homelike shade?
>
>Naked to the earth-beam we shall be,
>who have arrived to map an apparition,
>who walk upon the forehead of a myth.
>Can flesh rub with symbol? If our ball
>be iron, and not light, our earliest wish
>eclipses. Dare we land upon a dream?
<<list-links "[tag{!!title}]">>
Morality, like art, means drawing a line someplace.
What does life teach you?
That every day is a new day. Filled with new scenarios. Filled with new problems. And the probability of things going wrong is stupendous.
It’s like realizing that every time you eat hundreds of people can’t… Every time something goes right, somewhere out there hundreds of things are going wrong.
More aware of just how much can go wrong, every day that goes by without a crisis feels like a blessing.
:-- from https://www.quotes-clothing.com/aware-wrong-day-without-crisis-blessing-alain-botton/
The pioneering physicist Philip Anderson, in an essay titled “More Is Different,” offers a classic discussion of emergence. He begins by acknowledging that “the reductionist hypothesis [i.e., the completeness of physical explanations based on known interactions of simple parts] may still be a topic for controversy among philosophers, but among the great majority of active scientists I think it is accepted without question.” But he goes on to emphasize that “[t]he behavior of large and complex aggregates of elementary particles, it turns out, is not to be understood in terms of a simple extrapolation of the properties of a few particles. Each new level of size and complexity supports new forms of organization, whose patterns encode information in new ways and whose behavior is best described using new concepts.
Electronic computers are a magnificent example of emergence. Here, all the cards are on the table. Engineers routinely design, from the bottom up, based on known (and quite sophisticated) physical principles, machines that process information in extremely impressive ways. Your iPhone can beat you at chess, quickly collect and deliver information about anything, and take great pictures, too. Because the process whereby computers, smartphones, and other intelligent objects are designed and manufactured is completely transparent, there can be no doubt that their wonderful capabilities emerge from regular physical processes, which we can trace down to the level of electrons, photons, quarks, and gluons. Evidently, brute matter can get pretty smart.”
: -- From John Brockman's book “Possible Minds - 25 Ways of Looking at AI”.
[Artificial Intelligence]
Morgenbesser to B.F. Skinner: ‘So, you’re telling me it’s wrong to anthropomorphise humans?
Sidney Morgenbesser was a philosopher and professor at Columbia University.
B. F. Skinner was an American psychologist and ''behaviorist''.
Most good is hard. Most evil is easy. Dying, giving up, losing, cheating, and mediocrity is easy. Stay away from the evil easy.
(Haggai Mark paraphrasing) Scott Alexander, who said:
All good is hard. All evil is easy. Dying, losing, cheating, and mediocrity is easy. Stay away from easy.
Most libertarians are worried about government but not worried about business. I think we need to be worrying about business in exactly the same way we are worrying about government.
Most of our days we do not perceive beginnings and endings; births and deaths feel blessedly far away, we find ourselves almost always in the middle of things. Sometimes for years we seem to be nothing but middle. Middle and muddle.^^1^^
Real beginnings and real departures seem a distant memory, and after a long time without the rawness of those firsthand experiences, they become something we are not sure we want anymore, something we want to hold at bay.
"""
What fortitude the Soul contains,
That it can so endure
The accent of a coming Foot,
The opening of a Door!
"""
: — Emily Dickinson
The door does open, the footfall turns into a person, the person enters our fragile aloneness. It is a neighbor, a colleague, or a death, come to us at last, no middle lasts.
More to the point for the raw, poetic imagination of someone like Emily Dickinson, no middle is really any middle at all. For someone who lived her life mostly behind closed doors, Emily Dickinson understood the nature of constant visitation.
[fulfillment]
----
^^1^^ or as [[Mona Simpson]] said:
[[We all — in the end — die in medias res. In the middle of a story. Of many stories.]]
Most of the great triumphs and tragedies of history are caused not by people being fundamentally good or fundamentally evil, but by people being fundamentally people.
Or as [[Robert Penn Warren]] said:
> And what we students of history always learn is that the human being is a very complicated contraption and that they are not good or bad but are good and bad and the good comes out of the bad and the bad out of the good, and the devil take the hindmost.
<<comparequote "Katherine Anne Porter" "The very thing about people that makes the human race interesting is also the thing that makes it so hard to get anything done without the most horrible confusions: no two people think exactly the same way about anything." "understanding and accepting human nature">>
Most of the time, a person sits down at her personal computer not to create, but to read, observe, study, explore, make cognitive connections, and ultimately come to an understanding. This person is not seeking to make her mark upon the world, but to rearrange her own neurons. The computer becomes a medium for asking questions, making comparisons, and drawing conclusions—that is, for learning.
[[J. C. R. Licklider]] once examined how he spent his research time:
In the spring and summer of 1957… I tried to keep track of what one moderately technical person [myself] actually did during the hours he regarded as devoted to work…
About 85 per cent of my “thinking” time was spent getting into a position to think, to make a decision, to learn something I needed to know. Much more time went into finding or obtaining information than into digesting it. Hours went into the plotting of graphs, and other hours into instructing an assistant how to plot. When the graphs were finished, the relations were obvious at once, but the plotting had to be done in order to make them so…
Throughout the period I examined, in short, my “thinking” time was devoted mainly to activities that were essentially clerical or mechanical: searching, calculating, plotting, transforming, determining the logical or dynamic consequences of a set of assumptions or hypotheses, preparing the way for a decision or an insight.
: -- from [[Bret Victor]]'s article [["Magic Ink"|http://worrydream.com/#!/MagicInk]]
Most of us have many people inside us. But in your finer moments, you aspire to things that make sense.
[...]
So let yourself be all the you’s that you are. But don’t let them crowd out the smart one. And as for what you believe in, values are really not so much what you say as what you do. The more you bring those two things into line, the easier it’ll be to get where you’re going.
You know, you may say you want to go to Chicago, but it’s going to be hard to get there if you keep buying tickets to Las Vegas.
: -- from his [[commencement speech at CMU (2015)|https://time.com/collection-post/3889343/alan-alda-graduation-speech-cmu/]]
(where he quotes parts of the commencement speech attributed to [[Kurt Vonnegut]] (at MIT), which was actually given by [[Mary Schmich]] )
Richard Hamming, in [[a lecture titled "You And Your Research"|https://www.cs.virginia.edu/~robins/YouAndYourResearch.pdf]] given at Bell Labs, talked about the importance of tolerating ambiguity^^1^^ and uncertainty:
>There's another trait on the side which I want to talk about; that trait is ambiguity.
>It took me a while to discover its importance. Most people like to believe something is or is not true. Great scientists tolerate ambiguity very well. They believe the theory enough to go ahead; they doubt it enough to notice the errors and faults so they can step forward and create the new replacement theory. If you believe too much you'll never notice the flaws; if you doubt too much you won't get started. It requires a lovely balance. But most great scientists are well aware of why their theories are true and they are also well aware of some slight misfits which don't quite fit and they don't forget it.
>
>Darwin writes in his autobiography that he found it necessary to write down every piece of evidence which appeared to contradict his beliefs because otherwise they would disappear from his mind. When you find apparent flaws you've got to be sensitive and keep track of those things, and keep an eye out for how they can be explained or how the theory can be changed to fit them.
>Those are often the great contributions. Great contributions are rarely done by adding another decimal place. It comes down to an emotional commitment. Most great scientists are completely committed to their problem. Those who don't become committed seldom produce outstanding, first-class work.
Compare to [[Richard Feynman's take on uncertainty|I can live with doubt and uncertainty and not knowing. I think it's much more interesting to live not knowing than to have answers which might be wrong.]].
<<comparequote "G. K. Chesterton" "It is not bigotry to be certain we are right; but it is bigotry to be unable to imagine how we might possibly have gone wrong." "bigotry and fanaticism">>
Most seeming coincidences are of "stunning insignificance".
: -- from his book [[Once Upon a Number|http://movies2.nytimes.com/books/99/04/25/reviews/990425.25alexant.html]]
Most teachers waste their time by asking questions that are intended to discover what a pupil does not know, whereas the true art of questioning is to discover what the pupil does know or is capable of knowing.
Discovering what the pupil does know - reminds me of the idea in Meno:
According to [[Socrates]], the answer to the old question of "how do we know what we don't know" is that we actually rediscover or remember what we already know, but forgot. (Meno by [[Plato]], describing a dialog between Socrates (claimed to be roughly 67 at the time) and Meno, a young aristocrat from Thessaly).
Which is similar in sentiment to what [[Kahlil Gibran]] had said in his poem [[On Teaching|http://www.katsandogz.com/gibran/onteaching.php]]:
>No man can reveal to you aught but that which already lies half asleep in the dawning of your knowledge.
Most writers regard truth as their most valuable possession, and therefore are economical in its use.
[journalism]
Much of the essence of building a program is in fact the debugging of the specification.
tag for quotes by several people/writers/authors
<<list-links "[tag{!!title}]">>
[[Muriel Rukeyser at Poetry Foundation|https://www.poetryfoundation.org/poets/muriel-rukeyser]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Music expresses that which cannot be said and on which it is impossible to be silent.
"""
My apologies to chance for calling it necessity.
My apologies to necessity if I'm mistaken, after all.
"""
::-- from her poem [["Under One Small Star"|https://www.poemhunter.com/poem/under-one-small-star/]]
My birth: “Although present on that occasion I have no clear recollection of the events leading up to it.”
My car-ma ran over your dog-ma. (bumper sticker)
My congratulations to you, sir. Your manuscript is both good and original; but the part that is good is not original, and the part that is original is not good.
(Compare to [[Haggai Mark's take on work|An excellent app/program works flawlessly (as opposed to flaws worklessly).]]).
My experience is what I agree to attend to, and only those things which I notice shape my mind.
: -- quoted by Maria Popova interviewed by [[Krista Tippett]] in [[Mapping meaning in a digital age|http://www.onbeing.org/blog/krista-tippett-mapping-meaning-in-a-digital-age/8650]]
:: (In [[another blog entry|https://www.brainpickings.org/2015/02/09/hope-cynicism/]] [[she|Maria Popova]] elaborates on [[James|William James]]'s observation: The stories that we tell ourselves, whether they be false or true, are always real. We act out of those stories, reacting to their realness.)
"What day is it?" asked Pooh.
"It's today" squeaked Piglet.
"My favourite day," said Pooh.
''My Heart Leaps Up - poem by William Wordsworth''
"""
My heart leaps up when I behold
A rainbow in the sky:
So was it when my life began;
So is it now I am a man;
So be it when I shall grow old,
Or let me die!
The Child is father of the Man;
And I could wish my days to be
Bound each to each by natural piety.
"""
This is an earnest version of the saying [[Wisdom is hereditary - You get it from your children.]]
And the message is: keep being inspired (by the fresh outlook of the young); don't lose the sens of awe and wonder;
A nice [[summary/interpretation from an article by Simran Khurana|https://www.thoughtco.com/child-is-the-father-of-man-3975052]]:
While Wordsworth used the phrase to express hope that he would retain the joys of youth, we often see this expression used to imply the establishment of both positive and negative traits in youth. In watching children at play, we notice that they demonstrate certain characteristics which may remain with them into adulthood.
One interpretation—the "nurture" viewpoint—is that it is necessary to instill in children healthy attitudes and positive traits so they grow up to become balanced individuals. However, the "nature" viewpoint notes that children may be born with certain traits, as can be seen in studies of identical twins who were separated at birth. Different traits, attitudes, and experiences are influenced in different ways by both nature and nurture.
Certainly, traumatic life experiences in youth inevitably occur which also influence us throughout life. Lessons learned both in positive and negative ways guide us all into adulthood, for better or worse.
Egocentricity is the process of wanting something other than what is. Egocentricity means there is an "I" who is separate from everything else and doesn't like it; one thing is happening, but I want a different thing to be happening. Egocentricity is that constant concern with how I feel, what I think, what I'm doing, what I want - looking at what is and seeing it as inadequate. My identity is maintained by the struggle of wanting something other than what is; that is how I continue to know myself.
from "Trying to be Human" Cheri Huber, Ed. Sara Jenkins
''My Left Left''
"""
I woke up this morning,
a little past dawn,
completely surprised that
my left leg was gone.
And that’s when I noticed,
with rising alarm,
as well as my left leg,
I’d lost my left arm.
In fact, I was missing
my body’s left side.
I felt so astonished
I practically cried.
I don’t know what happened
while sleeping last night.
But, don’t be too worried…
I think I’m all right.
"""
(see another case of being [[all right|Everything will be all right in the end. And if it's not all right then it's not yet the end.]])
See an example of annotating the poem [[Ozymandias by Percy Bysshe Shelley|http://genius.com/Percy-bysshe-shelley-ozymandias-annotated]]:
"""
I met a traveller from an antique land
Who said—"Two vast and trunkless legs of stone
Stand in the desert . . .Near them, on the sand,
Half sunk a shatter'd visage lies, whose frown,
And wrinkled lip, and sneer of cold command,
Tell that its sculptor well those passions read
Which yet survive, stamped on these lifeless things,
The hand that mocked them and the heart that fed;
And on the pedestal these words appear:
My name is Ozymandias, King of Kings;
Look on my works, ye mighty, and despair!
Nothing beside remains. Round the decay
Of that colossal wreck, boundless and bare,
The lone and level sands stretch far away."—
"""
or, as [[Julian Barnes]] observed:
> Time...give us enough time and our best-supported decisions will seem wobbly, our certainties whimsical.
: ― in //The Sense of an Ending//
OUT OF TIME
"""
My old clock used to tell the time
and subdivide diurnity;
but now it's lost both hands and chime
and only tells eternity.
"""
My own suspicion is that the universe is not only queerer than we suppose, but queerer than we can suppose... I suspect that there are more things in heaven and earth that are dreamed of, or can be dreamed of, in any philosophy.
Echoing and expanding on William Shakespeare's Hamlet saying:
>there are more things in heaven and earth, Horatio, than are dreamt of in your philosophy.
While fully developed mysticism seems to me mistaken, I yet believe that, by sufficient restraint, there is an element of wisdom to be learned from the mystical way of feeling, which does not seem to be attainable in any other manner. If this is the truth, mysticism is to be commended as an attitude towards life, not as a creed about the world… Even the cautious and patient investigation of truth by science, which seems the very antithesis of the mystic’s swift certainty, may be fostered and nourished by that very spirit of reverence in which mysticism lives and moves.
Myth and magic occupy as much room on its shelves as law and philosophy: Jewish religion—and, more broadly, Jewish culture—contain the rational and the irrational.
: -- From [[his|David Biale]] book //“Cultures of the Jews.”//
Myths are things that never happened, but always are.
: -- from //Concerning myths; that they are divine, and why//.
This, I think, is reflected in [[Ursula K. Le Guin]]'s observation:
:{{imgquote}} When true myth rises into consciousness, its message is always: You must change your life.
"""
"""
(See also [[Edward de Bono]]'s take on the [[restrictiveness of our templates/assumptions|The pattern using system is a very efficient way of handling information... Insight and humour both involve the restructuring of patterns. Creativity also involves restructuring but with more emphasis on the escape from restricting patterns. Lateral thinking involves restructuring, escape and the provocation of new patterns.]]).
But, sometimes [['reality' is taken for granted, and never questioned.|What the hell is water?]]
<<list-links "[tag{!!title}]">>
Dr. Sherman is a professor of philosophy at Georgetown University and the author of “Stoic Wisdom: Ancient Lessons for Modern Resilience.”
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
early American mathematician remembered for his work on ocean navigation. He is often credited as the founder of modern maritime navigation; his book The New American Practical Navigator, first published in 1802, is still carried on board every commissioned U.S. Naval vessel.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
one of the original designers of the MIME protocol for sending multimedia Internet electronic mail.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Nature is only a part of what we can imagine; everything, real or imagined, can be appraised by us, and there is no outside standard to show that our valuation is wrong. We are ourselves the ultimate and irrefutable arbiters of value, and in the world of value Nature is only a part.
Thus in this world we are greater than Nature. In the world of values, Nature in itself is neutral, neither good nor bad, deserving of neither admiration nor censure. It is we who create value and our desires which confer value… It is for us to determine the good life, not for Nature — not even for Nature personified as God.
Nature may answer a question with a Yes or a No, but it whispers one answer and thunders the other, its Yes is provisional, its No is definitive.
: -- from [[his|George Polya]] book "//Mathematics and Plausible Reasoning//"
Nature speaks to those who disappear into it.
Necessity resides in the way we talk about things, not in the things we talk about.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
* Public education does not serve a public. It creates a public. The question is not, Does or doesn't public schooling create a public? The question is, What kind of public does it create?
* All children enter school as question marks and leave as periods. [education] [curiosity]
* To remain ignorant of things that happened before you were born is to remain a child. [history] [culture] [civilization]
* Non-trivial schooling can provide a point of view from which what //is// can be seen clearly, what //was// as a living present, and what //will be// as filled with possibility.
Neither acquiescence in [acceptance of] skepticism nor acquiescence in dogma is what education should produce. What it should produce is a belief that knowledge is attainable in a measure, though with difficulty; that much of what passes for knowledge at any given time is likely to be more or less mistaken, but that the mistakes can be rectified by care and industry.
In acting upon our beliefs, we should be very cautious where a small error would mean disaster; nevertheless it is upon our beliefs that we must act.
[...]
Knowledge, like other good things, is difficult, but not impossible; the dogmatist forgets the difficulty, the skeptic denies the possibility. Both are mistaken, and their errors, when wide-spread, produce social disaster.
Neither noise nor information is predictable. Noise is inherently unpredictable, but carries no information. Information, however, is also unpredictable. If we can predict future data from past data, then that future data stops being information.
Or as [[Gregory Bateson]] observed about Claude Shannon's Information Theory:
>there’s a way of seeing information as "a difference that makes a difference."
(there is value in surprises :)
<<list-links "[tag{!!title}]">>
Never ascribe to malice that which is adequately explained by stupidity.
:: -- Attributed to Napoleon
(this may be a crisp/clear/clean version of [[Occam's Razor|Occam’s Razor tersely captured: that which requires less to explain more is better.]]).
Never express yourself more clearly than you think.
So I think (ha!) that this sentiment/warning is reflected in the following (captured [[in Joe McCarthy's blogpost|https://gumption.typepad.com/blog/2007/01/selfreflection_.html]] on Gumption):
According to [[Sherry Turkle]], the increasing prevalence of talk culture, wherein "people share the feeling to see if they have the feeling", comes at the expense of introspection and probing more deeply into complex thoughts and emotions. Questioning society's tendency toward breathless techno-enthusiasm, with the increasing means available to quickly communicate our state, she champions self-reflection: "having an emotion, experiencing it, taking one's time to think it through and understand it, but only sometimes electing to share it."
On the other hand self-expression may help self-reflection, as [[W.I.B. Beveridge|https://en.wikipedia.org/wiki/William_Ian_Beardmore_Beveridge]] had said:
>Careful and correct use of language is a powerful aid to straight thinking, for putting into words precisely what we mean necessitates getting our own minds quite clear on what we mean.
Never follow your passion, but always bring it along.
: -- from his [[short video on the Prager University site|https://www.prageru.com/video/dont-follow-your-passion/]]
Never give in. Never, never, never, never – in nothing, great or small, large or petty – never give in, except to convictions of honour and good sense.
[determination]
Never let a crisis go to waste.
[opportunities]
Never trouble another for what you can do for yourself.
[[My father|Alfred Mark]], used to quote a Hebrew saying in the same spirit (but much more graphic):
פשוט נבלה בשוק ואל תצטרך לבריות
i.e., better skin cadavers in the marketplace, then be dependent on other people.
Or as [[Charles Caleb Colton]] put more "spiritually":
> To be obliged to beg our daily happiness from others bespeaks a more lamentable poverty than that of him who begs his daily bread.
Never wrestle with a pig. You both get dirty, and besides, the pig likes it.
<<comparequote "David Epstein" "It's a little like wrestling a gorilla. You don't quit when you're tired, you quit when the gorilla is tired." "arguing and struggling">>
From [["Washington Post Style Invitational"|https://stevedarden.wordpress.com/2013/12/11/washington-post-style-invitational-mensa-invitational/]], where the rule is:
''take any word from the dictionary, alter it by adding, subtracting, or changing one letter, and supply a new definition:''
* Intaxication (n.) : Euphoria at getting a tax refund, which lasts until you realize it was your money to start with.
* Bozone (n.): The substance surrounding stupid people that stops bright ideas from penetrating. The bozone layer, unfortunately, shows little sign of breaking down in the near future.
* Giraffiti (n.): Vandalism spray-painted very, very high.
* Sarchasm (n.): The gulf between the author of sarcastic wit and the person who doesn’t get it.
* Inoculatte (v.): To take coffee intravenously when you are running late.
* Decafalon (n.): The grueling event of getting through the day consuming only things that are good for you.
* Dopeler Effect (n.): The tendency of stupid ideas to seem smarter when they come at you rapidly.
* Caterpallor ( n.): The color you turn after finding half a worm in the fruit you’re eating.
''And some new definitions for existing words:''
* Coffee (n.): The person upon whom one coughs.
* Flabbergasted (adj.): Appalled by discovering how much weight one has gained.
* Abdicate (v.): To give up all hope of ever having a flat stomach.
* Lymph (v.): To walk with a lisp.
* Flatulence (n.): Emergency vehicle that picks up someone who has been run over by a steamroller.
* Balderdash (n.): A rapidly receding hairline.
* Testicle (n.): A humorous question on an exam.
* Oyster (n.): A person who sprinkles his conversation with Yiddishisms.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
technical consultant at https://www.nirandfar.com/
<<list-links "[tag{!!title}]">>
No choice recurs. We may get similar choices again, but never that exact one. Hesitation—inaction—is just as irrevocable as action. What the motorist, locked on the one-way road, is to space, we are to the fourth dimension: we truly pass this way but once.
: ― from [[his|Brian Christian]] book //Algorithms To Live By: The Computer Science of Human Decisions//
[[He|Brian Christian]] also wrote:
[[I suppose when you get down to it, everything is always once in a lifetime. We might as well act like it.]]
[uniqueness] [singularity]
SIMILARITY
"""
Commutative Law
No cow's like a horse,
and no horse like a cow.
That's one similarity
anyhow.
"""
[Now that's pure and simple logic :) ]
"""
No man can reveal to you aught but that which already lies half asleep in the dawning of your knowledge.^^1^^
The teacher who walks in the shadow of the temple, among his followers, gives not of his wisdom but rather of his faith and his lovingness.
If he is indeed wise he does not bid you enter the house of his wisdom, but rather leads you to the threshold of your own mind.
"""
:: -- from his poem [[On Teaching|http://www.katsandogz.com/gibran/onteaching.php]]
----
^^1^^ reflecting [ext[the Meno dialog|./resources/Plato_the_Meno.pdf]] by Plato^^2^^.
^^2^^ [[Meno by Plato (Wikipedia)|https://en.wikipedia.org/wiki/Meno]]
No man ever steps in the same river twice, for it's not the same river and he's not the same man.
Panta rhei == "all flows"
No matter how bad things get, you got to go on living, even if it kills you.
[grit] [determination]
No one really survives a real conversation with something/someone other than themselves, and no one survives a real pilgrimage if one is sincere. The person who arrives is never the same person who began it in the first place.
and then [[he|David Whyte]] quotes an Irish monastic:
To go to Rome, great the journey, little the gain, if you do not take it with you, you will not find it there.
[journey] [calling]
No testimony is sufficient to establish a miracle, unless the testimony be of such a kind, that its falsehood would be more miraculous, than the fact, which it endeavors to establish.
: -- Section 10 : Of Miracles Pt. 1 (in "An Enquiry Concerning Human Understanding (1748)")
(or as developmental biologist Lewis Wolpert relayed in [[an interview titled "Manufacturing Belief"|https://www.salon.com/2007/05/15/lewis_wolpert/]] with Steve Paulson:
>you shouldn't believe in any miracle unless the evidence is so strong that it would be miraculous not to believe in it.
)
''No Time''
"""
In a rush this weekday morning,
I tap the horn as I speed past the cemetery
where my parents are buried
side by side beneath a slab of smooth granite.
Then, all day, I think of him rising up
to give me that look
of knowing disapproval
while my mother calmly tells him to lie back down.
"""
[parents] [rushing] [in a hurry]
No work, no idea, stands alone, but that all good, true and beautiful things are networks, ecosystems of intertwingled^^1^^ parts, related entities and similar works.
----
^^1^^ - intertwingled - a term coined by Ted Nelson to express the complexity of interrelations in human knowledge
Nobody teaches life anything.
<<list-links "[tag{!!title}]">>
Nonviolence means avoiding not only external physical violence but also internal violence of spirit. You not only refuse to shoot a man, but you refuse to hate him.
[peace] [acceptance] [holding life lightly]
writer/director (she did movies like "When Harry met Sally", "Sleepless in Seattle", and "You've got mail").
<<list-links "[tag{!!title}]">>
an American mathematician and philosopher. He was a professor of mathematics at the Massachusetts Institute of Technology (MIT).
<<list-links "[tag{!!title}]">>
From [[his interview|https://www.inquiringmind.com/article/3001_5_fischer-interview-with-norman-fischer-god-is-a-three-letter-word/]] with [[Susan Moon]]:
>As you know, I resist the idea of myself as a Zen teacher. There are roles to occupy, and I have mine; everyone has his or hers. I am interested in responding honestly to anyone I meet, as far as I can understand that person. I hope it helps but I never really know. If it does help, the reason is not my wisdom and brilliance, it is the luck (you could also call it karma) that produces a fruitful encounter between two people meeting in the middle of a dazzlingly complicated world. Since I am sensitive to language because of my long-standing poetry habit, I don’t get caught up in debating with someone about their choice of words. I think useful truth is in the meaning, not the words. The art is to find the words to indicate something to this person now.
<<list-links "[tag{!!title}]">>
Not all questions are answered, but fortunately some answers are questioned.
Not far from here, by a white sun, behind a green star, lived the Steelypips, illustrious, industrious, and they hadn’t a care: no spats in their vats, no rules, no schools, no gloom, no evil influence of the moon, no trouble from matter or antimatter – for they had a machine, a dream of a machine, with springs and gears and perfect in every respect. And they lived with it, and on it, and under it, and inside it, for it was all they had- first they saved up all their atoms, then they put them all together, and if one didn’t fit, why they chipped at it a bit, and everything was just fine.
: -- from [[his|Stanislaw Lem]] short story [["The Fifth Sally Or Trurl’s Prescription"|http://kalantarian.org/artak/Literature/steelypips.htm]] (Or Cosmic, Universal Power)
[strong vivid imagery] [process] [bureaucracy]
Not how the world is, is the mystical, but that it is.
In the original German:
> Nicht wie die Welt ist, ist das Mystische, sondern dass sie ist.
In Zen we say, “Not knowing is most intimate.” Not-knowing should not be confused with ignorance. Not-knowing is not the removal of knowing but its deep reevaluation.
Not-knowing means giving up on the idea that one could know in advance or once and for all, or that the knowledge of the past will suffice for the present and the future.
Not-knowing is an indirect way of pointing toward a different kind of knowing that is nonconceptual and nonhabitual. A knowing that, instead, functions through attunement to an implicit order.
[...]
one typical Zen answer to the question, What is wisdom? is “I don’t know.” It would be foolish to understand this answer as an admission of ignorance. It could be that in someone who hasn’t pursued the question of wisdom, but in a genuinely wise person, it points elsewhere. The cultivation of wisdom requires of us to forget what we think we know and to even forget the self that thinks it knows.
(compare to what [[Sherwin Nuland]] said about [[intimate knowledge|The more personal you are willing to be and the more intimate you are willing to be about the details of your own life, the more universal you are.]])
Not only is the universe stranger than we imagine, it is stranger than we can imagine.^^1^^
Compare to [[Imagination is the ability to bring to mind things that are not present to our senses. Creativity is a step beyond imagination: it is putting your imagination to work.]].
Compare to what philosopher of mind Jerry Foder said:
> Not only have we no idea what consciousness “is”, we have no idea what it would be like to have an idea what consciousness “is”.
Or as [[Carlo Rovelli]] put it:
> It is hardly surprising that there are more things in heaven and earth, dear reader, than have been dreamed of in our philosophy - or in our physics.”
: ― from [[his|Carlo Rovelli]] book "//Seven Brief Lessons on Physics//"
And (but?) on the other hand, as [[Marco Polo|https://en.wikipedia.org/wiki/Marco_Polo]] had said:
> I did not tell half of what I saw, for I knew I would not be believed.
::: (what a life he must have led :)
[reality is stranger than ...]
----
^^1^^ or as [[Stanislaw Lem]] put it: [[Physics, my friend, is a narrow path drawn across a gulf that the human imagination cannot grasp. It is a set of answers to certain questions that we put to the world, and the world supplies the answers on the condition that we will not then ask it other questions, questions shouted out by common sense ...]]
Nothing can be made foolproof because fools are so damn ingenious.
[software testing]
"""
Mulder: I've seen too many things not to believe.
Scully: I've seen things too. But there are answers to be found now. We have hope that there is a place to start. That's what I believe.
Mulder: You put such faith in your science, Scully, but... for the things I have seen science provides no place to start.
Scully: Nothing happens in contradiction to nature, only in contradiction to what we know of it, and that's a place to start. That's where the hope is.
"""
: —"Herrenvolk," The X-Files
Nothing is more dangerous than an idea, when it is the only idea we have.
:-- Alain, 1908
or as [[Thomas Aquinas]] had said:
> Beware the man of a single book.
It's dangerous both to the idea holder (from a adaptability/survival/evolution perspective) and people around him (see [[fanaticism|A fanatic is one who can't change his mind and won't change the subject.]] and [[faith|Faith is a state of openness or trust... the attitude of faith is the very opposite of clinging to belief, of holding on...]])
''Nothing Twice''
"""
Nothing can ever happen twice.
In consequence, the sorry fact is
that we arrive here improvised
and leave without the chance to practice.^^1^^
Even if there is no one dumber,
if you're the planet's biggest dunce,
you can't repeat the class in summer:
this course is only offered once.
No day copies yesterday,
no two nights will teach what bliss is
in precisely the same way,
with precisely the same kisses.
One day, perhaps some idle tongue
mentions your name by accident:
I feel as if a rose were flung
into the room, all hue and scent.
The next day, though you're here with me,
I can't help looking at the clock:
A rose? A rose? What could that be?
Is it a flower or a rock?
Why do we treat the fleeting day
with so much needless fear and sorrow?
It's in its nature not to stay:
Today is always gone tomorrow.
With smiles and kisses, we prefer
to seek accord beneath our star,
although we're different (we concur)
just as two drops of water are.
"""
[uniqueness] [serendipity] [love] [fleeting moments] [no rehearsal] [no second chance] [original authentic living]
----
^^1^^ or as [[Annie Dillard]] wrote:
> You've got to jump off cliffs all the time and build your wings on the way down.
From the poem [[Black Maps|http://inwardboundpoetry.blogspot.com/2010/09/560-black-maps-mark-strand.html]] by [[Mark Strand]]:
.
"""
Nothing will tell you
where you are.
Each moment is a place
you’ve never been.
"""
(compare to [[Time is a reality confined to the instant and suspended between two voids. Although time will no doubt be reborn, it must first die. It cannot transport its being from one instant to another in order to forge duration. The instant is already solitude… It is solitude in its barest metaphysical value.]]).
[momentariness]
Nothing's a gift, it's all on loan.
Novels that leave out technology misrepresent life as badly as Victorians misrepresented life by leaving out sex.
Nowadays, kindergarten is becoming more and more like school. The rest of school should become more like kindergarten.
Numberless... are the ways, and sometimes imperceptible, in which the affections color and infect the understanding.
[[Novum Organon|http://en.wikipedia.org/wiki/Novum_Organum]] (New Instrument of Science, published 1620)
"""
O, but they say the tongues of dying men
Enforce attention like deep harmony.
Where words are scarce they are seldom spent in vein,
For they breathe truth that breathe their words in pain.
"""
: -- from [[The Bard of Avon|https://biography.yourdictionary.com/articles/why-is-shakespeare-called-the-bard.html]] (in //Richard II//)
Observation, like a flame of attention, wipes away hate.
Observation is like a flame which is attention, and with that capacity of observation, the wound, the feeling of hurt, the hate, all that, is burnt away, gone.
On being in the moment:
…[it is important to be] totally focused in time.
Most people aren’t. They live their lives as a sort of temporal blur around the point where their body actually is – anticipating the future, or holding on to the past. They’re usually so busy thinking about what happens next that the only time they ever find out what is happening now is when they come to look back on it. Most people are like this. They learn how to fear because they can actually tell, down at the subconscious level, what is going to happen next. It’s already happening to them.
and (but?) [[Granny Weatherwax|https://wiki.lspace.org/mediawiki/Granny_Weatherwax]] on obviousness:
>Trouble is, just because things are obvious doesn’t mean they’re true.
But also (Miss Level - another witch from [[Terry Pratchett]]'s wonderful book "A Hat Full of Sky":)
>the thing about the obvious, is that it so often isn’t…
[[Occam’s Razor|https://en.wikipedia.org/wiki/Occam%27s_razor]] tersely captured: that which requires less to explain more is better.
:-- from [[an article about Cybernetics|https://www.pangaro.com/glanville/Glanville-SECOND_ORDER_CYBERNETICS.pdf]] by Ranulph Glanville
(Or also as [[Napoleon Bonaparte]] crisply put it: [[Never ascribe to malice that which is adequately explained by stupidity.]])
an award-winning black sci-fi writer [science fiction]
<<list-links "[tag{!!title}]">>
By Ricardo Reis ([[Fernando Pessoa]])
Translated by Edouard Roditi
"""
1.
Of the gardens of Adonis, Lydia, I love
Most of all those fugitive roses
That on the day they are born,
That very day, must also die.
Eternal, for them, the light of day:
They're born when the sun is already high
And die before Apollo's course
Across the visible sky is run.
We too, of our lives, must make one day:
We never know, my Lydia, nor want
To know of nights before or after
The little while that we may last.
2.
To be great, be whole: nothing that's you
Should you exaggerate or exclude.
In each thing, be all. Give all you are
In the least you ever do.
The whole moon, because it rides so high,
Is reflected in each pool.
"""
Of course God is personal, because we are persons.
From [[brainpickings.org post|https://www.brainpickings.org/2017/03/30/lillian-lieber-infinity/]] quoting from [[Lillian Lieber]]'s book //"Infinity: Beyond the Beyond the Beyond"// ^^1^^:
"""
For those who have not met SAM before,
I wish to summarize
VERY BRIEFLY
what his old acquaintances
may already know,
and then to tell to all of you
MORE about him.
In the first place,
the name “SAM”
was first derived from
Science, Art, Mathematics;
but I now find
the following interpretation
much more helpful:
the “S” stands for
OUR CONTACT WITH THE OUTSIDE WORLD;
please note that
I do NOT say
that “S” represents “facts” or “reality”,
for
the only knowledge we can have of
the outside world
is through our own senses or
“extended” senses —
like microscopes and telescopes et al
which help us to see better,
or radios, etc., which
help us to hear sounds
which we would otherwise
not be aware of at all,
and so on and so on.
But of course
there may be
many, many more things
in the world
which we do not yet perceive
either directly through our senses
or with the aid of
our wonderful inventions.
And so it would be
Quite arrogant
to speak as if we knew
what the outside world “really” is.
That is why I wish to give to “S”
the more modest interpretation
and emphasize that
it represents merely
that PART of the OUTSIDE world
which we are able to contact, —
and therefore even “S” has
a “human” element in it.
Next:
the “A” in SAM represents
our INTUITION,
our emotions, —
loves, hates, fears, etc. —
and of course is also
a “human” element.
And the “M” represents
our ability to draw inferences,
and hence includes
mathematics, logic, “common sense”,
and other ways in which
we mentally derive the “consequences”
before they hit us.
So the “M” too is
a “human” element.
Thus SAM is entirely human
though not an individual human being.
Furthermore,
a Scientist utilizes the SAM within him,
for he must make
“observations” (“S”),
he must use his “intuition” (“A”)
to help him formulate
a good set of basic postulates,
from which his “reasoning powers” (“M”)
will then help him to
derive conclusions
which in turn must again be
“tested” (“S” again!) to see
if they are “correct”.
Perhaps you are thinking that
SAM and the Scientist
are really one and the same,
and that all I am doing is
to recommend that we all become
Scientists!
But you will soon see that
this is not the case at all.
For,
in the first place,
it too often happens, —
alas and alack! —
that when a Scientist is
not actually engaged in doing
his scientific work,
he may “slip” and not use
his “S”, his “A”, and his “M”,
so carefully,
will bear watching,
like the rest of us.
"""
----
^^1^^ This is what [[Maria Popova]] had to say about Lieber's writing style:
> She had a peculiar style resembling poetry, though she insisted it was not free verse but, rather, a deliberate way of breaking lines in order to speed up reading and intensify comprehension. (Curiously, I find her style to have precisely the opposite effect, which is why I’ve enjoyed it so tremendously — it does what poetry does, which is slow down the spinning world and dilate the pupil of attention so that the infinite becomes comprehensible.)
[perception]
Often I believe I’m working toward a result, but always, once I reach the result, I realize that all the pleasure was in planning and executing the path to that result. It comforts me that endings are thus formally unappealing to me—that more than beginning or ending, I enjoy continuing.
Often it's just a short swim from the shipwreck of your life to the island paradise of your dreams, assuming you don't drown in the metaphor.
Read: be realistic? be content? plan and execute well, but then be satisfied with"good" (as opposed to "better")?
Often when you think you're at the end of something, you're at the beginning of something else.
I've felt that many times. My hope for all of us is that "the miles we go before we sleep"^^1^^ will be filled with the feelings that come from deep caring — delight, sadness, joy, wisdom — and that in all the endings of our life, we will be able to see the new beginnings.
----
^^1^^ echoing Robert Frost's poem [[Stopping by Woods on a Snowy Evening|https://www.poetryfoundation.org/poems/42891/stopping-by-woods-on-a-snowy-evening]]
Imitating Yogi Berra: often, throwing the baby with the bath water is throwing out too much...
(so throw out just the baby? :)
The Washington Post cartoonist (for many years) [[Tom Toles|https://www-washingtonpost-com.pacl.idm.oclc.org/people/tom-toles/]] drew his last saying-good-bye cartoon, a portion of which inspired me to fit his "template":
(from the original:)
<a href="./resources/old-merely.jpg" target="new"><img src="./resources/old-merely.jpg" width="85%" height="85%" /></a>
So similarly, one can say:
* Old programmers never die, they merely disappear into the bits (or the Matrix :)
* Old teachers never die, they merely meld into the hearts of their students.
* Old parents never die, they merely melt into their children's psyche.
''הזיקנה - יוליה וינר ''
"""
אם יגידו לכם שהזיקנה טובה מהנעורים,
אל תאמינו
שיש בה הנאות ויתרונות משלה,
אל תאמינו
שהיא בעלת נסיון וידע
ראויה לכבוד ולברכה,
אל תאמינו
הזיקנה טובה רק מהמות
וגם זה בינתים טעון הוכחה.
"""
(compare to [[There are lots of good things about getting old, though at the moment I’m forgetting what they are.]])
Old or young, we're on our last cruise.
and also [[Life is like stepping onto a boat that is about to sail out to sea and sink.]]
Old people, with other old people, are not so old.
Wrote //The Antidote: Happiness for People Who Can’t Stand Positive Thinking//
<<list-links "[tag{!!title}]">>
https://www.oliversacks.com/about-oliver-sacks/
<<list-links "[tag{!!title}]">>
American jurist and Associate Justice of the Supreme Court of the United States.
<<list-links "[tag{!!title}]">>
On a long journey of human life, faith is the best of companions; it is the best refreshment on the journey; and it is the greatest property.
To paraphrase the cartoon character Hagar the Horrible, taking a good, life-long vacation is easy:
"""
1. you quit your job or get fired;
2. you win BIG in the lottery;
3. you retire.
"""
Now, [["leveraging" Will Rogers's logic|Don't gamble; take all your savings and buy some good stock and hold it till it goes up, then sell it. If it don't go up, don't buy it.]], the caveat is: if you don't win the lottery, don't get fired.
From [[Constructionism and computers for learning|https://warwick.ac.uk/fac/sci/dcs/research/em/publications/phd/croe/files/chapter4.pdf]]:
> ‘bricolage involves an informal subjective interaction between a craftworker and the artefact he/she is creating that more closely resembles discovery than organised construction. The model-building activity has an experimental and creative quality: if it is successful, the character of the artefact itself changes in the mind of the discoverer as it develops – it is continuously being newly conceived and reinterpreted in stimulating ways’.
From an article titled [["Epistemological Pluralism and the Revaluation of the Concrete"|http://www.papert.org/articles/EpistemologicalPluralism.html]]
By [[Sherry Turkle]] and Seymour Papert:
>For some people, what is exciting about computers is working within a rule-driven system that can be mastered in a top-down, divide-and-conquer way. Their structured "planner's" approach, the approach being taught in the Harvard programming course, is validated by industry and the academy. It decrees that the "right way" to solve a programming problem is to dissect it into separate parts and design a set of modular solutions that will fit the parts into an intended whole. Some programmers work this way because their teachers or employers insist that they do. But for others, it is a preferred approach; to them, it seems natural to make a plan, divide the task, use modules and subprocedures.
>[...]
>While hierarchy and abstraction are valued by the structured programmers' "planner's" aesthetic, bricoleur programmers, like Levi-Strauss's bricoleur scientists, prefer negotiation and rearrangement of their materials. The bricoleur resembles the painter who stands back between brushstrokes, looks at the canvas, and only after this contemplation, decides what to do next. Bricoleurs use a mastery of associations and interactions. For planners, mistakes are missteps; bricoleurs use a navigation of midcourse corrections. For planners, a program is an instrument for premeditated control; bricoleurs have goals but set out to realize them in the spirit of a collaborative venture with the machine. For planners, getting a program to work is like "saying one's piece"; for bricoleurs, it is more like a conversation than a monologue.
>[...]
>Bricolage does not exclude the use of subprocedures; it simply does not give their a priori delineation the status of a privileged method. Some ways that bricoleurs use subprocedures in a way that feels natural to them are captured in the following examples.
>*First, a part of a program first conceived holistically can be demarcated as a subprocedure at any stage of programming.
>*Second, subprocedures need not be "black boxes"; they too can grow by sculpting as the program grows as a whole.
>*Finally, the bricoleur may use as subprocedures programs that happen to be "lying around," possibly even programs that were originally made for very different purposes.
On the other hand, and on a cautionary note (again, from [[Constructionism and computers for learning|https://warwick.ac.uk/fac/sci/dcs/research/em/publications/phd/croe/files/chapter4.pdf]]):
> ‘premature attempts to write programs lead to bricolage and delay the development of viable models ... There is nothing wrong with experimentation and bricolage-style debugging, as long as it supplements, rather than supplants, planning and formal methods’.
> [...]
>‘The manifestation of bricolage in computer science is endless debugging: try it and see what happens. While we all practice a certain amount of bricolage and while concrete thinking can be especially helpful – if not essential – for students in introductory courses, bricolage is not an effective methodology for professional programming, nor an effective epistemology for dealing with the massive amount of detailed knowledge (that) must be constructed and organised in levels of abstraction (cf. object-oriented programming). The normative planning style that we call software engineering must eventually be learned and practiced’.
(see also [[Programs as webs - not top-down nor bottom-up]])
There are people like Senhor José everywhere, who fill their time, or what they believe to be their spare time, by collecting
stamps, coins, medals, vases, postcards, matchboxes, books, clocks, sport shirts, autographs, stones, clay figurines, empty beverage cans, little angels, cacti, opera programmes, lighters, pens, owls, music boxes, bottles, bonsai trees, paintings, mugs, pipes, glass obelisks, ceramic ducks, old toys, carnival masks,
and they probably do so out of something that we might call metaphysical angst, perhaps because they cannot bear the idea of chaos being the one ruler of the universe, which is why, using their limited powers and with no divine help, they attempt to impose some order on the world, and for a short while they manage it, but only as long as they are there to defend their collection, because when the day comes when it must be dispersed, and that day always comes, either with their death or when the collector grows weary, everything goes back to its beginnings, everything returns to chaos.
: ― from [[his|Jose Saramago]] book //All the Names//
And as [[Jeanette Winterson]] reflects:
> [[Book collecting is an obsession, an occupation, a disease, an addiction, a fascination, an absurdity, a fate. It is not a hobby. Those who do it must do it. Those who do not do it, think of it as a cousin of stamp collecting, a sister of the trophy cabinet, bastard of a sound bank account and a weak mind.]]
On //"Conceptual Integrity"// and creativity from [[his|Fred Brooks]] book //"The Mythical Man-Month"// :
Most European cathedrals show differences in plan or architectural styles between parts built in different generations by different builders. The later builders were tempted to “improve” upon the designs of the earlier ones, to reflect both changes in fashion and differences in individual taste. So the peaceful Norman transept abuts and contradicts the soaring Gothic nave, and the result proclaims the pridefulness of the builders as much as the glory of God.
Against these, the architectural unity of Rheims (the [[Notre-Dame de Reims Cathedral|https://en.wikipedia.org/wiki/Reims_Cathedral#Exterior]]) stands in glorious contrast. The joy that stirs the beholder comes as much from the integrity of the design as from any particular excellences. As the guidebook tells, this integrity was achieved by the self-abnegation of eight generations of builders, each of whom sacrificed some of his ideas so that the whole might be of pure design. The result proclaims not only the glory of God, but also His power to salvage fallen men from their pride.
The resistance creative AI faces, both from artists and from audiences, is a sign of the power and potential of the new medium. The most exciting promise of creative AI is that it runs in complete opposition to the overarching value that defines contemporary art: Identity. The practice itself removes identity from the equation.
[...]
Creative AI is not an expression of a self. Rather it is the permutation and recombination and reframing of other identities. It is not, nor will it be, nor can it be, a representation of a generation or a race or a time. It is not “a voice.” Whatever voice is, it is the opposite. The process of using creative AI is literally derivative. The power of creative AI is its strange mixture of human and other. The revelation of the medium will be the exploitation of that fact.
[...]
Just as hip hop artists developed a consummate familiarity with earlier forms of popular music, the artists of artificial intelligence who use large language models will need to understand the history of the sentence and the development of literary style in all forms and across all genres. Linguistic AI will demand the skills of close reading and a historical breadth as the basic terms of creation.
[...]
The development of creative AI is much, much more important than how cool the new short stories or interactive games can be. For one thing, artistic practice may serve as a desperately needed bridge between artificial intelligence and the humanities. As it stands, those who understand literature and history don’t understand the technology that is about to transform the framework of language, and those who are building the technology that is revolutionizing language don’t understand literature or history.
[...]
: -- from [[Does Artificial Intelligence Really Have the Potential to Create Transformative Art?|https://lithub.com/does-artificial-intelligence-really-have-the-potential-to-create-transformative-art/]], where [[he|Stephen Marche]] writes on the Possible Futures of Machine Creativity
[[Ursula K. Le Guin]] wrote about her experiences reading [[Jose Saramago]], and specifically, his book //"Blindness"//.
She describes her "journey", the effort, her gradual change in attitude and finally, her willingness to trust the author, all in the search for "Redeeming Value".
This is the same point/attitude [[Marilynne Robinson]] expressed about [[Redeeming Value|Redeeming Value is the striving and activities of a person, driven by the belief and the idea that the self is to be refined by exposure to things that are wonderful and difficult and imbued with what is sometimes call "the human spirit".]].
From [[Le Guin's|Ursula K. Le Guin]] book //"Words Are My Matter"// in her essay “Examples of Dignity: Thoughts on the Work of José Saramago”:
I was a bit put off by the first page when I saw the eccentric punctuation. Saramago likes run-on sentences, eschews quotation marks, and is loath to paragraph. Punctuation seems to me one of the few human inventions without bad side-effects, and I am so fond of all the little dots and curls that I once taught a whole writing course devoted to them. So a Saramago page, one dense thicket from top to bottom with only commas to indicate the path, was hard going for me, and I was inclined to resent it.
And soon, as I pushed on through the thicket, I began to get scared. The story was, to put it mildly, a nightmare. Tough-minded thrillers I’d read were custard sauce to this.
[after getting a bit into the book ...]
At this point I stopped reading the book. I couldn’t handle it.
To read on, to be willing to read about terrible cruelty, I had to trust the author^^1^^ unquestioningly, the way one trusts [[Primo Levi|https://en.wikipedia.org/wiki/Primo_Levi]]. I had to know that Saramago was not merely putting on a horror show, exploiting his power over his readers. I was quite ready to admit the power, his Dostoyevskian gift for communicating suffering, but I needed to trust him enough to let him tell me this fearful story in the confidence that he’d make it worth enduring. The only way to find out if he deserved such trust was to read his other books.
So I did. That is, I read all of them I could get in English.
[...]
My course of reading — "The Late Ricardo Reyes", "The Stone Raft", "The Cave", and several other books — was entirely successful. I returned to "Blindness" and began it again from the beginning, by now used to the thickets and confident that wherever Saramago took me, however hard the going, it would be worth it.
Others may not find the book as frightening as I did. Too many novelists, like too many filmmakers, cram their stories with ruthless violence gloatingly described, seeking to violate a shock threshold that grows ever higher, using cruelty to sell their books, to “thrill” readers who have been trained to think that nothing is interesting but “action,” or to keep their own demons at bay by loosing them on other people. And too many realists, following the principle that if it isn’t ugly it can’t be true, are as alert as fire wardens to make sure any glimpse of decency or gleam of hope is promptly extinguished.
Siding more with Keats on this point^^2^^, I generally avoid such fictions—hence both my liking for nonrealist writers and my initial reluctance to trust Saramago’s painfully ugly story. Those inured to fictional brutality and blood-spattered film screens will lack my squeamishness about horrors they take for granted. That is a pity, because they will not have the experience I had in finally reading Blindness straight through, which was of a genuinely miraculous rising up out of awful darkness into a clear, truthful light.
----
^^1^^ [[Zena Hitz]] had [[a similar observations/feelings about trusting an author|When we read or study seriously, ... We may not know in advance how entering a fictional world or considering a philosophical theorem might change us. Learning requires abandonment, the fear of which has to be overcome at the outset.]]
^^2^^ in another essay in the same book, Le Guin writes:
> Keats is on my side in this, if I understand his principle of negative capability^^3^^, and so is [[Lao Tzu]], who observed that [[the use of the pot is where the pot is not. A poem of the right shape will hold a thousand truths. But it doesn’t say any of them.|Thus what we gain is Something, yet it is by virtue of Nothing that this can be put to use.]]
> I am not talking “Art for Art’s sake,” because that unfortunate slogan implies that art is solipsistic, its effect on its audience of no account. That’s a mistake. Art does change people’s minds and hearts.
^^3^^ "Negative Capability" is when a man is capable of being in uncertainties, Mysteries, doubts, without any irritable reaching after fact & reason. (see [["John Keats and Negative Capability"|https://www.bl.uk/romantics-and-victorians/articles/john-keats-and-negative-capability]])
Attributed to Rabbi Akiva:
הַכֹּל צָפוּי, וְהָרְשׁוּת נְתוּנָה, וּבְטוֹב הָעוֹלָם נִדּוֹן. וְהַכֹּל לְפִי רֹב הַמַּעֲשֶׂה:
(Hakol Tsafuy, VeHareshut Netuna... )
Everything is foreseen, and freewill is given, and with goodness the world is judged. And all is in accordance to the majority of the deed.
הוּא הָיָה אוֹמֵר, הַכֹּל נָתוּן בְּעֵרָבוֹן, וּמְצוּדָה פְרוּסָה עַל כָּל הַחַיִּים. הַחֲנוּת פְּתוּחָה, וְהַחֶנְוָנִי מֵקִיף, וְהַפִּנְקָס פָּתוּחַ, וְהַיָּד כּוֹתֶבֶת, וְכָל הָרוֹצֶה לִלְווֹת יָבֹא וְיִלְוֶה, וְהַגַּבָּאִים מַחֲזִירִים תָּדִיר בְּכָל יוֹם, וְנִפְרָעִין מִן הָאָדָם מִדַּעְתּוֹ וְשֶׁלֹּא מִדַּעְתּוֹ, וְיֵשׁ לָהֶם עַל מַה שֶּׁיִּסְמֹכוּ, וְהַדִּין דִּין אֱמֶת, וְהַכֹּל מְתֻקָּן לַסְּעוּדָה:
(... Hapinkas Patuach VeHayad Kotevet... Vehakol Metukan LaSeuda)
He would say: Everything is given as collateral, and a net is cast over all of life. The shop is open, and the shopkeeper grants credit, and the accounting ledger is open, and the hand writes, and everyone who wants to borrow can come and borrow, and the collectors go constantly on their daily rounds and exact payment from man - with his knowledge or without his knowledge - and they have that upon which to rely, and the judgement is true judgement, and everything is prepared for the feast.
- [[Pirkei Avot 3:15, 3:16|https://www.sefaria.org/Pirkei_Avot.3.15-16?lang=bi&with=all&lang2=en]]
[set table] [open notebook] [hand writing] [meal ready]
There is no clear way of making sense of an idea of free will in a pinball game of strict determinism or in a game with elements of random chance thrown in. It doesn’t mean that there isn’t a free will. I’ve often said maybe someday we’ll just discover something. I mean, quantum mechanics was a surprise. General relativity was a surprise. The idea of curved space-time. All of these great discoveries were great surprises, and we shouldn’t decide ahead of time what is or isn’t true.
So it might be that this convincing feeling I have, that I am executing free will, is actually because I’m observing something that is there. I just can’t understand how it’s there. Or it’s a total illusion. It’s a very, very convincing illusion, but it’s an illusion all the same.
In Henry Miller’s meditation on the art of living: “On how one orients himself to the moment depends the failure or fruitfulness of it.
I came across [ext[a short article about book indexing|resources/on_indexing_books.pdf]], and it opened for me a little window into the world of professional indexing and indexers (I assume they have labor unions, conferences, etc.).
It's written by a professional indexer, admiring the amateurish indexing work done by an author I very much admire (Douglas Hofstadter), and it really puts in words what I felt when I (very rarely :-( came across a "good index" at the back of a book: that a good index is a kind of a "mind-map" giving the reader a "navigational aid" by mapping some of the author's mind/concepts/thoughts (which are not reflected in the actual text; kind of at a "meta-level") in a different way (compared to the table of contents, list of illustrations, the linear progression of the book/text itself, etc.).
The article provides an interesting glimpse into what was involved in Hofstadter indexing his book //Le ton beau de Marot: in praise of the music of language//.
(compare to [[Thesauri and synonymizing|Thesaurus - poem by Billy Collins]]).
[indices]
From [[her|Annie Murphy Paul]] [[interview with Ezra Klein|https://www.nytimes.com/2021/07/20/podcasts/transcript-ezra-klein-interviews-annie-murphy-paul.html]] about her book [["The Extended Mind"|https://anniemurphypaul.com/books/the-extended-mind/]]:
!! On metaphors for the brain
When fed a chunk of information, a computer processes it in the same way on each occasion, whether it’s been at work for five minutes or five hours, whether it is located in a fluorescent lit office or positioned next to a sunny window, whether it’s near other computers or is the only computer in the room. This is how computers operate.
But the same doesn’t hold for human beings. The way we’re able to think about information is dramatically affected by the state we’re in when we encounter it.
Another factor in our culture that we haven’t mentioned yet [are the] ideas from popular psychology like grit and the growth mindset, both of which have at their core another metaphor. Not the metaphor of brain as computer, but the metaphor of brain as muscle.
And people start thinking that the brain actually is a muscle, which of course it isn’t. And even as a metaphor, it’s very powerful because it carries with it — there are all these assumptions embedded in it — that lead us to think, oh, if the brain’s a muscle, then the more I work it, the more tirelessly and exhaustively I work this muscle, the stronger it gets, and the better I’ll be able to think.
And again, because metaphors are so powerful and they shape the way we use the brain, I propose my own metaphor in the book for what the brain is like. I compare the brain to a magpie, one of these birds that plucks a twig here and a piece of string here but also more unusual things. I mean, the catalog of things that magpies have incorporated into their nests is amazing, but the point is that they build their nests from whatever is available in their immediate environment and that the brain is something like that. It’s assembling its thought processes from what’s available in its environment. And that means that thinking better is not about working the brain ever harder. It’s about creating a space and a set of capacities wherein you have more and better resources from which to assemble your thought processes.
!! On the Extended Mind
[[Andy Clark]] is the philosopher who originated the idea of the extended mind. And he talks about how we are intrinsically loopy creatures, we’re loopy, and that that’s something that makes us very different from computers. Because computers work in this very linear fashion. It’s input output. It’s all a straight line.
But humans, because of the way our brain evolved, we benefit from looping information and knowledge and ideas in and out of these different domains, bringing in the contribution of our body, or passing it through the brains of other people, or experiencing and thinking about our ideas in a new setting, a new physical setting.
And as Andy Clark points out, a computer would never have an idea printed out, have to read it with their eyes, make up lots of marks in the margins, and then pass it around to their colleagues and then have a whole new understanding of that idea. That’s not how computers work, but that’s how people work. And so when we think of ourselves as loopy creatures, we can kind of create those loops where we’re passing information and ideas in and out of these different domains — the body, spaces, other people’s minds — and then back through our own heads. And that’s a much more fertile and generative way of dealing with information than just always keeping it inside our own heads where it’s not going to be changed or altered or improved in any way.
Freedom from constraint is sometimes called ''negative freedom'' because it is defined by having no positive content; the idea is that we should be free to do whatever we choose, and choose whatever we want, as long as we don’t harm others.^^1^^ (The so-called harm principle is encapsulated in a widely quoted line with no authoritative source: ‘Your right to throw a punch ends at the tip of my nose.’)”
The other type of freedom is more like what philosophers call ''positive freedom''. The emphasis is not merely on what you are free from but also your freedom to do or be or become things of value; to pursue substantive visions of the good life, and clarify what they entail for flourishing as a person.
The belief underlying positive freedom is that moral and spiritual freedom are not givens; they have to be cultivated. On this view, we do not always know what is best for us and sometimes have to spend a lifetime figuring it out.^^2^^
Learning how to concentrate is critical for appreciating positive freedom and for developing it, because positive freedom is ultimately about the transformation of consciousness over time, and we need qualities of concentration to attend to the quality of our consciousness.
Positive freedom depends upon the capacity to concentrate because it involves preferring goal-directed attention to stimulus-directed attention; activities where we feel some agency, rather than those where we are merely [responding].
: -- from [[his|Jonathan Rowson]] book //“The Moves That Matter.”//
----
^^1^^ see [[Piet Hein]]'s [[ditty|Freedom means you're free to do just whatever pleases you; — if, of course that is to say, what you please is what you may.]].
^^2^^ and this type of freedom takes cultivation and effort, as Zen/Buddhist masters, like [[Shunryu Suzuki]], know and say:
> [[You are perfect the way you are, and you can use a little improvement.]]
[fairness] [social order]
'You should give up.'
'Why?'
'For one thing, you'll live longer.'
'Oh, you don't live longer. It just seems longer.'
[resolve] [tenacity] [determination]
Our convincing feeling is that time is absolute. Our convincing feeling is that there should be no limit to how fast you can travel. Our convincing feelings are based on our experiences because of the size that we are, literally, the speed at which we move, the fact that we evolved on a planet under a particular star.^^1^^
So our eyes, for instance, are at peak in their perception of yellow, which is the wave band the sun peaks at. It’s not an accident that our perceptions and our physical environment are connected. We’re limited, also, by that. That makes our intuitions excellent for ordinary things, for ordinary life. That’s how our brains evolved and our perceptions evolved, to respond to things like the Sun and the Earth and these scales.
And if we were quantum particles, we would think quantum mechanics were totally intuitive. Things fluctuating in and out of existence, or not being certain of whether they’re particles or waves — these kinds of strange things that come out of quantum theory — would seem absolutely natural…
Our intuitions are based on our minds, our minds are based on our neural structures, our neural structures evolved on a planet, under a sun, with very specific conditions. We reflect the physical world that we evolved from. It’s not a miracle.
: -- from a [[conversation|https://www.brainpickings.org/2015/01/09/krista-tippett-einsteins-god-janna-levin/]] with [[Krista Tippett]]
[human nature]
[anthropomorphing] -- see [[The Weak and Strong Anthropic Principles]]
----
^^1^^ but it may be wise to keep in mind what [[Octavia E. Butler]] had said:
> [[There's nothing new under the sun, but there are new suns.]]
On our progeny: They will have time enough, in those endless aeons, to attempt all things, and to gather all knowledge … no Gods imagined by our minds have ever possessed the powers they will command … But for all that, they may envy us, basking in the bright afterglow of Creation; for we knew the Universe when it was young.
:: - Arthur C. Clarke in Profiles of the Future (1962)
(and maybe on a smaller scale, [[Sue Fitzmaurice]] on [[parents, children, and technology|To my children: Never make fun of having to help me with computer stuff. I taught you how to use a spoon.]]).
From [[his|Jasper Fforde]] book //The Big Over Easy//, which is part of the "Thursday Next"^^1^^ [[book series|https://jasperfforde.fandom.com/wiki/Thursday_Next_series]].
A Constable Sergeant takes down the details of a young Constable:
"""
"Last name?"
"Tibbit. It's a palindrome", continued the young constable.
"Sorry?"
"Tibbit. Easy to remember. Reads the same backwards as forwards. Tibbit."
Mary raised an eyebrow.
"You mean like: 'Rats live on no evil star?' "
Tibbit nodded his head excitedly. "I prefer the more subtle ones, myself, ma'am, such as: 'A man, a plan, a canal, Panama.' "
Mary sighed.
"Sure you're in the right job?"
Tibbit appeared crestfallen at this so Mary changed the subject. "How long have you been down here?"
"Six months. I was posted for three months but I think they've forgotten about me. I don't mind," he added quickly, "I like it."
"First name?" Constable Sergeant Mary Mary continued.
"Otto," he replied, then added by way of explanation: "Palindrome as well. My sister's name is Hannah. Father liked word games. He was fourteen times World Scrabble Champion. When he died we buried him at Queenzieburn to make use of the triple word score. He spent the greater part of his life campaigning to have respelt, those words that look as though they are spelt wrongly but aren't."
"Such as ?" Mary prompted.
"Oh, skiing, vacuum, freest, eczema, gnu, diarrhoea, that sort of thing. He also thought that 'abbreviation' was too long for its meaning, that 'monosyllabic' should have only one syllable, dyslexic' should be renamed 'O' and 'unspeakable' should be respelt 'unsfzpxkable'."
"How did he do?"
"Apart from the latter, which has met with limited success, not very well."
"""
----
^^1^^ [[Thursday (first name) Next (last name)|https://jasperfforde.fandom.com/wiki/Thursday_Next]] was a detective in SpecOps-27, which is part of the Jurisfiction organization.
> I was born on a Thursday, hence the name. My brother was born on a Monday and they called him Anton--go figure. My mother was called Wednesday, but was born on a Sunday--I don't know why--and my father had no name at all--his identity and existence had been scrubbed by the ChronoGuard after he went rogue. To all intents and purposes he didn't exist at all. It didn't matter. He was always Dad to me...
: ― Jasper Fforde, //The Eyre Affair//
The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination. Few media of creation are so flexible, so easy to polish and rework, so readily capable of realizing grand conceptual structures....
Yet the program construct, unlike the poet's words, is real in the sense that it moves and works, producing visible outputs separate from the construct itself. […]
''The magic of myth and legend has come true in our time. One types the correct incantation on a keyboard, and a display screen comes to life, showing things that never were nor could be.''
Fred Brooks (1975) The Mythical Man-Month: Essays on Software Engineering Page 7
Man's mind is his very essence. Wherever your thoughts are, that is where you are - all of you. This is why it is so important to avoid all evil thoughts, because otherwise that is where your place will be.
and in [[Haim Shapira]]'s translation/interpretation (in his book //"What Really Matters"//):
> אתה נמצא במקום שבו מחשבותך נמצאות. ודא שמחשבותך נמצאות במקום שאתה רוצה להיות.
(compare to the [[Buddhist expression on the importance of purifying ones thoughts|The thought manifests as the word. The word manifests as the deed. The deed develops into a habit, and the habit hardens into character. So watch the thought and its ways with care, And let it spring from love, Out of respect for all beings.]])
"""
Your soul is oftentimes a battlefield, upon which your reason and your judgment wage war against your passion and your appetite.
Would that I could be the peacemaker in your soul, that I might turn the discord and the rivalry of your elements into oneness and melody.
But how shall I, unless you yourselves be also the peacemakers, nay, the lovers of all your elements?
Your reason and your passion are the rudder and the sails of your seafaring soul. If either your sails or your rudder be broken, you can but toss and drift, or else be held at a standstill in mid-seas.
For reason, ruling alone, is a force confining; and passion, unattended, is a flame that burns to its own destruction.
Therefore let your soul exalt your reason to the height of passion, that it may sing;
And let it direct your passion with reason, that your passion may live through its own daily resurrection, and like the phoenix rise above its own ashes.
I would have you consider your judgment and your appetite even as you would two loved guests in your house.
Surely you would not honour one guest above the other; for he who is more mindful of one loses the love and the faith of both.
Among the hills, when you sit in the cool shade of the white poplars, sharing the peace and serenity of distant fields and meadows -- then let your heart say in silence, "God rests in reason."
And when the storm comes, and the mighty wind shakes the forest, and thunder and lightning proclaim the majesty of the sky -- then let your heart say in awe, "God moves in passion."
And since you are a breath in God's sphere, and a leaf in God's forest, you too should rest in reason and move in passion.
"""
From [[his|Jasper Fforde]] book //Lost in a Good Book//.
Detective [[Thursday Next|https://jasperfforde.fandom.com/wiki/Thursday_Next]] talks with her father who is a former member of SpecOps-12, the ChronoGuard. He has the ability to stop time and travel back and forth in time:
"""
[Thursday's Father:] “One day you’ll understand and everything will be more different than you can, at present, possibly hope to imagine.”
I must have looked blank, [so Dad] continued:
“Remember, Thursday, that scientific thought, indeed, any mode of thought whether it be religious or philosophical or anything else, is just like the fashions that we wear — only much longer-lived. It’s a little like a boy band.”
“Scientific thought a boy band? How do you figure that?”
“Well, every now and then a boy band comes along. We like it, buy the records, posters, parade them on TV, idolize them right up until—”
“—the next boy band?” I suggested.
“Precisely. Aristotle was a boy band. A very good one, but only number six or seven. He was the best boy band until Isaac Newton, but even Newton was transplanted by an even newer boy band. Same haircuts — but different moves.”
“Einstein, right?”
“Right. Do you see what I’m saying?”
“That the way we think is nothing more than a passing fad?”
“Exactly. Hard to visualize a new way of thinking? Try this. Go thirty or forty boy bands past Einstein. Where we would regard Einstein as someone who glimpsed a truth, played one good chord in seven forgettable albums.”
“Where is this going, Dad?”
“I’m nearly there. Imagine a boy band so good that you never needed another boy band ever again — or even any more music. Can you imagine that?”
“It’s hard. But yes, okay.”
He let this sink in for a moment.
“When we reach that boy band, my dear, everything we have ever puzzled about becomes crystal clear — and we will kick ourselves that we hadn’t thought of it earlier!”
“We will?”
“Sure. And you know the best thing about it? It’s so devilishly simple.”
“I see,” I replied, slightly dubiously. “And when is this amazing Boy Band discovered?”
Dad suddenly turned serious.
“That’s why I’m here. Perhaps never — which would be frightfully awkward in the grand scheme of things, believe me.”
"""
"""
You talk when you cease to be at peace with your thoughts;
And when you can no longer dwell in the solitude of your heart you live in your lips, and sound is a diversion and a pastime.
And in much of your talking, thinking is half murdered.
For thought is a bird of space, that in a cage of words may indeed unfold its wings but cannot fly.
There are those among you who seek the talkative through fear of being alone.
The silence of aloneness reveals to their eyes their naked selves and they would escape.
And there are those who talk, and without knowledge or forethought reveal a truth which they themselves do not understand.
And there are those who have the truth within them, but they tell it not in words.
In the bosom of such as these the spirit dwells in rhythmic silence.
When you meet your friend on the roadside or in the market place, let the spirit in you move your lips and direct your tongue.
Let the voice within your voice speak to the ear of his ear;
For his soul will keep the truth of your heart as the taste of the wine is remembered
When the colour is forgotten and the vessel is no more.
"""
: -- from his book //The Prophet//.
It’s enormously disorienting to simply say, “I don’t know.” But it’s infinitely more rewarding to understand than to be right — even if that means changing your mind about a topic, an ideology, or, above all, yourself.
- from http://www.brainpickings.org/
On the difference between intelligence and reason:
Intelligence is a razor blade, reason wields it. It is the hand that determines in which direction the blade is pointing.
"""
Create no images of God.
Accept the images that God has provided. They are everywhere, in everything.
God is Change— Seed to tree, tree to forest; Rain to river, river to sea; Grubs to bees, bees to swarm. From one, many; from many, one; Forever uniting, growing, dissolving— forever Changing.
The universe is God’s self-portrait.
"""
: ― from [[her|Octavia E. Butler]] book //Parable of the Sower//
[[She|Octavia E. Butler]] also said:
> [[All that you touch, You Change. All that you Change, Changes you. The only lasting truth is Change.]] because //God is Change.//
(see also [[her|Octavia E. Butler]] take [[On the nature of Self]].)
When we talk about the big bang or the fabric of space, what we are doing is not a continuation of the free and fantastic stories that humans have told nightly around campfires for hundreds of thousands of years. It is the continuation of something else: of the gaze of those same men in the first light of day looking at tracks left by antelope in the dust of the savannah - scrutinising and deducting from the details of reality in order to pursue something that we can't see directly but can follow the traces of. In the awareness that we can always be wrong, and therefore ready at any moment to change direction if a new track appears; but knowing also that if we are good enough we will get it right and will find what we are seeking. That is the nature of science.
: ― from [[his|Carlo Rovelli]] book "//Seven Brief Lessons on Physics//"
This is the deep/fundamental belief of scientists. Science is not telling stories and "anything goes". I think that whether we will get to The Truth is an open question, but we are definitely getting away from a lot of Falsehood.
or as [[Christopher Hitchens]] put it (about monotheism, atheism, and getting closer to the truth :)
> From a plurality of prime movers, the monotheists have bargained it down to a single one. They are getting ever nearer to the true, round figure.
: ― from [[his|Christopher Hitchens]] book "//God is Not Great: How Religion Poisons Everything//"
"""
Self is.
Self is body and bodily
perception. Self is thought, memory,
belief. Self creates. Self destroys.
Self learns, discovers, becomes.
Self shapes. Self adapts. Self
invents its own reasons for being.
To shape God, shape Self.
"""
: ― from [[her|Octavia E. Butler]] book //Parable of the Talents//
(see also [[her|Octavia E. Butler]] take [[On the nature of God]]).
On the other hand, you have different fingers.
I have an experience of recognition, not just in response to others’ ideas, but on the order of a single word. It happens, in my own writing, in those moments when you know there’s a perfect word, even though you have not written it yet. You cast about for it, and over time, some obscure word will come to you — your mind knows it’s there. Often, it’s a word with such an extraordinary precision that you wonder how it survived. You think, This must have come down from early modern English or Anglo-Saxon^^1^^ — how did it come to birth? How did it survive? Who was it that needed this word first and coined it? It’s amazing. You wonder how many people have had any use for it over the last 300 years, but there it is.
: -- From The NYT article [["Marilynne Robinson on Finding the Right Word"|https://www.nytimes.com/2017/09/22/books/review/marilynne-robinson-on-finding-the-right-word.html]]
On the other hand, compare to what [[Nicholas Kemp]] had suggested: [[Avoid Seeking Exact Definitions (e.g., Ikigai)]].
----
^^1^^ I find it true in some Japanese words (see for example [[tsundoku|The sight of a book you’ve read can remind you of the many things you’ve already learned. The sight of a book you haven’t read can remind you that there are many things you’ve yet to learn. And the sight of a partially read book can remind you that reading is an activity that you hope never to come to the end of.]], or [[Yutori (spaciousness)]], or [[Ikigai]].
From [[his|Douglas Hofstadter]] article in the Atlantic [["The Shallowness of Google Translate"|https://www.theatlantic.com/technology/archive/2018/01/the-shallowness-of-google-translate/551570/]]:
To me, the word translation exudes a mysterious and evocative aura. It denotes a profoundly human art form that graciously carries clear ideas in Language A into clear ideas in Language B, and the bridging act should not only maintain clarity but also give a sense for the flavor, quirks, and idiosyncrasies of the writing style of the original author. Whenever I translate, I first read the original text carefully and internalize the ideas as clearly as I can, letting them slosh back and forth in my mind. It’s not that the words of the original are sloshing back and forth; it’s the ideas that are triggering all sorts of related ideas, creating a rich halo of related scenarios in my mind. Needless to say, most of this halo is unconscious. Only when the halo has been evoked sufficiently in my mind do I start to try to express it—to “press it out”—in the second language. I try to say in Language B what strikes me as a natural B-ish way to talk about the kinds of situations that constitute the halo of meaning in question.
I am not, in short, moving straight from words and phrases in Language A to words and phrases in Language B. Instead, I am unconsciously conjuring up images, scenes, and ideas, dredging up experiences I myself have had (or have read about, or seen in movies, or heard from friends), and only when this nonverbal, imagistic, experiential, mental “halo” has been realized—only when the elusive bubble of meaning is floating in my brain—do I start the process of formulating words and phrases in the target language, and then revising, revising, and revising. This process, mediated via meaning, may sound sluggish, and indeed, in comparison with Google Translate’s two or three seconds a page, it certainly is—but it is what any serious human translator does. This is the kind of thing I imagine when I hear an evocative phrase like deep mind.
From my point of view, there is no fundamental reason that machines could not, in principle, someday think; be creative, funny, nostalgic, excited, frightened, ecstatic, resigned, hopeful, and, as a corollary, able to translate admirably between languages. There’s no fundamental reason that machines might not someday succeed smashingly in translating jokes, puns, screenplays, novels, poems, and, of course, essays like this one. But all that will come about only when machines are as filled with ideas, emotions, and experiences as human beings are. And that’s not around the corner. Indeed, I believe it is still extremely far away. At least that is what this lifelong admirer of the human mind’s profundity fervently hopes.
(see [[Hofstadter|Douglas Hofstadter]]'s [[translation experiments|I am proud to call myself “pi-lingual”, meaning the sum of all my fractional languages is a bit more than 3, which is my lighthearted way of answering the question “How many languages do you speak?”]]).
(also see [[his|Douglas Hofstadter]] take on the [[progress of AI|In taking its practical turn, AI has become too much like the man who tries to get to the moon by climbing a tree: “One can report steady progress, all the way to the top of the tree.”]]).
[AI] [Artificial Intelligence]
[[Douglas Hofstadter]] wrote about it in his excellent book [[I am a Strange Loop|http://en.wikipedia.org/wiki/I_Am_a_Strange_Loop]], which is much more than the condensed version of his Pulitzer Prize winning book [[Gödel, Escher, Bach|http://en.wikipedia.org/wiki/G%C3%B6del,_Escher,_Bach]].
In a [[short article by Uriah Kriegel|http://uriahkriegel.com/downloads/TLS.pdf]] he summarizes Hofstadter's main analogy of "strage human loopiness" with the following description of a self-referencing, emergent construction:
:{{imgquote}} Hofstadter tells a wonderful story about the emergence of symbolic thought from neural activity. Imagine a pool table with a million small interacting magnetic marbles (“simms”) on it. These simms careen about the space of the pool table, which he calls the “careenium”. In some circumstances, the simms get magnetized to each other, and may form ball-shaped clusters – “simmballs”. The behaviour of single simms is random, but that of simmballs is not. The simmballs move around inside the careenium depending on what kind of external forces impinge on the careenium’s external walls. Thus the behaviour of simmballs inside the careenium comes to reflect conditions outside it.
:{{imgblank}}
: Our minds, says Hofstadter, work in just this way. Inside the cranium (careenium) are millions of nervous cells whose behaviour is more or less meaningless. But sometimes large clusters of cells coordinate their behaviour in response to the way the external world impinges on parts of the cranium, such as the retina or the ear drums. When they do, these clusters come to constitute symbols (simmballs), symbols that represent external conditions in a sustained manner that effectively constitutes a rudimentary awareness of the external world. The moral is that although we cannot find anything like symbolic thought or awareness when we look at individual brain cells, if we widen our view and consider slightly more abstract and more spread-out structures and patterns within the brain, we just might.
:{{imgblank}}
: What is true for awareness of things other than oneself is true also for self-awareness. One special symbol which takes more time to form is the “I” symbol. If the careenium developed a simmball with which to represent its own operations, it would come to be a self-referential system and have an “I”. Our cranium does have a symbol that represents itself, and it is therefore self-aware. Importantly, however, our symbolic representations have a somewhat “coarse grain”, as philosophers say. When we represent an ice cube, for example, we are aware of it simply as a single, homogenous, clear-pinkish cube. We are not aware of the millions of hydrogen and oxygen atoms making it up. Likewise, when we represent ourselves, we are not aware of the millions of neurons inside our brain, but rather of the various symbols that clusters of them make up. That is to say, the cranium is aware of itself precisely as a theatre of ideas, desires, and hopes, not as a container of cerebral molecules buzzing about meaninglessly. And that is why we experience our mental life in those terms, even though ultimately it all rests on the purposeless activities of so many individually insentient nervous cells.
David Gelernter (of [[Mirror Worlds|http://en.wikipedia.org/wiki/Mirror_Worlds]] fame) wrote in an [[interesting article in Commentary|http://www.commentarymagazine.com/article/the-closing-of-the-scientific-mind/]]:
:{{imgquote}} Computationalists believe that the mind is embodied by the brain, and the brain is simply an organic computer. But in fact, the mind is embodied not by the brain but by the brain and the body, intimately interleaved. Emotions are mental states one feels physically; thus they are states of mind and body simultaneously. (Angry, happy, awestruck, relieved—these are physical as well as mental states.) Sensations are simultaneously mental and physical phenomena. Wordsworth writes about his memories of the River Wye: “I have owed to them/In hours of weariness, sensations sweet,/Felt in the blood, and felt along the heart/And passing even into my purer mind…”
:{{imgblank}}
: Where does the physical end and the mental begin? The resonance between mental and bodily states is a subtle but important aspect of mind. Bodily sensations bring about mental states that cause those sensations to change and, in turn, the mental states to develop further. You are embarrassed, and blush; feeling yourself blush, your embarrassment increases. Your blush deepens. “A smile of pleasure lit his face. Conscious of that smile, [he] shook his head disapprovingly at his own state.” (Tolstoy.) As Dmitry Merezhkovsky writes brilliantly in his classic Tolstoy study, “Certain feelings impel us to corresponding movements, and, on the other hand, certain habitual movements impel to the corresponding mental states….Tolstoy, with inimitable art, uses this convertible connection between the internal and the external.”
:{{imgblank}}
: All such mental phenomena depend on something like a brain and something like a body, or an accurate reproduction or simulation of certain aspects of the body. However hard or easy you rate the problem of building such a reproduction, computing has no wisdom to offer regarding the construction of human-like bodies—even supposing that it knows something about human-like minds.
I love that we can all share the mathematical answers. It’s not about me trying to convince you of what I believe or of my perspective or of my assumptions. We can all agree that one plus one is two, and we can all make calculations that come out to be the same, whether you’re from India or Pakistan or Oklahoma, we all have that in common.
There’s something about that that’s deeply moving to me and that makes mathematics pure and special.
And yet I’m able to have a more practical attitude about it, which is that, well, we can build machines this way. There is a physical reality that we can relate to using mathematics.
From the book //Homer and the Question of Strife// by Jessica Wolfe:
In many cases, Erasmus proposes “figurative applications” for his Homeric proverbs that are quite “distant” from their original meanings or contexts – a process he refers to as detorqueri [torquing; perverting]- or cites Homeric verses in “ways that seem quite opposed to Homer's meanings”.
The preface to the Homeric adages explains how the special flexibility of Homeric epic encourages an interpretive license that he “would not allow ... with other poets” [(n)eque vero idem permiserim in reliquis poetis], because a process of accommodation allows Homer's "words [to be] stretched [detorseris] to give a vastly different sense,” and new meanings infused into the most familiar Homeric lines.
This practice of citing proverbial lines in surprising or incongruous contexts is largely responsible for producing the “novelty” that lends many of the adages their wit.
According to Erasmus, an idea "launched like a javelin in proverbial form strikes with sharper point on the hearer's mind and leaves implanted barbs of thought” [sententia proverbio quasi vibrata feriat acrius auditoris animum, et aculeos quosdam cogitationum relinquat infixos] such that disputes which cannot be solved by arguments are “evaded by a jest” [ioco eludi] in the form of an aptly deployed adage.
This is precisely how Erasmus and many of his early sixteenth-century readers make use of his Homeric adages: as a vehicle for resolving, deflecting, or managing contention through wit.
"""
"""
[[Jorge Luis Borges]] had a similar sentiment:
> I think that the reader should enrich what he is reading. He should misunderstand the text; he should change it into something else.
"""
"""
But, [[Icarusfalling|https://www.blogger.com/profile/00786527401883351156]] [[cautions (and accepts)|http://icarus-falling.blogspot.com/2009/06/einstein-enigma.html]] the transformations of meaning:
> As an author I realize that my words will always be taken out of context, quotes will be made selectively and intentions expressed will be changed to reflect the intention of the reader, finding support or opposition in those words for a different purpose.
and points out:
>Yet, I suppose the grace in our ever changing sociological face, is [that] the source of those words will always remain, ... for those who care to look.
On Truth: Truth is as impossible to be soiled by any outward touch as the sunbeam...
time, the midwife rather than the mother of truth, [... will have] declared her [Truth] legitimate.
From John Milton's [[The Doctrine and Discipline of Divorce|https://en.wikipedia.org/wiki/Doctrine_and_Discipline_of_Divorce]] (1643)
"""
You work that you may keep pace with the earth and the soul of the earth.
For to be idle is to become a stranger unto the seasons,
and to step out of life's procession, that marches in majesty and proud submission towards the infinite.
When you work you are a flute through whose heart the whispering of the hours turns to music.
Which of you would be a reed, dumb and silent, when all else sings together in unison?
Always you have been told that work is a curse and labour a misfortune.
But I say to you that when you work you fulfil a part of earth's furthest dream, assigned to you when that dream was born,
And in keeping yourself with labour you are in truth loving life,
And to love life through labour is to be intimate with life's inmost secret.
But if you in your pain call birth an affliction and the support of the flesh a curse written upon your brow, then I answer that naught but the sweat of your brow shall wash away that which is written.
You have been told also that life is darkness, and in your weariness you echo what was said by the weary.
And I say that life is indeed darkness save when there is urge,
And all urge is blind save when there is knowledge,
And all knowledge is vain save when there is work,
And all work is empty save when there is love;
And when you work with love you bind yourself to yourself, and to one another, and to God.
And what is it to work with love?
It is to weave the cloth with threads drawn from your heart,
even as if your beloved were to wear that cloth.
It is to build a house with affection,
even as if your beloved were to dwell in that house.
It is to sow seeds with tenderness and reap the harvest with joy,
even as if your beloved were to eat the fruit.
It is to charge all things you fashion with a breath of your own spirit,
And to know that all the blessed dead
are standing about you and watching.
Often have I heard you say, as if speaking in sleep, "He who works in marble, and finds the shape of his own soul in the stone, is nobler than he who ploughs the soil.
And he who seizes the rainbow to lay it on a cloth in the likeness of man, is more than he who makes the sandals for our feet."
But I say, not in sleep but in the overwakefulness of noontide, that the wind speaks not more sweetly to the giant oaks than to the least of all the blades of grass;
And he alone is great who turns the voice of the wind into a song made sweeter by his own loving.
Work is love made visible.
And if you cannot work with love but only with distaste, it is better that you should leave your work and sit at the gate of the temple and take alms of those who work with joy.
For if you bake bread with indifference, you bake a bitter bread that feeds but half man's hunger.
And if you grudge the crushing of the grapes, your grudge distils a poison in the wine.
And if you sing though as angels, and love not the singing, you muffle man's ears to the voices of the day and the voices of the night.
"""
Once a thing is put in writing, the composition, whatever it may be, drifts all over the place, getting into the hands not only of those who understand it, but equally to those who have no business with it; it doesn’t know how to address the right people, and not address the wrong. And when it is ill treated and unfairly abused it always needs its parents to come to its help, being unable to defend or help itself.
: -- as quoted in [[Maryanne Wolf]]'s book //Proust and the Squid//.
So each one of us, when we find our feet in the dharma, are not only the teacher of our own teacher, but the teacher of Buddha and his successors. Such radical independence, which is identical with interdependence (for our True Self is No Self and All Selves) is what both student and teacher hold as their common treasure.
Once someone asked a monastic, “Do you agree with your teacher or not?” And the monastic responded, “I half agree.” “Why only half?” “If I agreed completely then I would be ungrateful.”^^1^^
We must trust ourselves; we must trust each other: we and everything that exists are teachers of Zen, which is why there are no teachers of Zen.^^2^^
: -- From [[his|Norman Fischer]] book "//When You Greet Me I Bow//"
----
^^1^^ or as [[Bertrand Russell]] had said in his [[10 Commandments for Thoughtful and Critical Thinking and Living|https://fs.blog/bertrand-russell-ten-commandments/]] (AKA "A Liberal Decalogue"):
>I Find more pleasure in intelligent dissent than in passive agreement, for, if you value intelligence as you should, the former implies a deeper agreement than the latter.
^^2^^ Elsewhere in the book Fischer writes:
> “While in some ways Zen might look like this, in fact Zen is not an educational process but rather a transformational one in which both teacher and student fully engage, each playing his or her proper role. The process itself effects the transformation.
>Think of it as a machine with many moving parts that interact in a complex system, each part affecting every other part. No one part “teaches” while another “learns.” Yet run the machine for a while and something happens: a product is produced, in this case a seasoned Zen practitioner who embodies, in their own unique way, the values, the commitments, and, mostly, the feeling and vision of a life of practice. So, there is Zen but, strictly speaking, no teachers, although yes, the machine won’t turn unless all the parts function fully in their proper places. The teacher, not actually teaching anything, must occupy their place in the process.”
our sense of success in life can imprison us as much as our sense of failure. We will often fight and starve a little for our work when we begin a given path. Our first courageous steps steel us for robust shocks to our system and help keep us on a steady course toward the life and work we want. But once we are successful, the forces that challenge and assail our integrity are far more subtle. There is nothing to rob the human spirit like the rewards of an upper-middle-class existence.
The lawn, the financial commitments, the blurred pages of the up-market catalogues slowly convince us that life is actually our appearance and that any desire, large or small, can be obtained through a toll-free number.
:-- From: “Crossing the unknown sea: work as a pilgrimage of identity.”
Once we realize that imperfect understanding is the human condition there is no shame in being wrong, only in failing to correct our mistakes.
One does not discover new lands without consenting to lose sight of the shore for a very long time.
Similar to [[William Faulkner]]'s:
> You cannot swim for new horizons until you have courage to lose sight of the shore.
Loren Eiseley, who was an anthropologist and naturalist, was talking about encounters with animals when he said:
>One does not meet oneself until one catches the reflection from an eye other than human.^^1^^
and [[Nathan Heller writing in The New Yorker|https://www.newyorker.com/magazine/2016/11/28/if-animals-have-rights-should-robots]] continues:
>In confronting similarity and difference, we are forced to set the limits of our species’ moral reach.
>
>Today, however, reckonings of that sort may come with a twist. In an automated world, the gaze that meets our own might not be organic at all. There’s a growing chance that it will belong to a robot: a new and ever more pervasive kind of independent mind.
compare to [[Malcolm de Chazal]]'s [[observation on observing an eye|We see a friend’s eye as one and indivisible. A stranger’s eye we take in part by part: the white, the iris, and the pupil.]].
"""
"""
[[Alan Lightman]] (in his book //The Accidental Universe: The World You Thought You Knew//) recounts an emotional encounter alluded to by Eiseley's quote above:
<<<.tc-big-quote
One August afternoon, the two baby ospreys of that season took flight for the first time as I stood on the circular deck of my house watching the nest.
All summer long, they had watched me on that deck as I watched them. To them, it must have looked like I was in my nest just as they were in theirs. On this particular afternoon, their maiden flight, they did a loop of my house and then headed straight at me with tremendous speed.
My immediate impulse was to run for cover, since they could have ripped me apart with their powerful talons. But something held me to my ground. When they were within twenty feet of me, they suddenly veered upward and away.
But before that dazzling and frightening vertical climb, for about half a second we made eye contact. Words cannot convey what was exchanged between us in that instant. It was a look of connectedness, of mutual respect, of recognition that we shared the same land.
After they were gone, I found that I was shaking, and in tears. To this day, I do not understand what happened in that half second. But it was one of the most profound moments of my life.
<<<
"""
"""
----
^^1^^ but compare to what [[Jose Saramago]] had said:
> Words that come from the heart are never spoken, they get caught in the throat and can only be read in one's eyes.
The most important of all perceptions is the continual perception of cause and effect—in other words, the perception of the continuous development of the universe—in still other words, the perception of the course of evolution.
When one has thoroughly got imbued into one's head the leading truth that nothing happens without a cause, one grows not only large-minded, but large-hearted. It is hard to have one's watch stolen, but one reflects that the thief of the watch became a thief from causes of heredity and environment which are as interesting as they are scientifically comprehensible; and one buys another watch, if not with joy, at any rate with a philosophy that makes bitterness impossible.
One loses, in the study of cause and effect, that absurd air which so many people have of being always shocked and pained by the curiousness of life. Such people live amid human nature as if human nature were a foreign country full of awful foreign customs. But, having reached maturity, one ought surely to be ashamed of being a stranger in a strange land!
<<comparequote "Sylvia Mark" "This is also fit for humans (or: this is on a human scale; or: this, too, is in the human realm.)" "human behavior">>
One man is more concerned with the impression he makes on the rest of mankind, another with the impression the rest of mankind makes on him.
One may call the world a myth, in which bodies and things are visible, but souls and minds hidden. Besides, to wish to teach the whole truth about the Gods to all produces contempt in the foolish, because they cannot understand, and lack of zeal in the good, whereas to conceal the truth by myths prevents the contempt of the foolish, and compels the good to practice philosophy.
: -- from //Concerning myths; that they are divine, and why//.
<<comparequote "Alfred Mark" "Die Welt is a shekerdik, nur Tsures sind emesdik." "the nature of the world">>
One moon shows in every pool; in every pool, the one moon.
One need only grow old to become gentler in one’s judgments. I see no fault committed which I could not have committed myself.
: -- from his book //Maxims and Reflections//
From the WSJ a few weeks into the Corona Virus pandemic, from [[an article by Jason Zwieg|https://www.wsj.com/articles/stocks-are-cratering-control-the-one-thing-you-can-11584055737]]:
Nobody—not epidemiologists, not government officials, not economists and certainly not market strategists—can say how large an impact the coronavirus will end up having. The optimists might be wrong; so might the pessimists.
Investing, now more than ever, is about controlling the controllable. You can’t control the markets. You can’t control the coronavirus. You can control your own behavior, although that requires making accurate, honest predictions about yourself.
Controlling the controllable doesn’t just mean shrugging off whatever is out of your power. It also means putting some calm and serious thought into what is within your power. Your future success may depend less on what markets do—and more on spending a few quiet minutes figuring out who you are as an investor.
Years ago, the psychologist Daniel Kahneman told me that one of the keys to investing is having what he called “a well-calibrated sense of your future regret.”
By that, he meant that you need to be able to tell, in advance, how bad you will feel if your decisions turn out to be wrong. As he warned with that word “well-calibrated,” it isn’t as easy as it sounds.
Or as [[Jose Saramago]] had written (in //The Cave//):
> The worst pain ... isn't the pain you feel at the time, it's the pain you feel later on when there's nothing you can do about it. They say that time heals all wounds, But we never live long enough to test that theory ...
"""
"""
[decision making] [reason] [regret]
One of the most significant facts about us may finally be that we all begin with the natural equipment to live a thousand kinds of life but end in the end having lived only one.
: -- from his selected essays [[The Interpretation of Cultures|http://web.mit.edu/allanmc/www/geertz.pdf]]
or as the literary critic and poet [[William Empson|https://en.wikipedia.org/wiki/William_Empson]] had said:
> there is more in the child than any man has been able to keep.
One of the secrets to happiness: It’s better to consume humor than to supply it.
It’s also a lot easier. Funny people tend to have particular innate neurological characteristics, and unusually high intelligence. Meanwhile, people who enjoy funny things simply prioritize humor, cultivate the taste for it, and give themselves permission to laugh. To get the happiness benefits of humor, let others tell the jokes; listen and laugh.
: -- from [[his|Arthur C. Brooks]] article titled [["The Link Between Happiness and a Sense of Humor"|https://www.theatlantic.com/family/archive/2021/08/humor-happiness/619704/]]
(compare to [[Be interested. Everyone wants to be interesting – but the vitalizing thing is to be interested. Keep a sense of curiosity. Discover new things. Care. Risk failure. Reach out.]]).
[life advice]
One of the ways sentences can surprise their maker, please their reader, and uncover something new is that they get to the sense they make by other than ordinary logical means.
: -- from an [[interview in Paris Review|https://www.theparisreview.org/interviews/1365/the-art-of-fiction-no-147-richard-ford]]
where he also said:
> I’m always interested in words, and no matter what I’m doing—describing a character or a landscape or writing a line of dialogue—I’m moved, though not utterly commanded by an interest in the sound and rhythm of the words, in addition, I ought to say, to what the words actually denote. Most writers are probably like that, don’t you think? Sometimes I’ll write a sentence that sets up an opportunity for say, a direct object or predicate adjective and I won’t have a clue what the word is except that I know what I don’t want—the conventional word: the night grew dark. I don’t want dark. I might, though, want a word that has four syllables and a long a sound in it. Maybe it’ll mean dark, or maybe it’ll take a new direction. I’ll have some kind of inchoate metrical model in my mind. One of the ways sentences can surprise their maker, please their reader, and uncover something new is that they get to the sense they make by other than ordinary logical means.
One person's constant is another person's variable.
One wondered what it was like, spending your whole life doing something you didn’t want
to do. Like being dead, maybe, only worse, the reason being, you were alive to suffer it.
:: -- in his book //Wyrd Sisters//
This is applicable to looking for "match quality" - a term economists use to describe the degree of fit between the work someone does and who they are -- their abilities and proclivities. (from [[David Epstein|David Epstein Quotes]]'s book [["Range - Why generalists triumph in a specialized world"|https://www.davidepstein.com/the-range/]].
Or the sound advice to
>"not be afraid to turn away from something that's not working for you and might never work for you regardless of how much you invest in it".
Or in other words: [[Don't fall into the 'sunk cost trap'|Don't fall into the 'sunk cost trap' (where cost is not the only thing that sinks).]] :(
One's ideas must be as broad as Nature if they are to interpret Nature.
One's life has value so long as one attributes value to the life of others, by means of love, friendship, and compassion.
From the epigraph in [[her|Ursula K. Le Guin]] book series [[Earthsea|https://earthsea.fandom.com/wiki/Earthsea_Wiki]]:
"""
Only in silence the word,
Only in dark the light,
Only in dying life:
Bright the hawk’s flight
On the empty sky.
"""
: -- “The Creation of Éa”
I think that [[his|Walter Tevis]] book //Mockingbird//, traces a "figure eight" of humanity's evolution:
Humanity developed and advanced to a level where more and more intelligent robots were being built.
The more intelligent robots ("Model 9's") controlled more and more of how things were run and managed on the planet.
These robots saw all of humanities folly, cruelty, stupidity, carelessness, hate, and so on, and started "feeling" depressed. These intelligent creations even entertained suicidal thoughts.
But since they were created and programmed to serve people //and// not damage themselves, they could not "die".
So, one of these most intelligent robots, started a plan/plot to gradually "dumb down" humanity (to the point of illiteracy) and completely halt human reproduction through free dispensing of "happiness pills" (which also suppressed fertility).
And so humanity and the state of the planet deteriorated:
> It all began, I suppose, with learning to build fires—to warm the cave and keep the predators out. And it ended with time-release Valium.
and
> When literacy died, so had history.
The robot's "hope" was that once the last human on the planet died, the robot would not be compelled to serve, and therefore could commit suicide and die.
The twist in the plot is that this same robot enables a human to start learning to read again^^1^^, and that human, and his female companion stopped taking drugs, she became pregnant, and they were expecting the first baby in generations.
Their "pact" with the robot was that after they had the baby, they would help the robot commit suicide (by pushing him over the edge at the top of the Empire State Building in Manhattan).
At the end, they have the baby, and indeed help the robot, and a new cycle begins ("figure-8" or not?).
----
^^1^^ - re-discovering reading:
> “Holy Bible begins: ‘In the beginning, God created the heavens and the earth.’ It does not give the century of the ‘beginning,’ nor is it clear who ‘God’ is, or was. I am not certain whether Holy Bible is a book of history or maintenance or poetry. It names many strange people who do not seem real.”
Opportunity is missed by most people because it is dressed in overalls and looks like work.
Optimism is an occupational hazard of programming: feedback is the treatment.
Or from [[Fred Brooks]]'s book //"The Mythical Man-Month"//:
The programmer builds form pure thought-stuff: concepts and very flexible representations thereof. Because the medium is tractable, we expect few difficulties in implementation; hence our pervasive optimism. Because our ideas are faulty, we have bugs; hence our optimism is unjustified.
In a single task, the assumption that all will go well has a probabilistic effect on the schedule. It might indeed go as planned, for there is a probability distribution for the delay that will be encountered, and “no delay” has a finite probability. A large programming effort, however, consists of many tasks, some chained end-to-end. The probability that each will go well becomes vanishingly small.
Optimism is, in the first instance, a way of explaining failure, not prophesying success. It says that there is no fundamental barrier, no law of nature or supernatural decree, preventing progress.
: — from [[his|David Deutsch]] book "//The Beginning of Infinity: Explanations That Transform the World//"
And from his conversation with Chris Anderson (of TED fame) titled [["On the infinite reach of knowledge"|https://www.ted.com/talks/the_ted_interview_david_deutsch_on_the_infinite_reach_of_knowledge/transcript]]:
The idea of optimism is that all evils are due to lack of knowledge.
Optimism, as I define it, has to do with knowledge. It's not a prediction of the future, it's an explanation of failure. If you explain failure as being inevitable or due to some insuperable malevolent force or just the way things are, then that's a recipe for stasis, which is a recipe for failure, and eventually, death. Therefore, I think that all failure has to be explained in the form: "The reason we didn't succeed is that we didn't know how to." And the knowledge of how to is, in principle, attainable. We don't have it now, but we could have it in the future, if we do the right thing. In fact, it follows from this whole conception of knowledge that we've been talking about all this time, that optimism has to be true. Otherwise, there would be a limitation, which would mean the supernatural and all that stuff. The arguments are watertight, all the way from the scientific worldview to optimism in my view.
<<list-links "[tag{!!title}]">>
Oscar Fingal O'Flahertie Wills Wilde (16 October 1854 – 30 November 1900) was an Irish writer, poet, and prominent aesthete who, after writing in different forms throughout the 1880s, became one of London's most popular playwrights in the early 1890s. Today he is remembered for his epigrams, plays and the tragedy of his imprisonment, followed by his early death.
[[Oscar Wilde|http://en.wikipedia.org/wiki/Oscar_Wilde]]
<<list-links "[tag{!!title}]">>
[What I've discovered as a result of meditating (and teaching :) is that] Our attention (and mind) is like a marble atop a piece of wet soap; if you are not mindful and vigilant, it slips.
This is also called by meditators [["puppy mind"|http://mindfulnessforstudents.co.uk/resources/puppy-mind/]]:
>your mind will wander away from the focus on the breath to thoughts, planning, daydreams, worry, and just like a puppy it will keep wandering off to explore.
Our brains govern a process that over time creates an autobiography^^1^^. Our tales are spun, but for the most part we don't spin them. They spin us.
: -- From the book (and the [[accompanying video interviews|https://www.youtube.com/playlist?list=PLzLGaX_JvmJoIGJFR_1M088pMz68qUtnc]] [[A Glorious Accident|https://en.wikipedia.org/wiki/A_Glorious_Accident]]) by Wim Kayzer.
----
^^1^^ [[Jeanette Winterson]]'s take on it (in her book //Art and Lies//):
> There's no such thing as autobiography, there's only art and lies.
Our brains have just one scale, and we resize our experiences to fit.
: -- in [[xkcd|https://xkcd.com/]]
Our culture is the first in a couple generations that attempts to have funerals with no bodies. We just disappear them. If you read the death notices in the paper today, you’ll notice that most of them are going to involve some type of memorial event, sans body, sans corpse. Also, most likely, without the gloomy stuff that comes along with having a corpse in the room. But the way to deal with mortality is by dealing with the mortals. And you deal with death, the big notion, by dealing with the dead thing.
We’re very good when it comes to cats and dogs. We just don’t have a clue when it comes to our people. We have them disappeared without any rubric or witnesses or anything like that. And then we plan these ‘celebrations of life,’ the operative words du jour. These celebrations are notable for the fact that everybody’s welcome but the dead guy. This, to me, is offensive and I think perilous for our species. There is an intellectual—an artistic and moral—case that can be made for not only fruit and flowers in a bowl on a table, but also a dead body in a box.
Our growth depends not on how many experiences we devour, but on how many we digest.
Our heads are round so our thoughts can change direction.
compare to [[For a very good reason, we humans were given two ears but only one mouth.]]
Our highest human calling is to help repair the part of the world that we can see and touch.
: -- from a conversation [[Krista Tippett]] had with [[Rachel Naomi Remen]] about [["The Difference Between Curing and Healing"|https://onbeing.org/programs/rachel-naomi-remen-the-difference-between-fixing-and-healing-nov2018/]].
[generosity]
We are rag dolls made out of many ages and skins, changelings who have slept in wood nests or hissed in the uncouth guise of waddling amphibians. We have played such roles for infinitely longer ages than we have been men. Our identity is a dream. We are process, not reality, for reality is an illusion of the daylight — the light of our particular day.
Our sense of time involves our ability to separate cause and effect, means and end.
Seeing the difference between now and not now, we can make the connection. And there morality enters in. Responsibility.
To say that a good end will follow from a bad means is just like saying that if I pull a rope on this pulley it will lift the weight on that one.
To break a promise is to deny the reality of the past; therefore it is to deny the hope of a real future.
If time and reason are functions of each other, if we are creatures of time, then we had better know it, and try to make the best of it. To act responsibly.
```
MAKING AN EFFORT
Our so-called limitations, I believe,
apply to faculties we don't apply.
We don't discover what we can't achieve
until we make an effort not to try.
```
We refer to them as our unlived lives because somewhere we believe that they were open to us; but for some reason — and we might spend a great deal of our lived lives trying to find and give the reason — they were not possible. And what was not possible all too easily becomes the story of our lives. Indeed, ''our lived lives might become a protracted mourning for, or an endless tantrum about, the lives we were unable to live. But the exemptions we suffer, whether forced or chosen, make us who we are.''
: -- from his book [[Missing Out|https://www.brainpickings.org/2015/08/17/missing-out-adam-phillips/]].
(Warning/responding (?) to [[Robert Frost]]'s poem [[The Road Not Taken]]).
[FOMO - Fear Of Missing Out]
Our very nature is such as to prevent us from fully understanding its very nature. Poised midway between the unvisualizable cosmic vastness of curved spacetime and the dubious, shadowy flickerings of charged quanta, we human beings, more like rainbows and mirages than like raindrops or boulders, are unpredictable self-writing poems - vague, metaphorical, ambiguous, and sometimes exceedingly beautiful.
:— from his book //I Am A Strange Loop//
Out beyond ideas of rightdoing and wrongdoing, there is a field. I will meet you there.
<<list-links "[tag{!!title}]">>
a professor at Johns Hopkins University; published //Choosing Civility: The Twenty-Five Rules of Considerate Conduct//.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Parenting and education reform are about sustained effort over long periods of time. You get there by keeping being there.
<<list-links "[tag{!!title}]">>
```
גם זה של בני אדם or גם זה לבני אדם
This is also human
This is fit for human consumption
This is part of being human
This part of the human sphere
This is also (humanly) thinkable (and/or tolerable)
```
Part of the work of being a modern person seems to be dreaming of alternate lives in which you don't have to dream of alternate lives. We long to stop longing...
: -- from [[his|Joshua Rothman]] article in The New Yorker titled [[In Another Life|https://www.newyorker.com/magazine/2020/12/21/what-if-you-could-do-it-all-over]]
Passion, like discriminating taste, grows on its use. You more likely act yourself into feeling than feel yourself into action.
Patience – A minor form of despair, disguised as a virtue.
:― [[Ambrose Bierce]], The Unabridged Devil's Dictionary
<<list-links "[tag{!!title}]">>
(1923-1976), author of the popular "Forgiveness" quote, was a businessman and lifelong resident of Kansas. Born 2-21-23 as Paul Lewis Boese in Halstead, KS.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Author of the book "Karma and Chaos" by Vipassana Research Publications.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
http://www.paulgraham.com/
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Pedantry and mastery are opposite attitudes toward rules. To apply a rule to the letter, rigidly, unquestioningly, in cases where it fits and in cases where it does not fit, is pedantry. … To apply a rule with natural ease, with judgment, noticing the cases where it fits, and without ever letting the words of the rule obscure the purpose of the action or the opportunities of the situation, is mastery.
: -- from [[his|George Polya]] book "//How to Solve It//"
(see a [[similar kind of Eastern Wisdom|Going in the right direction]]).
People are like stained-glass windows. They sparkle and shine when the sun is out, but when the darkness sets in, their true beauty is revealed only if there is a light from within.
People can probably only understand the worth of doing something if it has a purpose. My present attitude is that the purpose of having a purpose is so that we can have a fulfilling journey.
:-- from his book [[Things a Computer Scientist Rarely Talks About|https://en.wikipedia.org/wiki/Things_a_Computer_Scientist_Rarely_Talks_About]] (and the [[recorded lecture notes given at MIT|https://player.fm/series/donald-knuth-lectures-on-things-a-computer-scientist-rarely-talks-about]])
People confuse programming with coding. Coding is to programming what typing is to writing. Writing is something that involves mental effort. You're thinking about what you're going to say. The words have some importance but in some sense, even they are secondary to the ideas (you are trying to express).
In the same way, programs are built on ideas. They have to do something, and what they're supposed to do is like what writing is supposed to convey.
If people are trying to learn programming by being taught to code, it's like they are being taught writing by being taught how to type. And that doesn't make much sense.
The requirements process is the part of [software] development in which people attempt to discover what is desired.
To understand this process, you need to focus on and understand five critical words: desire, product, people, attempt, and discover.
First, consider the word "desire." Some people would prefer that we say "attempt to discover what is needed," but we don't know how to figure out what people need, as opposed to what they desire.
Besides, people don't always buy what they need, but they always desire what they buy, even if the desire is only transitory. We do observe, however, that by clarifying their desires, people sometimes clarify what they really need and don't need.
[human nature]
People live through such pain only once. Pain comes again—but it finds a tougher surface.
: ― from [[her|Willa Cather]] book //The Song of the Lark//
I like it better, as it rings more true than "what doesn't kill you makes you stronger".
People sometimes ask me what is the Buddhist view of this or that. But there is no Buddhist view of this or that. The Buddhist view is a nonview, but not a nonview that is the opposite of a view, a wishy-washy noncommittalism. Nonview includes various views that arise in response to conditions. Nonview is an attitude, a spirit of openness, kindness, and flexibility with regard to language. Nonview is a way to stand within language, to make use of language so as to connect, without being caught by and separated from the world and others by language.
Or as someone had said: when the situation changes, I change my mind. Don't you?
: -- from [[his|Norman Fischer]] book "//When You Greet Me I Bow//"
[perspective] [flexibility] [adaptability]
… as soon as we have used an opportunity and have actualized a potential meaning, we have done so once and for all. We have rescued it into the past wherein it has been safely delivered and deposited. In the past, nothing is irretrievably lost, but rather, on the contrary, everything is irrevocably stored and treasured. To be sure, ''people tend to see only the stubble fields of transitoriness but overlook and forget the full granaries of the past into which they have brought the harvest of their lives: the deeds done, the loves loved, and last but not least, the sufferings they have gone through with courage and dignity.''
From this one may see that there is no reason to pity old people. Instead, young people should envy them. It is true that the old have no opportunities, no possibilities in the future. But they have more than that. Instead of possibilities in the future, they have realities in the past—the potentialities they have actualized, the meanings they have fulfilled, the values they have realized—and nothing and nobody can ever remove these assets from the past.
: -- from his lecture [["Tragic Optimism"|https://reasonandmeaning.com/2017/03/03/summary-of-victor-frankls-tragic-optimism/]].
People who couldn’t imagine themselves capable of evil were at a major disadvantage in dealing with people who didn’t need to imagine, because they already were.
: ― in //The Peripheral//
<<list-links "[tag{!!title}]">>
''Perfect''
"""
Today I managed something
that I’ve never done before.
I turned in this week’s spelling quiz
and got a perfect score.
Although my score was perfect,
it appears I’m not too bright.
I got a perfect zero—
not a single answer right.
"""
(Compare to [[another form of "perfection"|An excellent app/program works flawlessly (as opposed to flaws worklessly).]])
from David Whyte's poem [[The New Nobility|https://www.facebook.com/PoetDavidWhyte/posts/370319849660691]]
THE NEW NOBILITY
(excerpt)
```
Perfection is a fragile, ice-thin ground
that barely holds our human weight,
one false step and everything cracks
back to the edge.
```
:-- David Whyte
from River Flow: New & Selected Poems
compare to [[The plane of life is a frozen sea, on which all make many slips, and finally break through into eternity.]]
Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.
Perfection is like chasing the horizon. Keep moving.
Just as there are odors that dogs^^1^^ can smell and we cannot, as well as sounds that dogs can hear and we cannot, so too there are wavelengths of light we cannot see^^2^^ and flavors we cannot taste. Why then, given our brains wired the way they are, does the remark "Perhaps there are thoughts we cannot think," surprise you? Evolution, so far, may possibly have blocked us from being able to think in some directions; there could be unthinkable thoughts.
:-- from [[Richard Hamming]]'s article [ext["The Unreasonable Effectiveness of Mathematics"|resources/Hamming.html]]
"""
"""
Or as [[Marcelo Gleiser]] had said in an interview titled [["The More We Know, the More Mystery There Is"|https://blogs.scientificamerican.com/cross-check/the-more-we-know-the-more-mystery-there-is/]] with [[John Horgan]]:
> To understand how we know is essential to understand how much we can know.
(compare to [[David Deutsch]]'s take: [[As a logical possibility, of course, it's always possible that there are incomprehensible things in the universe. But I have argued that taking that seriously is exactly the same as a belief in the supernatural ...]])
(Compare to Thomas Nagel's [[Certainly it is possible for a human being to believe that there are facts which humans never will possess the requisite concepts to represent or comprehend.]]).
(Also compare to Thomas Nagel's [[There are facts that do not consist in the truth of propositions expressible in a human language. We can be compelled to recognize the existence of such facts without being able to state or comprehend them.]]).
(and also compare to [[Jose Saramago]]'s observation:
> We never consider that the things dogs know about us are things of which we have not the faintest notion.
(see also [[Nan Shepherd]]'s take on [[human limitations|There must be many exciting properties of matter that we cannot know because we have no way to know them.]]).
(see also [[Joy Williams]]'s take on [[the limitations of our senses|Kant said our senses were like the nightclub doorkeeper who only let people in who were sensibly dressed, and the criteria for being properly dressed or respectably dressed, whatever, was that things had to be covered up in space and time.]]).
----
^^1^^ compare to [[John Updike]]'s take (and comparison with dogs) on [[the permanent mystery of existence|The mystery of being is a permanent mystery, at least given the present state of the human brain.]]
^^2^^ see (ha, ha :) [[Four-dimansional vision vs. Flatlandish color perception]].
<<list-links "[tag{!!title}]">>
Pessimism is stupid. When you are a pessimist and the bad thing happens, you live it twice. Once when you worry about it, and the second time when it happens.
author of the book //Code Craft// - The practice of writing excellent code.
<<list-links "[tag{!!title}]">>
American folk singer and activist, born 1919.
<<list-links "[tag{!!title}]">>
An English satirist and comedic actor.
<<list-links "[tag{!!title}]">>
an American editor and novelist known for his satiric wit.
<<list-links "[tag{!!title}]">>
Also (compare to [[Yogi Berra]]'s (not always content-free) proclamations):
* Nostalgia ain't what it used to be.
* deep down, he's shallow.
* I love being a writer. What I can't stand is the paperwork.
<<list-links "[tag{!!title}]">>
http://www.philosopher.eu/
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
writer of Science Fiction.
<<list-links "[tag{!!title}]">>
[[Philo of Alexandria|http://en.wikipedia.org/wiki/Philo_of_Alexandria]]
<<list-links "[tag{!!title}]">>
Because philosophy arises from awe, a philosopher is bound in his way to be a lover of myths and poetic fables. Poets and philosophers are alike in being big with wonder.
: ― [[Thomas Aquinas]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Physics is mathematical not because we know so much about the physical world, but because we know so little; it is only its mathematical properties that we can discover.
(compare to [[Brian Martin]]'s take on [[the "solidity" of mathematics|Mathematical concepts, such as the number system, can be understood as chosen for their usefulness rather than their inherent correspondence with the nature of the universe. Mathematics can be considered a system of logic, but given that there are many possible logical systems, the choice of a particular system can be linked to its usefulness for human purposes.]]).
Physics, my friend, is a narrow path drawn across a gulf that the human imagination cannot grasp. It is a set of answers to certain questions that we put to the world, and the world supplies the answers on the condition that we will not then ask it other questions, questions shouted out by common sense.
And common sense? It is that which is understood by an intelligence using senses no different from those of a baboon. Such an intelligence wishes to know the world in terms that apply to its terrestrial, biological niche. But the world—outside that niche, that incubator of sapient apes—has properties that one cannot take in hand, see, sniff, gnaw, listen to, and in this way appropriate.^^1^^
: ― From [[his|Stanislaw Lem]] book "//Fiasco//"
----
^^1^^ or as [[Arthur Eddington]] put it: [[Not only is the universe stranger than we imagine, it is stranger than we can imagine.]]
Whenever somebody says “Pi r squared”, you should respond saying: “No. Pie are round. Cornbread are squared.”
from [[Ken Perlin's blog|http://blog.kenperlin.com/?p=2834]] and his joke about his mother.
<<list-links "[tag{!!title}]">>
His [[design website|http://www.piethein.com/page/piet-hein-16/]]
Multiple poems he wrote: https://mypoeticside.com/poets/piet-hein-poems
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
```
Play is one of our highest forms of adaptation.
Consider every major effort it takes to be human.
The need for food gave birth to Haute Cuisine
The need for shelter gave rise to architecture
The need for cover, gave us fashion
And for being subjected to the clock, we invented music.
```
:: -- BJ Miller in a TED talk about //What really matters at the end of life// (2015)
Golf's ultimate moral instruction directs us to find within ourselves a pivotal center of enjoyment: relax into a rhythm that fits the hills and swales, and play the shot at hand - not the last one, or the next one, but the one at your feet, in the poison ivy, where you put it.
And also:
[[John Updike]] acknowledges that golf provides a "Moral Exercise" for us all: "The world conspires to flatter us; only golf trusts us with a cruelly honest report on our performance. . . . (T)he ball cannot be browbeat out of the place in the poison ivy where we placed it, or euphemized up from the water into which it just so sickeningly plonked. . . . Golf is a square shooter. In the sound of the hit and the flight of the ball it tells us unflinchingly how we are doing, and we are rarely doing well."
[being a good sport]
As [[Wislawa Szymborska]] [[wrote|Poem - Possibilities - by Wislawa Szymborska]]:
> I prefer the absurdity of writing poems to the absurdity of not writing poems.
What is a poem? What can a poem be?
> I want a poem I can grow old in. I want a poem I can die in.
: -- [[Eavan Boland|https://en.wikipedia.org/wiki/Eavan_Boland]]
On which [[Shawna Lemay]] comments:
> That a poem could hold the weight of a life, that it could sustain us through a life, that we can grow in its presence, measure ourselves against it, and that we could find it again at the end of our life – I find this to be inspiring rather than morbid. And it’s asking a lot of a poem. As we should. Because, the poem is us. The poem is larger than us.
: -- from [[her|Shawna Lemay]] blog post [[What Can a Poem Be?|http://transactionswithbeauty.com/home/zwbwe26ng26p5kpntgmjj3g433acrf]]
<<list-links "[tag{!!title}]">>
([[My|Haggai Mark]] attempt at possible titles:
- Looking for the way out of busyness
- Balancing
- Perspectiv-ing (with Death on ones shoulder)
)
"""
Lists of things to do I plow through
And do do
But in the doing each one in his wake
Makes three or four more can’t seem to shake
Off my shoulder so I do those too
And then there seem to be still more to do
But at least I can make check marks
And tell my brain to stop, stop sharp
As on a dime right there where it lays
In a heap so cleverly and evenly flayed
Out on the whim of each breath
Unlikely it seems or at least as unlikely as death
That peeps up just over my shoulder
(The other one, the shoulder
That doesn’t have the dust of lists
Sprinkled all over it in twists
And turns of spray
Of dense doing made
Out of airy nothing anyway
But seeming at the moment to have so much say
Over mind’s intentions)
So it’s stuff on one side, suspension
Of all stuff on the other
And nothing I can do but seek another
Venue for my heart
I don’t know where to start
Looking for it--
Canada?
"""
: -- from [[his website|https://www.normanfischer.org/poems-all/a-sampler-of-poems]]
From her [[poem Possibilities, as printed and read at BrainPickings|https://www.brainpickings.org/2015/03/18/amanda-palmer-wislawa-szymborska-possibilities-poem-reading/]]:
(Translated by Stanislaw Baranczak and Clare Cavanagh)
```
I prefer movies.
I prefer cats.
I prefer the oaks along the Warta.
I prefer Dickens to Dostoyevsky.
I prefer myself liking people
to myself loving mankind.
I prefer keeping a needle and thread on hand, just in case.
I prefer the color green.
I prefer not to maintain
that reason is to blame for everything.
I prefer exceptions.
I prefer to leave early.
I prefer talking to doctors about something else.
I prefer the old fine-lined illustrations.
I prefer the absurdity of writing poems
to the absurdity of not writing poems.
I prefer, where love’s concerned, nonspecific anniversaries
that can be celebrated every day.
I prefer moralists
who promise me nothing.
I prefer cunning kindness to the over-trustful kind.
I prefer the earth in civvies.
I prefer conquered to conquering countries.
I prefer having some reservations.
I prefer the hell of chaos to the hell of order.
I prefer Grimms’ fairy tales to the newspapers’ front pages.
I prefer leaves without flowers to flowers without leaves.
I prefer dogs with uncropped tails.
I prefer light eyes, since mine are dark.
I prefer desk drawers.
I prefer many things that I haven’t mentioned here
to many things I’ve also left unsaid.
I prefer zeroes on the loose
to those lined up behind a cipher.
I prefer the time of insects to the time of stars.
I prefer to knock on wood.
I prefer not to ask how much longer and when.
I prefer keeping in mind even the possibility
that existence has its own reason for being.
```
This is in interesting contrast to the poem [[All I Want - poem by Julia Wiener]].
This reminds me of [[Today was a good day]] from the book "Southern Lady Code" by Helen Ellis.
The poem was actually titled in Latin:
Vitae Summa Brevis Spem Nos Vetat Incohare Longam
(the brief (brevis) sum (summa) of life (vitae) forbids/prevents (vetat) us (nos) beginning (incohare) a long (longam) hope (spem).
or essentially:
The Shortness of Life Prevents Us from Undertaking Long Hopes
"""
They are not long, the weeping and the laughter,
Love and desire and hate:
I think they have no portion in us after
We pass the gate.
They are not long, the days of wine and roses:
Out of a misty dream
Our path emerges for a while, then closes
Within a dream.
"""
An interesting [[hokku (or haiku)|https://en.wikipedia.org/wiki/Hokku]] [[blogpost|https://hokku.wordpress.com/2013/02/05/they-are-not-long-the-days-of-wine-and-roses-the-brief-life-of-ernest-dowson/]] compares it with a story about
an advisor to [[King Edwin of Northumberland|https://en.wikipedia.org/wiki/Edwin_of_Northumbria]]:
“Your Majesty, when we compare the present life of man on earth with that time of which we have no knowledge, it seems to me like the swift flight of a single sparrow through the banqueting-hall where you are sitting at dinner on a winter’s day with your thains and counsellors. In the midst there is a comforting fire to warm the hall; outside the storms of winter rain or snow are raging. This sparrow flies swiftly in through one door of the hall, and out through another. While he is inside, he is safe from the winter storms; but after a moment of comfort, he vanishes from sight into the wintry world from which he came. Even so, man appears on earth for a little while; but of what went before this life or of what follows, we know nothing.”
הלילה הוא שירים
תרצה אתר (Tirtsa Atar - the daughter of Natan Alterman)
"""
חכו נא עוד רגע, חכו נא בשקט,
חכו בזהירות, המסך יורד,
הלילה איננו רק חושך על דרך,
לפעמים הוא שירים וניגון והד.
כן, לפעמים הלילה הוא שירים רבים.
לפעמים, כן, לפעמים,
הלילה מנגן ומכה בתופים
לפעמים, לפעמים
לפעמים, הוא עד כדי כך תמים.
חכו נא עוד הרף, עיצמו העיניים
חכו עוד שנייה - זאת ולא יותר,
הלילה אינו רק חלום ושמיים
לפעמים הוא תפילה למחר אחר.
כן, לפעמים, הלילה הוא תפילות רבות
לפעמים, כן, לפעמים,
הלילה מתפלל, ועיניו עצומות
לפעמים, כן לפעמים
לפעמים, הוא עד כדי כך תמים.
חכו נא עוד רגע, היא כבר מסיימת,
רק רגע וסוף - האורות כבים,
הלילה איננו רק ארץ רודמת,
לפעמים הוא, פשוט, קצת שירים יפים.
כן, לפעמים, הלילה הוא שירים יפים
לפעמים, כן, לפעמים,
הלילה הוא ניגון וחדוות נעורים
לפעמים, כן לפעמים
לפעמים, הוא עד כדי כך תמים.
הלילה מנגן ומכה בתופים
לפעמים, כן, לפעמים,
כן לפעמים, הוא עד כדי כך תמים.
"""
[[Richard Feynman]] included a poem in his address to the National Academy of Sciences:
"""
There are the rushing waves
mountains of molecules
each stupidly minding its own business
trillions apart
yet forming white surf in unison
Ages on ages
before any eyes could see
year after year
thunderously pounding the shore as now.
For whom, for what?
On a dead planet
with no life to entertain.
Never at rest
tortured by energy
wasted prodigiously by the Sun
poured into space.
A mite makes the sea roar.
Deep in the sea
all molecules repeat
the patterns of one another
till complex new ones are formed.
They make others like themselves
and a new dance starts.
Growing in size and complexity
living things
masses of atoms
DNA, protein
dancing a pattern ever more intricate.
Out of the cradle
onto dry land
here it is
standing:
atoms with consciousness;
matter with curiosity.
Stands at the sea,
wonders at wondering: I
a universe of atoms
an atom in the Universe.
"""
Because philosophy arises from awe, a philosopher is bound in his way to be a lover of myths and poetic fables. Poets and philosophers are alike in being big with wonder.
: -- [[Thomas Aquinas]]
<<list-links "[tag{!!title}]">>
>A poem begins as a lump in the throat, a sense of wrong, a homesickness, a lovesickness. It is never a thought to begin with.
: -- [[Robert Frost]]
Samuel Taylor Coleridge's “homely definition” of poetry:
> the right words in the right order.
"""
"""
<<list-links "[tag{!!title}]">>
Carl Sandburg’s lovely aphorism: ‘Poetry is a diary kept by a sea creature who lives on land and wishes he could fly.’
To which [[Wislawa Szymborska]] added (in [[a writing advice column in a Polish newspaper|https://www.poetryfoundation.org/articles/68657/how-to-and-how-not-to-write-poetry-56d2484397277]] ): Maybe he’ll actually make it one of these days?
Poetry is the attempt to understand fully what is real, what is present, what is imaginable, what is feelable, and how you can loosen the grip of what you already know, to find some new, changed relationship, to find something you didn’t know until the poem was written and finished? And then you know something new, and you have been changed.
: -- from the podcast "What a Poetic Mind Can Teach Us About How to Live" (a conversation between the poet [[Jane Hirshfield]] and [[Ezra Klein]])
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
A scheming Duchess trying to convince her husband, the kingdom-usurping Duke to murder the reigning King and take over the kingdom:
Duchess: "Take the dagger now, take the kingdom tomorrow. Have a stab at it, man."
Duke: “I have it, wife,” he said. “Is this a dagger I see before me?”
Duchess: “Of course it’s a bloody dagger. Come on, do it now. The weak deserve no mercy. We’ll say he fell down the stairs.”
Duke: “But people will suspect!”
Duchess: “Are there no dungeons? Are there no pilliwinks [an old instrument of torture for the thumbs and fingers]? Possession is nine parts^^1^^ of the law, husband, when what you possess is a knife.”
Duke: “I cannot! He has been kindness itself to me!”
Duchess: “And you can be Death itself to him…”
"""
"""
(and greed and power-hunger prevails at the end ... :(
( but not for long without [[revenge|She was often angry. She considered it one of her strong points. Genuine anger was one of the world’s great creative forces. But you had to learn how to control it.]])
"""
"""
: -- from his book //Wyrd Sisters//.
"""
"""
----
^^1^^ - nine parts of ten? Somewhere else in the book Pratchett uses a different "unit of measure" when Granny^^2^^ asks:
>"What do you call them things, there’s always a hundred of them in anything?"
> (answer: percent :)
^^2^^ - “Mistress (Granny) Weatherwax was sort of the 'head witch', even though officially,
“Witches are all equal. [They] don’t have things like head witches. That’s quite against the spirit of witchcraft.”
<<list-links "[tag{!!title}]">>
Prayer must never be answered: if it is, it ceases to be prayer and becomes correspondence.
Compare to [[what Soren Kierkegaard had to say on prayer|The function of prayer is not to influence God, but rather to change the nature of the one who prays.]]. Are they both right?
Compare with [[If you talk to God, it's called prayer; if God has the courtesy to reply, it's called schizophrenia.]]
[Sometimes (often?)] Precision and correctness are like opposing forces. It’s easy to satisfy one if you ignore the other. The converse of vaporous academic writing is the bold, but false, rhetoric of demagogues.
Predictions are uttered by prophets (free of charge); by clairvoyants (who usually charge a fee, and are therefore more honored in their day than prophets); and by futurologists (salaried). Prediction is the business of prophets, clairvoyants, and futurologists. It is not the business of novelists. A novelist’s business is lying^^1^^.
: -- from her introduction to her book [[The Left Hand of Darkness|https://en.wikipedia.org/wiki/The_Left_Hand_of_Darkness]]
----
^^1^^ or as [[Katherine Anne Porter]] had said: I shall try to tell the truth, but the result will be fiction.
[lie]
Premonitions are impossible, and the come true all the time.
: -- from [[his|Sam Knight]] book "//The Premonition Bureau: A True Account of Death Foretold//"
Ours is a culture that measures our worth as human beings by our efficiency, our earnings, our ability to perform this or that. The cult of productivity has its place, but worshiping at its altar daily robs us of the very capacity for joy and wonder that makes life worth living — for, as [[Annie Dillard]] memorably put it, “[[How we spend our days is, of course, how we spend our lives.]]”
and:
being productive is the surest way to lull ourselves into a trance of passivity and busyness the greatest distraction from living, as we coast through our lives day after day, showing up for our obligations but being absent from our selves, mistaking the doing for the being.
<<list-links "[tag{!!title}]">>
Problems worthy of attack prove their worth by fighting back.
Processes are not ‘things’ changing, but ‘things’ are movements abstracted.
We often think that a process must involve at the base level ‘things’ changing (such as water molecules in wave processes), but this is not necessary. Even the molecules are processes. Electromagnetism is an example of the fundamental basis of flux.
: -- from his [[Introductory Notes|http://www.philosopher.eu/texts/1248-2/]] on [[Alfred North Whitehead]]'s [[Process Philosophy|https://www.iep.utm.edu/processp/]].
[img[A Round Tuit|resources/A Round Tuit.jpg]]
Program testing can be used to show the presence of bugs, but never to show their absence!
<<list-links "[tag{!!title}]">>
Show me your code and conceal your data structures, and I shall continue to be mystified. Show me your data structures, and I won't usually need your code; it'll be obvious."
and
"Smart data structures and dumb code works a lot better than the other way around."
Programming is the purest form of poetry. Poetry is the art of deriving maximum power and meaning from words. That’s what a beautiful program does.
(see what [[Jeanette Winterson]] had to [[say about poetry|A tough life needs a tough language – and that is what poetry is. That is what literature offers – a language powerful enough to say how it is. It isn’t a hiding place. It is a finding place.]]).
In fewer words, programming is the use of a notation to express the future behavior of a computer.
from http://www.gdargaud.net/Humor/QuotesProgramming.html
* "Typing is no substitute for thinking." — Dartmouth Basic manual, 1964.
* "I have yet to meet a C compiler that is more friendly and easier to use than eating soup with a knife." - anonymous
* "In My Egotistical Opinion, most people's C programs should be indented six feet downward and covered with dirt." — Blair P. Houghton.
* "Any C programmer here?" "Yeah I got a C in programming class. Does that count?" - anonymous
* "If Python is executable pseudocode, then perl is executable line noise." - anonymous
* "The C Programming Language — A language which combines the flexibility of assembly language with the power of assembly language." - anonymous
* "On two occasions I have been asked [by members of Parliament!]: 'Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out ?' I am not able rightly to apprehend the kind of confusion of ideas that could provoke such a question." — Charles Babbage.
* "At the source of every error which is blamed on the computer you will find at least two human errors, including the error of blaming it on the computer." - anonymous
* "The best thing about a boolean is even if you are wrong, you are only off by a bit." - anonymous (on logic)
* "Beware of bugs in the above code; I have only proved it correct, not tried it." — Donald E. Knuth.
* "The only problem with troubleshooting is that sometimes trouble shoots back." - anonymous (on debugging)
* Why bother with subroutines or functions when you can type fast? - Vaughn Rokosz (on abstraction and function use/decomposition)
* Real Programmers always confuse Christmas and Halloween because Oct31 == Dec25 - Andrew Rutherford
* Don't get suckered in by the comments … they can be terribly misleading - Dave Storer (on documentation and commenting)
* The last bug isn't fixed until the last user is dead. - Sidney Markowitz, 1995
[programming advice] [programming technique]
''PROGRAMS AS WEBS''
I think that a complex piece of software is, indeed, best regarded as a web that has been delicately pieced together from simple materials. We understand a complicated system by understanding its simple parts, and by understanding the simple relations between those parts and their immediate neighbors. If we express a program as a web of ideas, we can emphasize its structural properties in a natural and satisfying way.
When I first began to work with the ideas that eventually became the WEB system, I thought that I would be designing a language for “top-down” programming, where a top-level description is given first and successively refined. On the other hand I knew that I often created major parts of programs in a “bottom-up” fashion, starting with the definitions of basic procedures and data structures and gradually building more and more powerful subroutines. I had the feeling that top-down and bottom-up were opposing methodologies: one more suitable for program exposition and the other more suitable for program creation.
But after gaining experience with WEB, I have come to realize that there is no need to choose once and for all between top-down and bottom-up, because a program is best thought of as a web instead of a tree. A hierarchical structure is present, but the most important thing about a program is its structural relationships. A complex piece of software consists of simple parts and simple relations between those parts; the programmer’s task is to state those parts and those relationships, in whatever order is best for human comprehension— not in some rigidly determined order like top-down or bottom-up.
Top-down programming gives you a strong idea of where you are going, but it forces you to keep a lot of plans in your head; suspense builds up because nothing is really nailed down until the end. Bottom-up programming has the advantage that you continually wield a more and more powerful pencil, as more and more subroutines have been constructed; but it forces you to postpone the overall program organization until the last minute, so you might flounder aimlessly.
: — Donald Knuth (AKA [["The Yoda of Silicon Valley"|https://www.nytimes.com/2018/12/17/science/donald-knuth-computers-algorithms-programming.html]]) (in his article [["Literate Programming"|http://www.literateprogramming.com/knuthweb.pdf]])
(see also [[On Bricolage in programming]])
From Alan Burdick's book //Why Time Flies: A Mostly Scientific Investigation//:
>For argument’s sake, I’ll accept that perhaps the universe did not exist before the Big Bang — but it exploded in something, right? What was that? What was there before the beginning? ''Proposing such questions, the astrophysicist Stephen Hawking has said, is like standing at the South Pole and asking which way is south: “Earlier times simply would not be defined.''”
and he adds:
>Perhaps Hawking is trying to be reassuring. What he seems to mean is that human language has a limit. We (or at least the rest of us) reach this boundary whenever we ponder the cosmic. We imagine by analogy and metaphor: that strange and vast thing is like this smaller, more familiar thing. The universe is a cathedral, a clockworks, an egg. But the parallels ultimately diverge; only an egg is an egg.
----
Another "problematic" (in the sense of misguided) question is [[Raymond Smullyan]]'s example of an Aristotle-era-like question:
> what holds the Earth up so that it does not plunge downward as other unsupported objects do.
Prove the Cat Theorem, which states that A cat has nine tails.
Proof:
"""
No cat has eight tails.
A cat has one tail more than no cat.
Therefore, a cat has nine tails.
"""
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Pulling together is the aim of despotism and tyranny. Free men pull in all kinds of directions. It’s the only way to make progress. That, and, of course, moving with the times.
: -- from his book [[The Truth|https://discworld.fandom.com/wiki/The_Truth]] (about the invention/discovery/evolution of journalism in [[Discworld|https://discworld.fandom.com/wiki/Discworld]]) -- [[Lord Vetinari|https://discworld.fandom.com/wiki/Havelock_Vetinari]], the Patrician/Ruler of Ankh-Morpork
Puns point to the essence of all true wit—the ability to hold in the mind two different ideas about the same thing at the same time.
: -- in his book [[Wit's End|https://www.wsj.com/articles/wits-end-review-youve-got-to-be-kidding-1541721044]]
<<comparequote "F. Scott Fitzgerald" "The test of a first-rate intelligence is the ability to hold two opposed ideas in the mind at the same time, and still retain the ability to function." "intelligence and ideas">>
A: permanent
(and not necessarily perfect!)
Nerdy programming joke:
Q: Why did the functions stop calling each other?
A: Because they had constant arguments.
This is [[my mother|Sylvia Mark]]'s version:
Quae ferrum non sanant, ignis sanat; quae ignis non sanat, tempo sanat
(what the iron (force, war) cannot cure, fire will cure; what fire cannot cure, time will cure)
I was not able to find this phrase anywhere, and the closest is the saying attributed to Hippocrates, related to medical treatment:
Quae medicamenta non sanant, ferrum sanat; quae ferrum non sanat, ignis sanat; quae vero ignis non sanat, insanabilia reputari oportet
(what medicine cannot cure, iron (scalpel, operation) will cure; what iron cannot cure, fire (heat, burning) will cure; that which fire cannot cure, must be determined to be incurable)
This is echoed in what [[James Gleick]] had said about time:
> Time is a killer. Everyone knows that. Time will bury us. I wasted time, and now doth time waste me. Time makes dust of all things. Time’s winged chariot isn’t taking us anywhere good.
>
> How aptly named, the time beyond death: the Hereafter.
Quality is the source of subjects and objects; subjects and objects are not the source of quality.
:: -- in an [[NPR Interview (1974)|https://www.npr.org/2017/11/13/4612364/zen-and-the-art-of-motorcycle-maintenance-author-robert-pirsig]] with [[Connie Goldman|http://www.congoldman.org/]]
Compare to [[Beauty is no quality in things themselves: It exists merely in the mind which contemplates them; and each mind perceives a different beauty.]]
"""
In the worst hour of the worst season
of the worst year of a whole people
a man set out from the workhouse with his wife.
He was walking – they were both walking – north.
She was sick with famine fever and could not keep up.
He lifted her and put her on his back.
He walked like that west and west and north.
Until at nightfall under freezing stars they arrived.
In the morning they were both found dead.
Of cold. Of hunger. Of the toxins of a whole history.
But her feet were held against his breastbone.
The last heat of his flesh was his last gift to her.
Let no love poem ever come to this threshold.
There is no place here for the inexact
praise of the easy graces and sensuality of the body.
There is only time for this merciless inventory:
Their death together in the winter of 1847.
Also what they suffered. How they lived.
And what there is between a man and woman.
And in which darkness it can best be proved.
"""
<<list-links "[tag{!!title}]">>
"""
Body my house
my horse my hound
what will I do
when you are fallen
Where will I sleep
How will I ride
What will I hunt
Where can I go
without my mount
all eager and quick
How will I know
in thicket ahead
is danger or treasure
when Body my good
bright dog is dead
How will it be
to lie in the sky
without roof or door
and wind for an eye
With cloud for shift
how will I hide?
"""
Questions are a mighty form of words.
:-- from a [[conversation between Krista Tippett and David Whyte On Becoming Wise|https://www.youtube.com/watch?v=Nup6deehcck]] (1:40 hrs.)
(compare to what [[Stanislaus Lec]] [[had to say about ideas|In a war of ideas it is people who get killed.]]).
Or, as [[she writes|https://www.brainpickings.org/2015/01/09/krista-tippett-einsteins-god-janna-levin/]] in her book //Einstein's God//:
> How we ask our questions affects the answers we arrive at. Light appears as a wave if you ask it “a wavelike question” and it appears as a particle if you ask it “a particle-like question.” This is a template for understanding how contradictory explanations of reality can simultaneously be true.
(see also [[her|Krista Tippett]] insight into [[the power of questions|A question is a powerful thing, a mighty use of words. Questions elicit answers in their likeness. Answers mirror the questions they rise, or fall, to meet.]]).
Questions elicit answers in their likeness. Answers rise or fall to the questions they meet.
And in the negative expression of that, which we're very familiar with from media, it's almost impossible to meet a simplistic question with anything but a simplistic answer.
It's almost impossible to transcend a combative question. But the positive side of that is that it's almost impossible to resist a generous question.
And we've all had that experience that there is something life-giving about asking a better question.
<<list-links "[tag[author]]">>
<<list-links "[tag[category]]">>
Collections of multiple quotes
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
https://en.wikiquote.org/wiki/Nachman_of_Breslov
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Known simply as “Ms. Math” to children across the country, Rachel McAnallen has devoted her life to sharing the joy and beauty of mathematics with learners of all ages. A professional educator for over half a century, Rachel travels the world teaching her subject at every grade level.
- http://www.zoidandcompany.com/About_Rachel.html
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
"""
American essayist, lecturer, and poet, who led the Transcendentalist movement of the mid-19th century.
Born: May 25, 1803, Boston
Died: April 27, 1882, Concord.
"""
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
The creator of [[xkcd|https://xkcd.com/]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Rather than aiming for a room with a view, why not aim for a view with some room?
:-- inspired by [[his|Loch Kelly]] [[video titled "Awakening: A View with Some Room"|https://lochkelly.org/videos/]].
(compare to [[Alan Kay]]'s: [[A good point of view is worth many IQ points.]])
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
American musician, singer, producer, film director, and author, best known as a member of The Doors from 1965 to 1973, which he co-founded with singer and lyricist Jim Morrison.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Reader, I think proper, before we proceed any farther together, to acquaint thee that I intend to digress, through this whole history, as often as I see occasion, of which I am myself a better judge than any pitiful critic.
: -- from his book //The History of Tom Jones// (1749)
(a way to justify the (over?)use of parentheses? :)
<<list-links "[tag{!!title}]">>
Reading can teach you the best of what others already know.
Reflection can teach you the best of what only you can know.
(so, make time for both!)
: -- from [[his|James Clear]] post [["3-2-1: On Selective Ignorance"|https://jamesclear.com/3-2-1/october-29-2020]]
Reading computer manuals without the hardware is as frustrating as reading sex manuals without the software.
Real seriousness in regard to writing is one of two absolute necessities. The other, unfortunately, is talent.
Real teaching is not about transferring "the material", as if knowledge were some sort of mass-produced commodity that ships from Amazon.
Real teaching is about conveying a way of thinking. How can a teacher convey a way of thinking when he doesn't genuinely think that way?
: -- from his essay [[Some Thoughts On Teaching|http://worrydream.com/#!/SomeThoughtsOnTeaching]]
Or as Paul Lockhart had written in [[A Mathematician's Lament|http://worrydream.com/refs/Lockhart-MathematiciansLament.pdf]]:
> Mathematics is an art, and art should be taught by working artists, or if not, at least by people who appreciate the art form and can recognize it when they see it.
Reality is that which, when you stop believing in it, doesn’t go away.
The nature of reality as Dick sees it is [[discussed more in BrainPickings|https://www.brainpickings.org/2013/09/06/how-to-build-a-universe-philip-k-dick/]], covering his //How to Build a Universe//.
[[Dick's full speech|http://deoxy.org/pkd_how2build.htm]]
"""
Reality is what we take to be true.
What we take to be true is what we believe.
What we believe is based upon our perceptions.
What we perceive depends on what we look for.
What we look for depends on what we think.
What we think depends on what we perceive.
What we perceive determines what we believe.
What we believe determines what we take to be true.
What we take to be true is our reality.
"""
Realize that now, in this moment of time, you are creating. You are creating your next moment based on what you are feeling and thinking. That is what’s real.
We can let go of the unconscious belief that being anxious about the past or the future will somehow protect us and instead reprogram our cells with new ways of responding.
Really new ideas are incomprehensible. The good news is that for some people, failure to comprehend is the beginning of understanding. For most, of course, it is the beginning of dismissal.
The spouse of [[Steven Pinker]] :)
<<list-links "[tag{!!title}]">>
Recipe for hope/optimism: ''Adversity'' (i.e., "a bad thing") is temporary, it is isolated to only a part of your life, and it can be overcome (or dealt with) by your effort.
The flip side optimism: ''Success'' (i.e., "a good thing") is abundant (or frequent), pervasive (throughout life), and empowering (powerful).
The flip-flip side (i.e., the recipe for hopelessness/pessimism): ''Success'' is temporary, it is isolated to only a part of your life, and it is a matter of luck (and not effort).
AND: ''Adversity'' is permanent, pervasive (throughout life), and draining (deflating).
From [[the book Learned Optimism by Martin Seligman|http://www.shearonforschools.com/learned_optimism.htm]] from the [[Positive Psychology Center|http://ppc.sas.upenn.edu|http://ppc.sas.upenn.edu/]]
Recursion is the root of computation
since it trades description for time.
Paraphrasing Robinson:
Redeeming Value is the striving and activities of a person, driven by the belief and the idea that the self is to be refined by exposure to things that are wonderful and difficult and imbued with what is sometimes call "the human spirit".
:: -- in the introduction to her book "The Death of Adam"
(see [[Ursula K. Le Guin]]'s experience and journey [[looking for Redeeming Value|On deep reading and looking for Redeeming Value]]).
Reductio ad absurdum and indirect proof are different but related procedures.
''Reductio ad absurdum'' shows the falsity of an assumption by deriving from it a manifest absurdity. “Reduction to an absurdity" is a mathematical procedure but it has some resemblance to irony which is the favorite procedure of the satirist. Irony adopts, to all appearance, a certain opinion and stresses it and overstresses it till it leads to a manifest absurdity.
''Indirect proof'' establishes the truth of an assertion by showing the falsity of the opposite assumption. Thus, indirect proof has some resemblance to a politician's trick of establishing a candidate by demolishing the reputation of his opponent.
Both "reductio ad absurdum" and indirect proof are effective tools of discovery which present themselves naturally to an intent mind. Nevertheless, they are disliked by a few philosophers and many beginners, which is understandable; satirical people and tricky politicians do not appeal to everybody.
: -- from [[his|George Polya]] book "//How to Solve It//"
Reductio ad absurdum, which Euclid loved so much, is one of a mathematician's finest weapons. It is a far finer gambit than any chess play: a chess player may offer the sacrifice of a pawn or even a piece, but a mathematician offers the game.
"""
They have no need of our help
So do not tell me
These haggard faces could belong to you or me
Should life have dealt a different hand
We need to see them for who they really are
Chancers and scroungers
Layabouts and loungers
With bombs up their sleeves
Cut-throats and thieves
They are not
Welcome here
We should make them
Go back to where they came from
They cannot
Share our food
Share our homes
Share our countries
Instead let us
Build a wall to keep them out
It is not okay to say
These are people just like us
A place should only belong to those who are born there
Do not be so stupid to think that
The world can be looked at another way
"""
''In case it hasn't dawned on you that something is strange with this poem, now read from bottom to top.''
----
(see also [[Lost Generation - poem by Jonathan Reed]]).
This is mentioned in [[an article|https://s3-eu-west-1.amazonaws.com/content.gresham.ac.uk/data/binary/3498/2021-03-09-1300_HART_Fiction-T.pdf]] "Mathematical Structure in Fiction" by professor [[Sarah Hart|https://www.gresham.ac.uk/professors-and-speakers/professor-sarah-hart/]]:
> Another way to direct readers through a narrative is by giving instructions on how it is to be read. I’ll just give two examples, one mathematical and one not. Reverse poems are poems that are read the “right way” first, and are followed by the instruction “now read this poem backwards”. Often, the first, top to bottom, reading of the poem is pessimistic, but then the reverse version is uplifting.
[reversed poem] [literary devices] [read backwards]
\define makefilter() [regexp[(?i)$(pattern)$]] [regexp:text[(?i)$(pattern)$]] -[title[$:/temp/mysearch]]
<$edit-text tiddler="$:/temp/mysearch" tag="input" default=""/><br>
<$reveal state="$:/temp/mysearch" type="nomatch" text="">
<$vars pattern={{$:/temp/mysearch}}>
<$count filter=<<makefilter>>/> matches:<br>
<$macrocall $name="list-links" filter=<<makefilter>>/>
</$vars>
</$reveal>
Notes:
The search is case //in//sensitive - it will search for both Cap and non-cap spelling.
abc.*xyz - will search for abc followed by any other chars, and ending in xyz
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
From [[his|Jasper Fforde]] //Shades of Grey//:
The youthful stationmaster wore a Blue Spot on his uniform and remonstrated with the driver that the train was a minute late, and that he would have to file a report.
The driver retorted that since there could be no material difference between a train that arrived at a station and a station that arrived at a train, it was equally the stationmaster's fault.
The stationmaster replied that he could not be blamed, because he had no control over the speed of the station; to which the engine driver replied that the stationmaster could control its //placement//, and that if it were only a thousand yards closer to Vermillion [not misspelled? In [[South Dakota?|https://www.vermillion.us/]] ], the problem would be solved.
To this the stationmaster replied that if the driver didn't accept the lateness as his fault, he would move the station a thousand yards farther from Vermillion and make him not just late, but //demeritably// overdue.
Religion, n. A daughter of Hope and Fear, explaining to Ignorance the nature of the Unknowable.
:― Ambrose Bierce, The Unabridged Devil's Dictionary
<<list-links "[tag{!!title}]">>
From [[an article/review|http://religiondispatches.org/religion-is-not-about-belief-karen-armstrongs-ithe-case-for-godi/]]:
Karen Armstrong explains that until the modern period, the major Western monotheisms all concerned themselves primarily with practice, the doing of religion, rather than doctrine. A good Muslim was one who stood alongside and supported the Pillars; a good Jew observed Sabbath and remained committed to the Law and the ritual year; and a good Christian embodied the Sermon on the Mount by caring for the marginalized, promoting compassion and peace, and sharing God’s love.
This is what it meant to be religious, Armstrong explains:
:{{imgquote}} Religion as defined by the great sages of India, China, and the Middle East was not a notional activity but a practical one; it did not require belief in a set of doctrines but rather hard, disciplined work, without which any religious teaching remained opaque and incredible.
:{{imgblank}}
:: -- from her book //The Case for God//
Religion enables us to ignore nothingness and get on with the jobs of life.
Perhaps there are two kinds of people: those for whom nothingness is no problem, and those for whom it is an insuperable problem, an outrageous cancellation rendering every other concern, from mismatching socks to nuclear holocaust, negligible.
:: -- John Updike’s //Self-Consciousness: Memoirs//
Religion is a human projection of humanity's conceptions of beauty, goodness, power, and other valued things, a humanizing of experience by understanding it as structured around and mirroring back these values.
Then it would resemble art, with which it is strongly associated. [...] this would dignify religion and characterize the mind as outwardly and imaginatively engaged with the world [...]
-- Robinson, in her book //Absence of Mind//, interpreting Ludwig Andreas von Feuerbach (28 July 1804 – 13 September 1872)
See also [[[Religion stems from] the feeling or consciousness of man that he does not and cannot exist apart from a being that is distinct from himself, that he does not have himself to thank for his own existence.]]
See also Ludwig Wittgenstein's [[Scientism's account of the magical and religious views of mankind is unsatisfactory; it makes these views look like errors.]]
<<comparequote "Peter De Vries" "Looking back, we seem to detect clairvoyance in certain moments of apprehension, but mine were no more than pass like a chill over the heart of any parent watching his treasure asleep in bed or taking off down the road on a bicycle." "mirroring and reflecting feelings">>
Religion is an evolved, biologically grounded, psychologically intimate, socially strong set of inclinations and ideas that are not universal but are widespread and deeply ingrained.
:-- from his book //Believers: Faith in Human Nature//
(reviewed in an article [[The Future, Not Secular|https://www.wsj.com/articles/believers-review-the-future-not-secular-11569620253]])
<<list-links "[tag{!!title}]">>
Remember, any lie you are told, even deliberately, is often a more significant fact than a truth told in all sincerity.
― Halldór Laxness, Under the Glacier
In context (from [[a book review|http://www.nytimes.com/2005/02/20/books/review/a-report-on-the-journey.html]] in the New York Times), the advice the Bishop of Iceland gives his young emissary before sending him to investigate and report on what is happening in a remote (but Central!) Icelandic village:
>"Don't be personal -- be dry! . . . Write in the third person as much as possible. . . . No verifying! . . . Don't forget that few people are likely to tell more than a small part of the truth: no one tells much of the truth, let alone the whole truth. . . . When people talk they reveal themselves, whether they're lying or telling the truth. . . . Remember, any lie you are told, even deliberately, is often a more significant fact than a truth told in all sincerity. Don't correct them, and don't try to interpret them either."
Remember: it is not difficult to be aware – it is just difficult to do it continuously!
<<list-links "[tag{!!title}]">>
Restoring a caring connection when it is disrupted, and maintaining it when it is present, is happiness. Not even, leads to happiness. Equals happiness.
from the book "Happiness is an inside job", by Sylvia Boorstein.
Returning home is the most difficult part of long-distance hiking; You have grown outside the puzzle and your piece no longer fits.
<<comparequote "Terry Pratchett" "Coming back to where you started is not the same as never leaving." "traveling and returning">>
<<comparequote "Oliver Wendell Holmes" "Man's mind, once stretched by a new idea, never regains its original dimensions." "expanding your mind and spirit">>
But also, as [[Ralph Waldo Emerson]] observed:
> In the morning a man walks with his whole body; in the evening, only with his legs.
[walking]
Revenge may be wicked, but it’s natural.
As they ([[David Epstein|Foxes see complexity in what others mistake for simple cause and effect. They understand that most cause-and-effect relationships are probabilistic, not deterministic. There are unknowns and luck, and even when history apparently repeats, it does not do so precisely. They recognize that they are operating in the very definition of a wicked learning environment, where it can be very hard to learn, from either wins or losses.]] and [[Ludwig Wittgenstein|Experiences, thoughts, — life can force the concept of God on us.]], for example) say: life (sometimes :) is a [["wicked learning environment"|Experiences, thoughts, — life can force the concept of God on us.]].
(Also see the article [["The Two Settings of Kind and Wicked Learning Environments"|https://pdfs.semanticscholar.org/5c5d/33b858eaf38f6a14b3f042202f1f44e04326.pdf]] by Robin M. Hogarth, et al.).
There definitely exists a process for taking a scrambled egg and "unscrambling" it, resulting in a whole egg. It's called a chicken.
"""
Or as the old riddle goes:
Q: "How do you unscramble an egg?"
A: "Feed it to a chicken."
"""
But contrary to [[Tom Stoppard]] explaining the second law of thermodynamics in his play “Arcadia”:
> “You cannot stir things apart”.
Rewriting [a document, and article, a piece of software] is an act of war: If something needs to be rewritten then it needs to be destroyed. The enemy in that war is yourself.
: -- from an [[insightful article about Daniel Kahneman|https://jasonzweig.com/what-i-learned-from-daniel-kahneman/]] by [[Jason Zweig]]
Richard David Bach (born 23 June 1936) is an American writer. He is widely known as the author of the hugely popular 1970s best-sellers Jonathan Livingston Seagull, Illusions: The Adventures of a Reluctant Messiah, and others. His books espouse his philosophy that our apparent physical limits and mortality are merely appearance. He claims to be a direct descendant of Johann Sebastian Bach. He is noted for his love of flying and for his books related to air flight and flying in a metaphorical context. He has pursued flying as a hobby since the age of 17.
<<list-links "[tag{!!title}]">>
Info at https://www.richardjdavidson.com/about/
<<list-links "[tag{!!title}]">>
Richard Phillips Feynman was an American theoretical physicist known for his work in the path integral formulation of quantum mechanics, the theory of quantum electrodynamics, and the physics of the ...
Born: May 11, 1918, Far Rockaway
Died: February 15, 1988, Los Angeles
From [[a conversation between Alan Alda, Peter Parnell and Gordon Davidson, moderated by Frank Dwyer|http://www.feynman.com/fun/qed-the-play/]], about the play QED (QED means Quantum Electrodynamics, which was Richard Feynman’s field, and also QED is the abbreviation for ‘quod erat demonstrandum,’ which basically means ‘that proves it.’)
:{{imgquote}} ALDA: What interested me about it (the book //Tuva or Bust!// written by Ralph Leighton) was that it captured an aspect of Feynman’s personality that I thought was fascinating – his ability to see something worth doing in apparently the most trivial pursuit. Getting to Tuva, this country that nobody ever heard of, that he only knew from his boyhood stamp collection. He only thought Tuva was interesting because there were no vowels in the name of its capital city, Kyzyl. But everything he did led to something else. That was the way his brain worked.
{{imgblank}} DWYER: He had a kind of essential playfulness.
{{imgblank}} ALDA: Yeah, an essential playfulness that was very serious to its core. And to me, this wasn’t just an image of Feynman’s character. It represented all humanity trying to understand, and being kind of heroic in the process – to understand the world and whatever part of the universe we can see. It’s heroic because Feynman never lets him self believe something he can’t test. And he doesn’t try to convince anybody else.
<<list-links "[tag{!!title}]">>
Richard Ford is the most Emersonian of American novelists, in his thinking certainly, and especially in his prose style. Like Emerson, Mr. Ford writes in a mode of radical discontinuities. Within the paragraphs his sentences do not flow smoothly into each other, nor are they meant to. A large part of the excitement of reading him is the way in which the writing keeps shifting direction from line to line, sometimes between word and word. Simply, one never knows what is coming next, only that it will be a surprise.
: -- from the [[WSJ review of his book|https://www.wsj.com/articles/sorry-for-your-trouble-review-setting-out-and-putting-in-11588343570]] ‘Sorry for Your Trouble’.
<<list-links "[tag{!!title}]">>
"""
American mathematician whose work had many implications for computer science and telecommunications. Wikipedia
Born: February 11, 1915, Chicago
Died: January 7, 1998, Monterey
Books: Coding and Information Theory, More
"""
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
"""
And then the day came,
when the risk
to remain tight
in a bud
was more painful
than the risk
it took
to Blossom.
"""
[encouragement] [daring] [courage] [no fear] [development]
I heard this story from a friend:
One day, a married couple in Missouri had a candid conversation in which the wife asked:
I know that you and my mother don't get along very well, but she is in her 90s now, and her life-long wish has been to go to the Holy Land before she dies. Can we please fulfill her wish and go?
The husband acknowledged the tense relationship with the mother-in-law, but said he will arrange for the trip, which indeed he did.
The three of them traveled to the Holy Land, and upon arrival went up to the most beautiful view on top of Mount Scopus, to take in the breathtaking view of Jerusalem, the Holy City.
The 94-year-old mother-in-law was so excited and elated, that she died right there and then.
The wife was devastated, and the husband started arranging for the transport of the body back to St. Louis, Missouri. He met with the appropriate burial services people, who informed him that all the arrangements and transport will cost him $12,000. The husband was shocked, and asked if there were other alternatives.
The undertakers informed him that since the mother-in-law died on Mt. Scopus, they could actually arrange for her burial right there on the mountain (which has a very desirable cemetery). And, the better news, they said, is that the cost of the whole arrangement is going to be half the price.
The husband pondered this very tempting offer, but after considering it for a while, he turned it down and said he would still pay the higher price and have the burial in St. Louis.
When the surprised undertakers asked why, he replied: listen, about 2,000 years ago you buried a man here on the mountain and three days later he came back from the dead. I cannot take this risk!
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
His blog: http://rbrault.blogspot.com/
<<list-links "[tag{!!title}]">>
A few more quotes from [[Robert Brault]]'s [[blog|http://rbrault.blogspot.com/p/todays-thought-archive.html]]
* Happiness? Simple, really. You don't let short-term concerns ruin your life, and you don't let long-term concerns ruin your day.
* Enjoy the little things, for one day you may look back and realize they were the big things.
** or [[Kahlil Gibran's take|For in the dew of little things the heart finds its morning and is refreshed.]]
* The mind is an exclusive club, a new belief admitted only on the recommendation of a present member.
* As you wait for better days, don't forget to enjoy today, in case they've already started.
* As a general guideline, if you aren't happy having enough, you won't be happier having more.
* Sometimes there are no words to say, and all you can do as a friend is to show up and not say them.
* Of what use is it to get what you want in life if you must become someone else to get it?
* There are two parts to moving on in life -- living to tell about it and never speaking of it again.
* Life is a series of paths you don't know you're choosing... decisions you don't know you're making... farewells you don't know you're saying.
* The surest way to become the person you're intended to be is to be the one who intends it.
* I would gladly go back and travel the road not taken, if I knew at the end of it, I'd find the same set of grandkids (or kids, for that matter).
* As important as keeping a grasp on reality is keeping a grasp on possibility.
* Do I believe in miracles? Let me put it this way -- I believe in miracle workers.
* So often the idea that something's stopping you is an obstacle illusion.
** or as [[James Clear]] had put it: Lack of confidence kills more dreams than lack of ability. Talent matters, but people talk themselves out of giving their best effort long before talent becomes the limiting factor.
* Life is an educational process you can't opt out of. You either learn the lesson, or you become the lesson. [learning]
* God is not only all-knowing but all-not-telling.
* Let me put it this way -- I don't know everything, but the older I get, the less I have to hear to know the rest.
* One of the harder transitions in parenting is learning to knock on a door to which, for so long, you had the key. [growing up]
* It is wisest, at times, to do nothing and explain it by saying nothing.^^1^^
* It is hard to reason with someone who regards truth as one school of thought.
* What counts in the end is how we treat each other in practice, never mind that we despair of the human race in theory. [decency]
* If you're having one of those days when nothing seems worth doing, there's a list of things worth undoing you can get started on.
* The tricky thing about cowardice is that it loves to pose as the common sense thing to do.
* I remember well the road I took -- and the friends I traveled with. Did we ever get to where we were going? That I don't recall.
* The proof that you are loved is not that your perfections are praised but that your imperfections are defended. [love] [relationship]
* Some say that true love is a mirage. Seek it anyway, for all else is surely desert. [relationship]
* You can complain of others taking you for granted, or you can make it your achievement and your happiness.
* The trouble with learning to parent on the job is that your child is the teacher.
* Life becomes easier when you learn to accept an apology you never got.
* Sometimes I bent the truth to be kind, and I have no regret, for I am far surer of what is kind than I am of what is true.
* If you cannot forgive and forget, pick one.
* The average pencil is seven inches long, with just a half-inch eraser―in case you thought optimism was dead.
* Often, what seems like an impossible climb is just a staircase without the steps drawn in.
* Do not call any work 'menial' until you have watched a competent and mindful person do it.
----
^^1^^ This reminds me of my Father: earlier in life, when he (and we :) were younger he used to say (at the appropriate times, and relevantly to the topic of Leisure):
>wie gut ist es nichts zu tun, und dan ein bisschen auszuruhn
>(how good is it to do nothing, and then rst a bit from it)
an American Pulitzer prize winning journalist and author known for his biographies of United States political figures Robert Moses and Lyndon B. Johnson.
The career advice he got early in his journalistic career was:
Turn every page. Don't assume anything. Turn every goddamned page.
<<list-links "[tag{!!title}]">>
Robert Lee Frost (March 26, 1874 – January 29, 1963) was an American poet. He is highly regarded for his realistic depictions of rural life and his command of American colloquial speech. His work frequently employed settings from rural life in New England in the early twentieth century, using them to examine complex social and philosophical themes. A popular and often-quoted poet, Frost was honored frequently during his lifetime, receiving four Pulitzer Prizes for Poetry.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Physicist Nobel prize winner (1998)
https://en.wikipedia.org/wiki/Robert_B._Laughlin
<<list-links "[tag{!!title}]">>
Scottish novelist, poet, essayist, and travel writer.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
famous for his book //Zen and the Art of Motorcycle Maintenance//.
<<list-links "[tag{!!title}]">>
(July 30, 1920 – January 12, 1998) was an American business executive and author who is noted for transforming Avis into a rental car giant.
Known for his book //Up the Organization//.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
"""
American existential psychologist. He was the author of the influential book Love and Will, which was published in 1969. He is often associated with both humanistic psychology and existentialist philosophy.
Born: April 21, 1909, Ada
Died: October 22, 1994, Tiburon
"""
<<list-links "[tag{!!title}]">>
Romanticizing the loss of jobs to technology is little better than complaining that antibiotics put too many grave diggers out of work.
Or said a different way:
> Fighting to thwart the impact of machine intelligence is like lobbying against electricity or rockets.
:-- From his book “Deep Thinking”
<<list-links "[tag{!!title}]">>
Cofounder of the Institute for the Future, in Palo Alto, the intellectual heart of Silicon Valley.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
From [[his|Jordan Peterson]]'s book [[Beyond Order 12 More Rules for Life|https://en.wikipedia.org/wiki/Beyond_Order#12_Rules]], a few of his 12 more rules (in addition to the first 12 rules from his book [[12 Rules for Life: An Antidote to Chaos|https://en.wikipedia.org/wiki/12_Rules_for_Life]]:
"""
* "Do not carelessly denigrate social institutions or creative achievement."
* "Do not hide unwanted things in the fog."
* "Notice that opportunity lurks where responsibility has been abdicated."
* "Do not do what you hate."
* "Abandon ideology."
* "Work as hard as you possibly can on at least one thing and see what happens."
* "Plan and work diligently to maintain the romance in your relationship."
* "Do not allow yourself to become resentful, deceitful, or arrogant."
* "Be grateful in spite of your suffering."
"""
And from the original book [[12 Rules for Life: An Antidote to Chaos|https://en.wikipedia.org/wiki/12_Rules_for_Life]]:
"""
* "Treat yourself like you are someone you are responsible for helping."
* "Make friends with people who want the best for you."
* "Compare yourself to who you were yesterday, not to who someone else is today."
* "Pursue what is meaningful (not what is expedient)."
* "Tell the truth — or, at least, don’t lie."
* "Assume that the person you are listening to might know something you don’t."
* "Be precise in your speech."
* "Do not bother children when they are skate-boarding."
* "Pet a cat when you encounter one on the street."
"""
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
http://www.ruthozeki.com/about-ruth/
<<list-links "[tag{!!title}]">>
Above the secret entrance to the Political Pundits Club is carved the organization’s ancient motto: Saepe Fallor Nunquam in Dubio. Often Mistaken, Never in Doubt.
[self deprecating? :) ] [Latin]
<<list-links "[tag{!!title}]">>
https://en.wikiquote.org/wiki/Sallustius
<<list-links "[tag{!!title}]">>
wrote among others, the book //Waking up -- A Guide to Spirituality Without Religion//.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
https://en.wikipedia.org/wiki/Sam_Walter_Foss
<<list-links "[tag{!!title}]">>
Samuel Johnson (18 September 1709 [7 September O.S.] – 13 December 1784) was a British author, linguist and lexicographer. He is often referred to as simply Dr. Johnson in the history of literature and is regarded as the greatest man of letters in English history.
<<list-links "[tag{!!title}]">>
Wrote the book 'This side of Nirvana'.
<<list-links "[tag{!!title}]">>
http://www.kaysarahsera.com/about
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
"""
''Satan'', n. One of the Creator's lamentable mistakes, repented in sashcloth and axes^^1^^. Being instated as an archangel, Satan made himself multifariously objectionable and was finally expelled from Heaven. Halfway in his descent he paused, bent his head in thought a moment and at last went back. "There is one favor that I should like to ask," said he.
"Name it."
"Man, I understand, is about to be created. He will need laws."
"What, wretch! You, his appointed adversary, charged from the dawn of eternity with hatred of his soul—you ask for the right to make his laws?"
"Pardon; what I have to ask is that he be permitted to make them himself."
It was so ordered.
"""
: -- [[Ambrose Bierce]], The Unabridged Devil's Dictionary
And another characterization of of the devil from [[The Bard|William Shakespeare]]:
> "The prince of darkness is a gentleman"
: -- Act II, Scene IV of the play "King Lear"
----
^^1^^ a pun on the biblical phrase “sackcloth and ashes.” ( “clothed in sackcloth and having ashes sprinkled on the head as a sign of lamentation or abject penitence")
<<list-links "[tag{!!title}]">>
at Stanford University.
<<list-links "[tag{!!title}]">>
From [[his|Tiago Forte]] blogpost [["How To Take Smart Notes: 10 Principles to Revolutionize Your Note-Taking and Writing"|https://fortelabs.co/blog/how-to-take-smart-notes/]], summarizing and reflecting on the book "//How To Take Smart Notes//" by [[Sönke Ahrens|https://takesmartnotes.com/about/]], inspired by the Zettelkasten method/system of the the 20th-century German sociologist Niklas Luhmann.
This system of knowledge-gathering and learning beautifully supports the idea expressed by [[Ralph Sockman]] who said:
>The larger the island of knowledge, the longer the shoreline of wonder.
This system of collecting and organizing knowledge is very different from the classic "knowledge hierarchy" organization (in libraries, catalogs, etc.), and promotes making deeper, networked, context-rich, fruitful connections.
!! Save contradictory ideas (Principle #10)
Working with a slip-box [ZettelKasten in German] naturally leads us to save ideas that are contradictory or paradoxical.
It’s much easier to develop an argument from a lively discussion of pros and cons rather than a litany of one-sided arguments and perfectly fitting quotes.
Our only criterion for what to save is whether it connects to existing ideas and adds to the discussion. When we focus on open connections, disconfirming or contradictory data suddenly becomes very valuable. It often raises new questions and opens new paths of inquiry. The experience of having one piece of data completely change your perspective can be exhilarating.
The real enemy of independent thinking is not any external authority, but our own inertia. We need to find ways to counteract confirmation bias – our tendency to take into account only information that confirms what we already believe. We need to regularly confront our errors, mistakes, and misunderstandings.
By taking notes on a wide variety of sources and in objective formats that exist outside our heads, we practice the skill of seeing what is really there and describing it plainfully and factually. By saving ideas that aren’t compatible with each other and don’t necessarily support what we already think, we train ourselves to develop subtle theories over time instead of immediately jumping to conclusions.
By playing with a concept, stretching and reconceiving and remixing it, we become less attached to how it was originally presented. We can extract certain aspects or details for our own uses. With so many ideas at our disposal, we are no longer threatened by the possibility that a new idea will undermine existing ones.
[open mind] [richness] [knowledge expansion]
Say not always what you know, but always know what you say.
<<list-links "[tag{!!title}]">>
Scepticism is always a back road leading to some credo or other.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Science advances one funeral at a time.
This is a paraphrase of what [[Planck had said more extensively|https://en.wikiquote.org/wiki/Max_Planck]]:
* A new scientific truth does not triumph by convincing its opponents and making them see the light, but rather because its opponents eventually die, and a new generation grows up that is familiar with it.
* Truth never triumphs—its opponents just die out.
My two favorite quotes on this matter were made 375 years apart.
The first is by Galileo, who said, “The intention of the Holy Spirit is to teach how one goes to heaven, not how heaven goes.”
The second is by Pope John Paul II, who said, “Science can purify religion from error and superstition. Religion can purify science from idolatry and false absolutes.”
I take these men to mean what I would like to say. Science and religion will be hopeful, useful, and life-giving only if we learn to read them with new humility—as tales, as limited human renderings of the Truth. If we continue to read them, either science or Scripture, as giving us Truth direct and final, then all their hope and promise turn to dust. Science read as universal truth, not a human telling, degenerates to technological enslavement and people flee it in despair. Scripture read as universal Truth, not a human telling, degenerates to Inquisition, Jihad, Holocaust, and people flee it in despair. In either case, certainty abolishes hope, and robs us of renewal.
[hubris] [vanity]
Science and religion, like the lion and the lamb, seldom lie down together. But when a scientist stumbles upon a plausible unifying principle behind the world's workings -- Darwin upon natural selection, say, or Einstein upon relativity -- he transforms himself from searcher into believer.
Science describes accurately from outside, poetry describes accurately from inside. Science explicates^^1^^, poetry implicates. Both celebrate what they describe. We need the languages of both science and poetry to save us from merely stockpiling endless “information” that fails to inform our ignorance or our irresponsibility.
----
^^1^^ explicate - analyze and develop (an idea or principle) in detail.
^^2^^ implicate - imply; convey (a meaning or intention) indirectly through what one says, rather than stating it explicitly.
Science does not foreclose^^1^^ possibility, including discoveries that overturn fundamental assumptions, and that it is not a final statement about reality but a highly fruitful mode of inquiry into it.
-- Robinson, in her book //Absence of Mind//
[[Robinson's|Marilynne Robinson]] perspective, coming from a religious background and viewpoint, and her respect for science, and her desire to see science and religion complimenting each other, is supported by [[Krista Tippett]] who writes:
> The science-religion “debate” is unwinnable, and it has led us astray. To insist that science and religion speak the same language, or draw the same conclusions, is to miss the point of both of these pursuits of cohesive knowledge and underlying truth. To create a competition between them, in terms of relevance or rightness, is self-defeating.
> And it’s not so much true, as our cultural debates presume, that science and religion reach contradictory answers to the same particular questions of human life. Far more often, they simply ask different kinds of questions altogether, probing and illuminating in ways neither could alone.
----
^^1^^ foreclose = close, settle, or answer beforehand.
From [[BrainPickings review|https://www.brainpickings.org/2014/01/15/alan-lightman-accidental-universe-science-spirituality/]] of [[Alan Lightman]]'s book //The Accidental Universe: The World You Thought You Knew//:
:{{imgquote}} Science does not reveal the meaning of our existence, but it does draw back some of the veils.
I think that the way to interpret this is that science may (sometimes erroneously or partly) answer questions of "How", but not questions of "Why".)
Lightman adds:
:{{imgquote}} We do not, of course, know all the fundamental laws at the present time. But most scientists believe that a complete set of such laws exists and, in principle, that it is discoverable by human beings, just as nineteenth-century explorers believed in the North Pole although no one had yet reached it.
Which, again, I think suggests that if/when we/scientists eventually know "all the fundamental laws", there will still be the questions of "why" and "who", and so on.
Science is a belief in the ignorance of experts.
Science is an inherent contradiction — systematic wonder — applied to the natural world.
: -- psychiatrists Thomas Lewis, Fari Amini, and Richard Lannon in their book [[A General Theory of Love|https://www.brainpickings.org/2012/02/23/systematic-wonder/]]
Science is knowledge which we understand so well that we can teach it to a computer; and if we don't fully understand something, it is an art to deal with it.
In this sense, we should continually be striving to transform every art into a science: in the process, we advance the art.
: -- from [[his|Donald Knuth]] [[Turing Award Lecture (1974)|https://amturing.acm.org/award_winners/knuth_1013846.cfm]]
"""
"""
This is similar to what [[he|Donald Knuth]] wrote in the Foreword to the book "A = B":
[[Science is what we understand well enough to explain to a computer. Art is everything else we do. Science advances whenever an Art becomes a Science. And the state of the Art advances too, because people always leap into new territory once they have understood more about the old. This book (and Computing) will help you reach new frontiers.]]
"""
"""
Compare to [[Knuth's other saying|Computer programming is an art, because it applies accumulated knowledge to the world, because it requires skill and ingenuity, and especially because it produces objects of beauty. A programmer who subconsciously views himself as an artist will enjoy what he does and will do it better.]]
The scientific method," Thomas Henry Huxley once wrote, "is nothing but the normal working of the human mind." That is to say, when the mind is working; that is to say further, when it is engaged in correcting its mistakes.
Taking this point of view, we may conclude that science is not physics, biology, or chemistry -- is not even a "subject" -- but a moral imperative drawn from a larger narrative whose purpose is to give perspective, balance, and humility to learning.
Eno's Second Law
Science is the conversation about how the world is. Culture is the conversation about how else the world could be, and how else we could experience it.
Science wants to know what can be said about the world, what can be predicted about it. Art likes to see which other worlds are possible, to see how it would feel if it were this way instead of that way. As such art can give us the practice and agility to think and experience in new ways - preparing us for the new understandings of things that science supplies.
Science is what we understand well enough to explain to a computer. Art is everything else we do.
Science advances whenever an Art becomes a Science. And the state of the Art advances too, because people always leap into new territory once they have understood more about the old. This book [and Computing] will help you reach new frontiers.
: -- [[Donald Knuth]] in his Foreword to the book [["A = B"|https://sites.math.rutgers.edu/~zeilberg/AeqB.pdf]]
"""
"""
This is similar to what [[he|Donald Knuth]] had said in his [[Turing Award Lecture (1974)|https://amturing.acm.org/award_winners/knuth_1013846.cfm]]:
[[Science is knowledge which we understand so well that we can teach it to a computer; and if we don't fully understand something, it is an art to deal with it.]]
Science provides an understanding of a universal experience, and arts provide a universal understanding of a personal experience.
-- from [[her TED talk|https://www.ted.com/talks/mae_jemison_on_teaching_arts_and_sciences_together/transcript?referrer=playlist-ken_robinson_10_talks_on_educ]]
Scientific knowledge is tested by observation, not derived from it.
So, scientific theories are testable conjectures.
As Feynman famously recounted in a filmed interview:
>I have a friend who's an artist and he's some times taken a view which I don't agree with very well. He'll hold up a flower and say, "look how beautiful it is," and I'll agree, I think. And he says, "you see, I as an artist can see how beautiful this is, but you as a scientist, oh, take this all apart and it becomes a dull thing." And I think he's kind of nutty. First of all, the beauty that he sees is available to other people and to me, too, I believe, although I might not be quite as refined aesthetically as he is. But I can appreciate the beauty of a flower. At the same time, I see much more about the flower than he sees. I could imagine the cells in there, the complicated actions inside which also have a beauty. I mean, it's not just beauty at this dimension of one centimeter: there is also beauty at a smaller dimension, the inner structure...also the processes. The fact that the colors in the flower are evolved in order to attract insects to pollinate it is interesting -- it means that insects can see the color. It adds a question -- does this aesthetic sense also exist in the lower forms that are...why is it aesthetic, all kinds of interesting questions which a science knowledge only adds to the excitement and mystery and the awe of a flower. It only adds. I don't understand how it subtracts.”
Richard Feynman astutely points out that science doesn’t diminish our capacity for wonder or our appreciation for beauty, but only accentuates our aesthetic sense.
from [[Feynman's Flower -- The Expansive View of Science, Why Physics Complements Aesthetics|http://www.integralworld.net/lane52.html]] by David Lane and Andrea Diem-Lane
(See [[a different angle/dimension on this from Douglas Adams|Isn't it enough to see that a garden is beautiful without having to believe that there are fairies at the bottom of it too?]]).
Feynman expressed a similar sentiment (quoted in richer context in James Gleick’s indispensable biography "Genius: The Life and Science of Richard Feynman") using the beauty of Jupiter (the god and the planet):
>Poets say science takes away from the beauty of the stars — mere globs of gas atoms. I too can see the stars on a desert night, and feel them. But do I see less or more? The vastness of the heavens stretches my imagination — stuck on this carousel my little eye can catch one-million-year-old light. A vast pattern — of which I am a part…. What is the pattern, or the meaning, or the why? It does not do harm to the mystery to know a little about it. For far more marvelous is the truth than any artists of the past imagined it. Why do the poets of the present not speak of it?
>What men are poets who can speak of Jupiter if he were a man, but if he is an immense spinning sphere of methane and ammonia must be silent?
:: (my interpretation of the last quote: what kind of poets are able to 'wax poetic' on Jupiter the God, but cannot (or will not) 'rhapsodize' on the Awesome Planet?)
[[Brian Greene]] echoes this sentiment (science's contribution to awe, beauty, wonder) in a [[conversation with Janna Levin|https://www.brainpickings.org/2020/04/24/brian-greene-janna-levin-conversation/]]:
> If we’re used to thinking of consciousness as this pristine, spectacular quality that we are endowed with from something magical in the external world, to frame it in a reductionist way might feel like we’re flattening it. However, I think it’s utterly spectacular that the very same physical processes that are responsible for this pitcher of water or the structure of this table are what’s responsible for conscious self-awareness — how miraculous that collections of particles can do and think and feel what we do. That, I think, is the conclusion — it amplifies and elevates the wonder of it all, it doesn’t take away from it.
(see also what [[Nan Shepherd]] had to say about [[knowing and acknowledging the power and mystery of nature|I can imagine the antiquity of rock, but the antiquity of a living flower — that is harder. It means that these toughs of the mountain top, with their angelic inflorescence and the devil in their roots, have had the cunning and the effrontery to cheat, not only a winter, but an Ice Age. The scientists have the humility to acknowledge that they don’t know how it has been done.]]).
* To guess what to keep and what to throw away takes considerable skill. Actually it is probably merely a matter of luck, but it looks as if it takes considerable skill.
* Science is like sex: sometimes something useful comes out, but that is not the reason we are doing it.
* Now one may ask, “What is mathematics doing in a physics lecture?” We have several possible excuses: first, of course, mathematics is an important tool, but that would only excuse us for giving the formula in two minutes. On the other hand, in theoretical physics we discover that all our laws can be written in mathematical form; and that this has a certain simplicity and beauty about it. So, ultimately, in order to understand nature it may be necessary to have a deeper understanding of mathematical relationships. But the real reason is that the subject is enjoyable, and although we humans cut nature up in different ways, and we have different courses in different departments, such compartmentalization is really artificial, and we should take our intellectual pleasures where we find them.
Said about [[Frazer's Golden Bough|https://en.wikipedia.org/wiki/The_Golden_Bough]]:
The [traditional/accepted/scientistic] account of the magical and religious views of mankind is unsatisfactory; it makes these views look like errors.
I think that it echoes what [[Marilynne Robinson]] says about the popularly perceived (but erroneous, in her mind) clash between science and religion, regarding "The Mystery of the Universe/Existence".
<<list-links "[tag{!!title}]">>
Scientists build to learn; Engineers learn to build.
https://en.wikipedia.org/wiki/Scott_Adams
The creator of [[Dilbert|https://dilbert.com/]].
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<$button>
<$action-setfield $tiddler="NewQuote" tags="quote"/>
<$action-sendmessage $message="tm-edit-tiddler" $param="NewQuote"/>
Create New Quote
</$button> <$button>
<$action-setfield $tiddler="NewAuthor" tags="author" text='<<list-links "[tag{!!title}]">>'/>
<$action-sendmessage $message="tm-edit-tiddler" $param="NewAuthor"/>
Create New Author
</$button>
[[This TiddlyWiki modifications]]
This quotes wiki can be searched in multiple ways, using either free text or the categories ("tags") associated with each quote (see below).
"""
"""
!!! __To search for a word appearing in a quote__, use the "search" box at the top of the ''right pane'', or use the ''search box below'':
Enter words to search:
{{$:/core/ui/SideBarSegments/search}}
"""
"""
!!!
!!! __To ''list'' quotes by specific tags__ use the "Tags" tab on the right (click "More", then "Tags").
!!!
!!! You can also ''list by'':
!!!
!!! * @@font-size:16pt;[[Quote Categories]]@@ (e.g., [[language]], [[morality]], [[character]])
!!!
!!! * @@font-size:16pt;[[Quote Authors]]@@ (e.g., [[Winston Churchill]], [[Vaclav Havel]])
!!!
"""
"""
!!Why Quotes?
I //love// quotes! To [[paraphrase (and 'subvert' :) Goethe|When ideas fail, words come in very handy.]]: When insights need to be captured or expressed, quotes (often) come in very handy.
I love them and collect them^^1^^, regardless of whether [[Winston Churchill]] (whose (most, but not all :) qualities I admire) meant it as a compliment or not when he said (and I quote): "It is a good thing for an uneducated man to read books of quotations" ^^2^^.
//Good// quotes are sometimes like sharp scalpels: in one, usually short and concise sentence or two, they reveal what the quote-lover considers "a very true aspect of life". Or, to use a less-violent metaphor, they are like a "good" caricature, capturing or exposing a "very telling" (in the eyes of the beholder) side of life with very few lines/shapes.
"""
"""
And speaking of sharpness and pointedness of //good// quotes, Erasmus in [[Adages|http://www.people.virginia.edu/~jdk3t/ErAdPref.pdf]] had [[written|https://archive.org/stream/proverbschieflyt00blaniala/proverbschieflyt00blaniala_djvu.txt]]:
: {{imgquote}} It [sometimes] happens (how, I cannot tell) that an idea launched like a javelin in proverbial [well known, stereotypical] form strikes with sharper point on the hearer’s mind and leaves implanted barbs of thought [which stretches [//detorser// - wrench] and expands the meaning, insights, and implications in a vastly different and novel sense].^^3^^
"""
"""
To be able to recognize your own feelings/views (a piece of your mind?) in someone else's mind (through their quote or caricature) is enjoyable, sometimes educational (to Sir Winston's point above), and sometimes fulfilling in a deep sense of recognition mixed with discovery (more on [[why we quote - by Ruth Finnegan|http://books.openedition.org/obp/927]] (and [[on GD|https://docs.google.com/document/d/1CvYPIUwXPDHEDWxL06ApmPbjB-4c40poo4mfg5tfu5Q/edit?usp=sharing]])).
"""
"""
As [[Alan Bennett]] (in //The History Boys//) writes:
: {{imgquote}} The best moments in reading are when you come across something – a thought, a feeling, a way of looking at things – which you had thought special and particular to you. Now here it is, set down by someone else, a person you have never met, someone even who is long dead. And it is as if a hand has come out and taken yours.
"""
"""
To quote [[Ralph Waldo Emerson]]:
: {{imgquote}} Our debt to tradition through reading and conversation is so massive [...] All minds quote. Old and new make the warp [the set of yarns placed lengthwise in the loom] and woof [the yarn woven across the width of the fabric] of every moment. There is no thread that is not a twist of these two strands. By necessity, by proclivity, and by delight, we all quote.
"""
"""
So, we do it //all the time//, and we do it for //all time//:
[[Friedrich Nietzsche]], the greatest aphorist of all, provides the most pointed description of the power of mighty thoughts:
: {{imgquote}} A good aphorism is too hard for the tooth of time and is not consumed by all millennia, although it serves every time for nourishment: thus it is the great paradox of literature, the intransitory amid the changing, the food that always remains esteemed, like salt, and never loses its savor.
"""
"""
If you are still wondering what are quotes good for, there is a good (but, IMHO, non-complete :) list of reasons given by [["The Wisest of All Men"|https://biblehub.com/1_kings/4-29.htm]], King Solomon, in [[Proverbs 1|https://www.sefaria.org/Proverbs.1?lang=bi]] (talk about resorting to The Source :) :
<a href="./resources/Proverbs1.png" target="new"><img src="./resources/Proverbs1.png" width="95%" height="95%" /></a>
"""
"""
So, (and ending on a lighter note :), as the popular New York celebrity chef Jean-Georges Vongerichten said:
: {{imgquote}} The amuse-bouche is the best way … to express big ideas in small bites.
"""
"""
Being careful not to abuse quoting (or the reader of them :), and being aware of [[their danger|A long way of saying that life is complicated (and hard (and uncertain))]], as [[Jose Saramago]] so aptly expressed, I hope you enjoy!
,,[[Tiddlywiki|https://tiddlywiki.com/]] version: <<version>>,,
Visitors: <html>
<a href="https://smallseotools.com/visitor-hit-counter/" target="_blank" title="Visitor Hit Counter">
<img src="https://smallseotools.com/counterDisplay?code=9d5e3d5d8fdbc3ecd083922207407aad&style=0008&pad=4&type=page&initCount=59" title="Visitor Hit Counter" Alt="Visitor Hit Counter" border="0">
</a>
</html>
----
^^1^^ see [[Jose Saramago]] [[On collecting and collectors]].
^^2^^ but, on the other hand, as [[Will Rogers]] had said: [[Everybody is ignorant (or uneducated). Only on different subjects.|Everybody is ignorant. Only on different subjects.]]
^^3^^ Erasmus describes this as [["expansion" or "torquing" of expressions in surprising and novel ways|On torquing expressions into new meanings]].
Seaside Canon (for Douglas Hofstadter)^^1^^
"""
The ocean was still.
In an empty sky, two gulls turned lazy arcs, and
their keening cries echoed
off the cliff and disappeared into the sea.
When the child, scrambling up the rocks, slipped
out of her parents’ reach,
they called to her. She was already
so high, but those distant peaks beyond —
they called to her. She was already
out of her parents’ reach
when the child, scrambling up the rocks, slipped
off the cliff and disappeared into the sea.
Their keening cries echoed
in an empty sky. Two gulls turned lazy arcs, and
the ocean was still.
"""
----
^^1^^ inspired by the [[“Crab Canon” dialogue|https://genius.com/Douglas-hofstadter-crab-canon-annotated]] in [[his|Douglas Hofstadter]]'s Pulitzer Prize-winning book “Gödel, Escher, Bach: An Eternal Golden Braid”, where the whole dialogue is a line-level palindrome. The first line is the same as the last, the second line is the same as the second-to-last, and so on.
https://www.pinterest.ca/sebpaquet/
<<list-links "[tag{!!title}]">>
Roman Philosopher
Wrote a book "On the Shortness of Life".
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
A group of students were asked to list what they thought were the present "Seven Wonders of the World." Though there were some disagreements, the following received the most votes:
# Egypt's Great Pyramids
# Taj Mahal
# Grand Canyon
# Panama Canal
# Empire State Building
# St. Peters Basilica
# China's Great Wall
While gathering the votes, the teacher noted that one student had not finished her paper yet. So she asked the girl if she was having trouble with her list. The girl replied, 'Yes, a little. I couldn't quite make up my mind because there were so many."
The teacher said, "Well, tell us what you have, and maybe we can help." The girl hesitated, then read: I think the 'Seven Wonders of the World' are:
# To See
# To Hear
# To Touch
# To Taste
# To Feel
# To Laugh
# To Love
The room was so quiet you could have heard a pin drop. The things we overlook as simple and ordinary and that we take for granted are truly wondrous! A gentle reminder that the most precious things in life cannot be built by hand or bought by man.
[[Billy Collins]] writes about it in [[Genius - poem by Billy Collins]]:
{{Genius - poem by Billy Collins}}
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Sholom Aleichem, Solomon Naumovich Rabinovich, Sholem Aleichem,
שלום עליכם,שאָלעמ־אלייכעמ
https://en.wikipedia.org/wiki/Sholem_Aleichem
<<list-links "[tag{!!title}]">>
You can actually practice shaping a mind which is constantly enlarging the context, and becoming more generous, and more in contact with the frontier which is the unknown.
You can do that through asking "beautiful questions" and through genuine conversations.
from a [[conversation between Krista Tippett and David Whyte On Becoming Wise|https://www.youtube.com/watch?v=Nup6deehcck]] (1:40 hrs.)
<<list-links "[tag{!!title}]">>
[[Shawna Lemay|http://transactionswithbeauty.com/about/]]'s blog
<<list-links "[tag{!!title}]">>
Granny Aching^^1^^ had never been at home with words. She collected silence like other people collected string. But she had a way of saying nothing that said it all.
:-- from Terry Pratchett's book //Hat Full of Sky//
"""
"""
Compare to [[his|Terry Pratchett]] other evocative metaphors about words, from the book "The Truth", in two scenes happening at the [[movable type|https://en.wikipedia.org/wiki/Movable_type]] printshop:
>it was positively cheering to wander into the print room to find the Bursar arguing the theory of words with Goodmountain (an elf, who invented [[movable type|https://en.wikipedia.org/wiki/Movable_type]]). “Hold on, hold on,” said the Bursar. “Yes, indeed, figuratively a word is made up of individual letters but they have only a—” he waved his long fingers gracefully “—theoretical existence, if I may put it that way. They are, as it were, words //partis in potentia//, and it is, I am afraid, unsophisticated in the extreme to imagine that they have any real existence //unis et separato//. Indeed, the very concept of letters having their own physical existence is, philosophically, extremely worrying.
and also:
>William (a journalist/gossipmonger) stared down at the box of letters again. Of course, a quill pen potentially contained anything you wrote with it. He could understand that. But it did so in a clearly theoretical way, a safe way. Whereas these dull gray blocks looked threatening. He could understand why they worried people. Put us together in the right way, they seemed to say, and we can be anything you want. We could even be something you don’t want. We can spell anything. We can certainly spell trouble.
----
^^1^^ - Granny Aching was a witch, and the grandmother of Tiffany Aching (a young apprentice witch :)
Granny Weatherwax^^1^^ was often angry. She considered it one of her strong points. Genuine anger was one of the world’s great creative forces. But you had to learn how to control it. That didn’t mean you let it trickle away. It meant you dammed it, carefully, let it develop a working head, let it drown whole valleys of the mind and then, just when the whole structure was about to collapse, opened a tiny pipeline at the base and let the iron-hard stream of wrath power the turbines of revenge.
: -- from his book Wyrd Sisters.
----
^^1^^ “Mistress Weatherwax was sort of the 'head witch', even though officially,
“Witches are all equal. [They] don’t have things like head witches. That’s quite against the spirit of witchcraft.”
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
surgeon and author of 'The Wisdom of the Body' and 'How we die'.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
From [[her|Nell Stevens]] article [["Should we stop reading into authors' lives and get back to their books?"|https://www.theguardian.com/books/2018/sep/10/should-we-stop-reading-authors-lives-books-vs-naipaul]]:
*There are so many good writers whose politics and opinions leave us queasy about enjoying their work. But is a story also a celebration of its author?
* I am in favour of removing monuments erected to celebrate individuals whose life work was to destroy the happiness or lives of others. [...] But a book is not a statue. A story is not necessarily a tribute to, or celebration of, its author. I am left reaching, instead, for the correct metaphor to evoke the relationship between work and creator. ''Is a book its author’s child, innocent of its parent’s wrongdoing? Or is it a hologram of its creator, representing all that its author was and did?'' Of course neither of these is correct; I’m still searching for an analogy that lies between these two extremes.
* It seems to me that we should begin by treating the authors we admire as we would treat people in our lives: that is, on a case by case basis, weighing their good points against their bad, taking into account extenuating circumstances and aggravating factors. The life of the author is never truly irrelevant – but if we accept that, we must also accept the weirdness, discomfort and complexities that follow.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Silence is like a cradle holding our endeavors and our will; a silent spaciousness sustains us in our work and at the same time connects us to larger worlds that, in the busyness of our daily struggle to achieve, we have not yet investigated. Silence is the soul's break for freedom.
(see also [[Yutori (spaciousness)]])
<<list-links "[tag{!!title}]">>
Simple, clear purpose and principles give rise to complex and intelligent behavior. Complex rules and regulations give rise to simple and stupid behavior.
We should aim for simplicity because simplicity is a prerequisite for reliability.
Rich Hickey (the author of the Clojure programming language) quoting Edsger Wybe Dijkstra in a [[talk/conference for programmers|https://www.infoq.com/presentations/Simple-Made-Easy]]
"""
Simplicity, patience, compassion.
These three are your greatest treasures.
Simple in actions and thoughts, you return to the source of being.
Patient with both friends and enemies,
you accord with the way things are.
Compassionate toward yourself,
you reconcile all beings in the world.
"""
:: ― Lao Tzu, Tao Te Ching
Since any comprehensible entity is, by complexity theory, of less complexity than we are, such an entity is not, for that very reason, an appropriate deity-like entity. People generally don't worship that which is simpler than they are. This natural reluctance to deify the simple (except possibly as a symbol) is consistent with a tendency among some to identify God with the great unfathomable, the incomprehensibly complex. Reversing the letters in God and the lines of this thought, we note that it is also consistent with a dog's deifying its master (assuming, that is, that the master is of greater complexity than the dog).
(see [[Any phenomenon in nature more complex than the human brain is by definition too complex for us to comprehend. Alternatively, we cannot make predictions (generate binary sequences) of greater complexity than (the information encoded within) our brains. Regularities may exist that provide a key to understanding the universe, but they may be beyond what I term the human brain's "complexity horizon”.]]).
: -- from his book [[Once Upon a Number|http://movies2.nytimes.com/books/99/04/25/reviews/990425.25alexant.html]]
Since the dawn of humanity, religions had asserted without proof that the human soul would live on after the body rotted away.
The human voice was a thing almost as insubstantial as the soul, but it was a product of the body and therefore must die too—in fact, did die, evaporating like breath the moment each word, each phoneme was sounded.
For that matter, even the notes of inanimate things—the tree falling in the wood, thunder rumbling, ice cracking—sounded once only, except if they were duplicated in echoes that themselves rapidly faded.
But here now were echoes made hard.
:-- in his biography of Thomas Edison titled //Edison//.
regarding understanding among "Physics Greats": there is this anecdote about [[Sir Arthur Eddington|https://en.wikipedia.org/wiki/Arthur_Eddington]], who when asked if only three people in the world understood general relativity replied, “Who is the third?”
"""
Sky,
Why is the sky so tall and over everything?
"""
"""
What you draw as a blue stripe high above
a green stripe, white-interrupted, the real sky
starts at the tip of each blade of grass and goes
up, up, as far as you can see. Our house stops
at the roof, at the glitter-black overlap of shingles
where the sky presses down, bearing the weight
of space, dark and sparkling, on its back.
Think of sky not as blue, not as over,
but as the invisible surround, a soft suit
you wear close to the skin. When you walk,
the soles of your feet take turns on the ground,
but the rest of you is in the sky, enveloped in sky.
As you move through it, you make a tunnel
in the precise size and shape of your body.
"""
This reminds me of [[The Light of Interiors - poem by Kay Ryan]].
Sleep is the interest we have to pay on the capital which is called in at death; and the higher the rate of interest and the more regularly it is paid, the further the date of redemption is postponed.
: -- Arthur Schopenhauer
And
Emanuel Derman (Professor, Financial Engineering, Columbia University; Author, Models.Behaving.Badly) [[adds (on Edge)|https://www.edge.org/responses/what-is-your-favorite-deep-elegant-or-beautiful-explanation]]:
So wrote Arthur Schopenhauer, comparing life to finance in a universe that must keep its books balanced. At birth you receive a loan, consciousness and light borrowed from the void, leaving a hole in the emptiness. The hole will grow bigger each day. Nightly, by yielding temporarily to the darkness of sleep, you restore some of the emptiness and keep the hole from growing limitlessly. In the end you must pay back the principal, complete the void, and return the life originally lent you.
By focusing on the common periodic nature of sleep and interest payments, Schopenhauer extends the metaphor of borrowing to life itself. Life and consciousness are the principal, death is the final repayment, and sleep is la petite mort, the periodic little death that renews.
If you believe in yourself, if you 'think you can', then you will be able to 'work hard' at what you are trying to learn. And if you really work, if you don't give up, you will learn. You will 'get smart'.
Or in a single line:
:{{imgquote}} Smart is not something that you just are, smart is something that you can get.
:{{imgblank}}
:: -- from his article [[GETTING SMART: THE SOCIAL CONSTRUCTION OF INTELLIGENCE|http://aud.ac.in/upload/getting_smart%5b1%5d.pdf]].
So convenient a thing it is to be a reasonable creature, since it enables one to find or make a reason for everything one has a mind to do.
So it goes.
Kurt Vonnegut in his book //Slaughterhouse-Five//
compare to Robert Frost's [[In three words I can sum up everything I've learned about life: It goes on.]]
also compare to Willard Van Orman Quine's [[A simple question "What is there?" can be answered in a word: "Everything".]]
Or
The further one goes, the less one knows.
:: ― Lao Tzu, Tao Te Ching
So Much From So Little? Now That Explains A Lot!
A small gem by [[Kai Krause|http://edge.org/memberbio/kai_krause]] on [[Edge|http://edge.org/]]. Also worth checking [[Kai's website|http://www.byteburg.de/]].
This direction of simplexity (from simple to complex) has an opposite direction as expressed by [[Oliver Wendell Holmes]] in [[For the simplicity on this side of complexity, I wouldn't give you a fig. But for the simplicity on the other side of complexity, for that I would give you anything I have.]].
Buddhism is essentially a form of phenomenology. But while Western phenomenology seems more or less content with describing human experiencing, Buddhism asks how experiencing can be transformed—in the direction of less suffering and more wisdom and compassion.
Like Buddhism, Western psychotherapy is concerned with alleviating suffering. But Buddhism has a very different and, for the Western mind, curious and surprising approach to suffering. It views suffering as the product of two factors: pain and resistance. Instead of being just focused on reducing pain, it emphasizes that when you stop resisting what you feel in your body, you don’t suffer.
''So while Western therapeutic approaches mostly give us strategies to feel less pain, Buddhism teaches us to be more open to what we’re feeling, even if it’s pain, without grasping for something other than what life presents in this very moment. In this way, pain transforms into a form of intensity or energy.'' So in a very fascinating way, psychotherapy and Buddhism are similar in orientation, different in their approach, and highly complementary in practice.
Soap and education are not as sudden as a massacre, but they are more deadly in the long run.
[[Twain|Mark Twain]] also famously said (possibly [[misattributed|https://quoteinvestigator.com/2010/09/25/schooling-vs-education/]]):
> I have never let my schooling interfere with my education.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Edited based on my understanding from [[Shunryu Suzuki]]'s talk/recording: https://suzukiroshi.sfzc.org/dharma-talks/july-20th-1971/
if you want to attain renunciation from birth and death, you shouldn’t try to [exclude, ignore, eliminate, fight, be frightened by, etc.] birth and death, [and you shouldn't make a big] problem of birth and death.
Birth and death is our equipment for our life. Without birth and death we cannot survive. It is our pleasure to have birth and death. That is how I—we understand truth.
So don’t be involved in making too many home-made cookies [laughs] in term of big and small, good or bad. You should make as much, just as much as you need. Without cookies, without food you cannot survive, so it is good to make home-made cookies, but don’t make too many.
It is good to have problems, and without problems we cannot survive. So it is good. We must have problems. But not too many. You don’t need to create problems for yourself when you have enough problems. You have just enough problems to survive; the problems you have are just enough for you. That is so-called “soft-minded practice.”
[Zen practice] [practice living]
Lanier's retelling of Parkinson's Law^^1^^: Software inefficiency and inelegance will always expand to the level made tolerable by Moore's Law.
Put another way, Lanier's corollary to Brand's Laws^^2^^: Whether Small Information wants to be free or expensive, Big Information wants to be meaningless.
"""
"""
----
^^1^^ - Parkinson's law is the adage that "work expands so as to fill the time available for its completion". It is sometimes applied to the growth of bureaucracy in an organization.
^^2^^ - [[Stewart Brand]] on information:
* Information wants to be free.
* Information also wants to be expensive.
Software is the hidden writing that whispers the stories of possibility to our hardware.
And here's the exciting thing: we're the storytellers. We are the ones who are in a place where we can tell those new stories. We have the opportunity, we have the privilege, we have the responsibility, to tell the stories that change the world. What an exciting place to be in!
From his speech at the Computing History Museum:
Software is the invisible thread and hardware is the Loom on which we weave the fabric of computing.
or put another way:
[[Software is the hidden writing that whispers the stories of possibility to our hardware. And here's the exciting thing: we're the storytellers. We are the ones who are in a place where we can tell those new stories. We have the opportunity, we have the privilege, we have the responsibility, to tell the stories that change the world. What an exciting place to be in!]]
Software in a way is a very fragile thing; the most fragile of things perhaps because if a single bit is wrong, the facade that you've created will fall apart and yet at the same time it is perhaps the most elegant of materials because from it I can weave tapestries that are beautiful and elegant, that move us.
Software is perhaps the most durable of materials. It can literally move virtual as well as real mountains; it can move markets and perhaps even more impressively it can move the hearts and minds of individuals.
And yet at the same time software can also be a millstone around the neck of an organization or an individual because it will accumulate over time ossifying potentially that organization or person, making it difficult to move forward.
Software has no mass but it does have weight. In a sense software is also perhaps the most creative of mediums. As with a blank page I can write anything, I can write the works of Shakespeare or I could write Fifty Shades of Grey; I could write haiku.
If you're really creative you take that page [fold it into a paper airplane] and you make it fly; and that's the wonderful things about software, too, that it can reach many dimensions.
From [[his|Robert Martin]] book //"Clean Architecture"//:
>Software may be such stuff as dreams are made on^^1^^, but it runs in the physical world.
he continues quoting [[the Bard|William Shakespeare]]:
>This is the monstrosity in love, lady, that the will is infinite, and the execution confined; that the desire is boundless, and the act a slave to limit.
[vision] [reality] [constraints] [limitations] [software]
----
^^1^^ see [[We are such stuff as dreams are made on, and our little life is rounded with a sleep.]]
Some cause happiness wherever they go; others whenever they go.
Some dreams tell us what we wish to believe. Some dreams tell us what we fear. Some dreams are of what we know though we may not know we knew it. The rarest dream is the dream that tells us what we did not know.
Some drink deeply from the river of knowledge… others only gargle.
Some learn about death earlier than others, and this sets them apart. Such people do not necessarily show a bleak face to the world. Rather, they take what they grasp about life with them into happier occasions, quietly aware of what can be torn away from them at any moment. Their consciousness of transience accompanies them in everything they do and wherever they go for the rest of their lives.
-- from her book //Life Gets Better//.
Some like to understand what they believe in. Others like to believe in what they understand.
(and, I might add, human knowledge and wisdom consists of being able to switch between, and integrate both (science and humanities) ).
From [[Hamming's paper on the unreasonable effectiveness of Math|http://www.dartmouth.edu/~matc/MathDrama/reading/Hamming.html]]:
My first answer to the implied question about the unreasonable effectiveness of mathematics is that we approach the situations with an intellectual apparatus so that we can only find what we do in many cases. It is both that simple, and that awful. What we were taught about the basis of science being experiments in the real world is only partially true. Eddington went further than this; he claimed that a sufficiently wise mind could deduce all of physics. I am only suggesting that a surprising amount can be so deduced. Eddington gave a lovely parable to illustrate this point. He said, "Some men went fishing in the sea with a net, and upon examining what they caught they concluded that there was a minimum size to the fish in the sea."
(see also [[You get what you measure]]).
Some people become depressed at the scale of the universe, because it makes them feel insignificant. Other people are relieved to feel insignificant, which is even worse. But, in any case, those are mistakes. Feeling insignificant because the universe is large has exactly the same logic as feeling inadequate for not being a cow. Or a herd of cows. The universe is not there to overwhelm us; it is our home, and our resource. The bigger the better.
: — from [[his|David Deutsch]] book //"The Beginning of Infinity: Explanations That Transform the World"//
about the dangers of those who had been educated to see only the narrow, discipline-specific and temporally immediate in the world:
They don’t have intelligence. They have what I call “thintelligence.” They see the immediate situation. They think narrowly and they call it “being focused.” They don’t see the surround. They don’t see the consequences.
[broad-based] [cross-disciplinary] [interdisciplinary] [career] [profession] [work advice]
(also see what [[David Epstein]] had to say about [["super-specialization" and narrow focus|David Epstein Quotes]]).
Some people have got a mental horizon of radius zero and call it their point of view.
(compare to [[Alan Kay]]'s [[view|A good point of view is worth many IQ points.]])
I think the first apes who tried to talk with one another decided that learning language was a dreadful bore. They hoped that a few apes would work the thing out so the rest could avoid the bother. But some people write poetry in the language we speak. Perhaps better poetry will be written in the language of digital computers of the future than has ever been written in English.
Quoted in an article titled [[Procedural Literacy: Educating the New Media Practitioner|http://press.etc.cmu.edu/node/205]] by Michael Mateas.
See also [[The computer is a medium of human expression and if it has not yet had its Shakespeares, its Michelangelos or its Einsteins, it will.]]
From his book [["Mathematics and Humor"|https://epdf.pub/mathematics-and-humor.html]] (also on local disk drive) (and an article about Paulos and his book titled [["Mathematics and Humor: John Allen Paulos and the Numeracy Crusade"|https://scholarcommons.usf.edu/cgi/viewcontent.cgi?article=1187&context=numeracy]]):
I became interested in the relation between mathematics and humor when I noticed that mathematicians often had a distinctive sense of humor. What made it distinctive was unclear at first, and so I searched for similarities between mathematical thought and humor.
Both mathematics and humor are forms of intellectual play, the emphasis in mathematics being more on the intellectual, in humor more on the play. To a great degree, combinations of ideas and forms are put together and taken apart just for the fun of it. Both activities are undertaken for their own sake. Ingenuity and cleverness are hallmarks of both. Of course I am speaking here of pure mathematics the art and science of abstract pattern and structure-and not of computational mathematics, which is more a collection of techniques. I am also referring to "pure humor." The analogue to computational mathematics might be, I suppose, manipulative uses of humor in public relations, advertising, and promotion.
Logic, pattern, rules, structure-all these are essential to both mathematics and humor, although of course the emphasis is different in the two. In humor the logic is often inverted, patterns are distorted, rules are misunderstood, and structures are confused. Yet these transformations are not random and must still make sense on some level. Understanding the "correct" logic, pattern, rule, or structure is essential to understanding what is incongruous in a given story-to "getting the joke."
In addition, both mathematics and humor are economical and explicit. Thus the beauty of a mathematical proof depends to a certain extent on its elegance and brevity. A clumsy proof introduces extraneous considerations; it is longwinded or circuitous. Similarly, a joke loses its humor if it is awkwardly told, is explained in redundant detail, or depends on strained analogies.
The logical technique of reductio ad absurdum is important enough to both humor and mathematics to warrant its own paragraph or two. It is a favorite gambit in mathematical proofs and, simply stated, comes to the following. To prove statement S, it is enough to assume the negation of S (not S) and from the negation derive a contradiction. It is probably the prevalence of this technique and of logic in general in mathematics that partially accounts for the propensity of mathematicians to develop all the absurd consequences of any statement offered them. Being in the habit of taking statements literally also contributes, since the literal and figurative interpretations are usually incongruous.
Humor can easily be contrived in this manner. An odd premise is accepted, and the joke or story develops the premise to the point of absurdity. Or a reasonable but figuratively expressed statement is interpreted literally and developed accordingly. For example, innumerable humorous stories have a beginning paragraph whose gist is "What would happen if ... ," where " ... " is the premise whose absurd consequences are developed in the story. The emphasis again is different in humor than in mathematics. In humor, reducing the premise to absurdity is usually done more for the sake of the absurdity than to refute the original premise. Often though, as in satire, both motives are present.
About the reason for and pleasure in keeping a diary (or blog :):
:{{imgquote}} Someday I might read about some of the moments I’ve forgotten, moments I’ve allowed myself to forget, that my brain was designed to forget, that I’ll be glad to have forgotten and be glad to rediscover as writing. The experience is no longer experience. It is reading. [That's why] I am still writing.
''SOMETIMES''
"""
Sometimes
if you move carefully
through the forest
breathing
like the ones
in the old stories
who could cross
a shimmering bed of dry leaves
without a sound,
you come
to a place
whose only task
is to trouble you
with tiny
but frightening requests
conceived out of nowhere
but in this place
beginning to lead everywhere.
Requests to stop what
you are doing right now,
and
to stop what you
are becoming
while you do it,
questions
that can make
or unmake
a life,
questions
that have patiently
waited for you,
questions
that have no right
to go away.
"""
: -- from Whyte's site at [[Everything is waiting for you|http://www.davidwhyte.com/everything-is-waiting-for-you/]]
(See [[some of the "questions that have no right to go away"|David Whyte - questions]]).
Garry Kasparov after playing (and losing^^1^^) chess with IBM's Deep Blue mainframe computer said: Sometimes quantity becomes quality.
----
^^1^^ This happened in 1997. Later, in 2017, Google's Alpha Go AI [[defeated the Go world champion|https://www.theatlantic.com/technology/archive/2017/10/alphago-zero-the-ai-that-taught-itself-go/543450/]]. But as a wise (and athletic? :) man said after that defeat:
{{The mounted horse did not kill athletics. We run for joy.}}
and he was right of course.
This echoes a [["famous exchange"|http://www.quotecounterquote.com/2009/11/rich-are-different-famous-quote.html]] between 2 well-known writers:
: [[F. Scott Fitzgerald]]: The very rich are different from you and me.
: [[Ernest Hemingway]]: yes, they have more money.
As a science fiction writer, I will, however, say that sometimes the view of Earth from another planet can give insights otherwise unattainable.
Sometimes you hear Zen teachers say that a liberated mind is neither active nor passive. In other words, conceptual contradictions don’t have to be contradictory in your experience.
I like to link this question with the Buddhist teaching of right effort. We can understand right effort as a balance of “making it happen” and “letting it happen.” At first, we try to make something happen, but in that process, we discover that our self-centered goals usually create friction or even get us stuck. They are too one-sided. So we begin to hold these goals more and more lightly until we become quite comfortable with letting things happen. Letting things happen is still an intention that gives our activity direction, but one that exercises way less control.
: -- from [[his|Christian Dillo]] post titled [["Why I Write"|https://thedewdrop.org/2022/09/23/why-i-write-christian-dillo/]]
(compare to [[Going in the right direction]])
"""
Pleasure is the state of being
brought about by what you
learn.
Learning is the process of
entering into the experience of this
kind of pleasure.
No pleasure, no learning.
No learning, no pleasure.
"""
Life coach
<<list-links "[tag{!!title}]">>
''Sonnet X from Huntsman, What Quarry?''
"""
Upon this age, that never speaks its mind,
This furtive age, this age endowed with power
To wake the moon with footsteps, fit an oar
Into the rowlocks of the wind, and find
What swims before his prow, what swirls behind --
Upon this gifted age, in its dark hour,
Rains from the sky a meteoric shower
Of facts . . . they lie unquestioned, uncombined.
Wisdom enough to leech us of our ill
Is daily spun; but there exists no loom
To weave it into fabric; undefiled
Proceeds pure Science, and has her say; but still
Upon this world from the collective womb
Is spewed all day the red triumphant child.
"""
(Here is [[one interpretation and explanation|http://www.comity.org/Loom_moonNov06.htm]] of the poem).
(see [[James Gleick]]'s [[encouragement to find meaning in information|Is the amount of information inversely proportional to wisdom? As information surges, will noise swamp signals? Will the false and trivial overwhelm the true and meaningful?]]).
[humanism]
The young Indian hotel owner in the movie "The Best Exotic Marigold Hotel" by director John Madden
with Judi Dench, Bill Nighy, Maggie Smith, Tom Wilkinson.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Speak softly and carry a big stick; you will go far.
[preparedness]
Speech is conveniently located midway between thought and action, where it often substitutes for both.
[idle talk] [shooting the breeze] [chitchat] [chit chat] [wasting time]
or as [[Johann Wolfgang von Goethe]] had said:
[[When ideas fail, words come in very handy.]]
''Spiderweb''
"""
From other
angles the
fibers look
fragile, but
not from the
spider’s, always
hauling coarse
ropes, hitching
lines to the
best posts
possible. It’s
heavy work
everyplace,
fighting sag,
winching up
give. It
isn’t ever
delicate
to live.
"""
[perspective] [life is tough] [life is beautiful/fragile]
<<list-links "[tag{!!title}]">>
Spirituality is not having the answers before you ask the questions, but rather asking the questions and being open to what the answers might be.
from a [[conversation with Krista Tippett on science, life and spirituality|https://www.youtube.com/watch?v=Nup6deehcck]] (1:15 hrs.)
(Compare to [[Parker Palmer]]'s [[take on spirituality|Spirituality is not primarily about values and ethics, not about exhortations to do right or live well. The spiritual traditions are primarily about reality...an effort to penetrate the illusions of the external world and to name its underlying truth.]]).
Spirituality is not primarily about values and ethics, not about exhortations to do right or live well. The spiritual traditions are primarily about reality...an effort to penetrate the illusions of the external world and to name its underlying truth.
(Compare to [[Lawrence Krauss]]'s [[take on spirituality|Spirituality is not having the answers before you ask the questions, but rather asking the questions and being open to what the answers might be.]]).
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Spring: trees flying up to their birds.
[seasons]
Saint
<<list-links "[tag{!!title}]">>
AKA Stanislaw Jerzy Lec
<<list-links "[tag{!!title}]">>
Polish spelling: Stanisław Lem
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Start by doing what's necessary; then do what's possible; and suddenly you are doing the impossible.
(inclined to and driven by [[Tikkun Olam]]?
(compare with [[Our highest human calling is to help repair the part of the world that we can see and touch.]]).
Step with care and great tact, and remember that Life's a Great Balancing Act.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Stephen Hawking once hosted a party for time travelers, announcing it only after the fact. Nobody came.
- from the Wall Street Journal 9/24/2016
> Gould is rightly famed for accounts that show just how much scientists and their conclusions are a product of their time, deeply coloured by their personal and political persuasions. Yet he refuses to position his own ideas in such a context, rejecting the notion as so much navel-watching. It may sound as though he is being inconsistent here, but he is wise to decline the challenge. After all, who can step outside of their own time or skin to weigh up their ideas from some Olympian vantage point? ‘We cannot see our own embeddedness,’ Gould says (echoing [[Albert Einstein]]'s observation the [[The significant problems we have cannot be solved at the same level of thinking with which we created them.]]). It is true to his character that he should leave it to history to judge.
:: -- from [[an interview in the New Scientist|https://www.newscientist.com/article/mg12517055-800-forum-if-only-things-had-been-different-gail-vines-talks-to-stephen-jay-gould-about-the-role-of-contingency-in-evolution]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
https://stevenpinker.com/
The spouse of [[Rebecca Goldstein]] :)
<<list-links "[tag{!!title}]">>
[[Nobel Laureate Steven Weinberg|https://www.nobelprize.org/prizes/physics/1979/weinberg/biographical/]] (Physics, 1979)
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Stewart Johonnot Oliver Alsop (May 17, 1914 – May 26, 1974) was an American newspaper columnist and political analyst.
<<list-links "[tag{!!title}]">>
Founder, the Whole Earth Catalog; Co-founder, The Well; Co-Founder, The Long Now Foundation, and Revive & Restore; Author, Whole Earth Discipline
<<list-links "[tag{!!title}]">>
Stop telling God what to do with his dice.
The "comeback" by the physicist [[Niels Bohr]] to [[Albert Einstein]]'s famous statement:
> [[God doesn't play dice.]]
[[Stephen Hawking]] had another response:
>Einstein was doubly wrong ... not only does God definitely play dice, but He sometimes confuses us by throwing them where they can’t be seen.
"""
Whose woods these are I think I know.
His house is in the village, though;
He will not see me stopping here
To watch his woods fill up with snow.
My little horse must think it queer
To stop without a farmhouse near
Between the woods and frozen lake
The darkest evening of the year.
He gives his harness bells a shake
To ask if there is some mistake.
The only other sound's the sweep
Of easy wind and downy flake.
The woods are lovely, dark, and deep,
But I have promises to keep,
And miles to go before I sleep,
And miles to go before I sleep.
"""
(inspired [[a quote|Often when you think you're at the end of something, you're at the beginning of something else.]] by Fred Rogers (Mister Rogers))
Stories become a physical part of us. They become encoded somehow into fragments of mental routines capable of generating them at will, and, if integrated into our conceptual and emotional maps of the world, they change us forever. We are the stories we tell.
: -- from his book [[Once Upon a Number|http://movies2.nytimes.com/books/99/04/25/reviews/990425.25alexant.html]]
(compare with [[The thought manifests as the word. The word manifests as the deed. The deed develops into a habit, and the habit hardens into character. So watch the thought and its ways with care, And let it spring from love, Out of respect for all beings.]]).
https://www.edge.org/memberbio/stuart_a_kauffman
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Study as if you were going to live forever; live as if you were going to die tomorrow.
Also attributed to [[Mohandas Gandhi|Live as if you were to die tomorrow. Learn as if you were to live forever.]]
"""
I have been here before,
But when or how I cannot tell:
I know the grass beyond the door,
The sweet keen smell,
The sighing sound, the lights around the shore.
You have been mine before,—
How long ago I may not know:
But just when at that swallow's soar
Your neck turned so,
Some veil did fall,—I knew it all of yore.
Has this been thus before?
And shall not thus time's eddying flight
Still with our lives our love restore
In death's despite,
And day and night yield one delight once more?
"""
Sudden Light was written in 1853 or 1854 (according to Rees), and first published in 1863 in Poems: An Offering to Lancashire. It appeared with two distinctly different final stanzas, both of which can be found in the Doughty's edition (referenced below). The above version is the later one, as it appeared in the 1881 Poems. A New Edition.
The older final stanza, as found in the 1870 edition of Poems, is:
"""
Then, now,—perchance again! . . . .
O round mine eyes your tresses shake!
Shall we not lie as we have lain
Thus for Love's sake,
And sleep, and wake, yet never break the chain?
"""
[deja vu]
<<list-links "[tag{!!title}]">>
Suppose I understood everything about how the brain works. I couldn't possibly visualize its processes. Just to count the connections in the cortex at one per second would take 32 million years. For brain theory, you need computers. They're like pigment for a painter.
: -- from an interview titled [[PLOTTING A THEORY OF THE BRAIN|https://www.nytimes.com/1988/05/22/magazine/plotting-a-theory-of-the-brain.html]]
[biology] [modeling] [simulation]
Surely astonishment and wonder are what we feel on encountering something that differs from what is normal, or at least from what is for some reason or other expected. But this whole world is something we encounter only once. We have nothing with which to compare it, and it is impossible to see how we can approach it with any particular expectation. And yet we are astonished; we are puzzled by what we find, yet are unable to say what we should have to have found in order not to be surprised, or how the world would have to have been constructed in order not to constitute a riddle!
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Susan Griffin is a poet, essayist, playwright and screenwriter. She was born in Los Angeles California in 1943, in the midst of the Second World War and the holocaust, and these events had a lasting effect on her thinking.
http://www.susangriffin.com/Bio.html
<<list-links "[tag{!!title}]">>
Wrote (among other things) [[This Is Getting Old: Zen Thoughts on Aging with Humor and Dignity|https://www.inquiringmind.com/article/2701_37_tollifson/]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
English writer and clergyman.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
"""
My Mom: Sylvia Elena Mark
Born: March 28, 1923
Died: October 11, 2011
"""
<<list-links "[tag{!!title}]">>
Symmetry may have its appeal, but it's inherently stale. Some kind of imbalance is behind every transformation.
[[Krista Tippett quotes Marcelo Gleiser in On Being|https://soundcloud.com/onbeing/marilynne-robinson-marcelo-1]] in a conversation: Marilynne Robinson + Marcelo Gleiser — The Mystery We Are
<<list-links "[tag{!!title}]">>
Terence Hanbury "Tim" White was an English author best known for his sequence of Arthurian novels, The Once and Future King, first published together in 1958.
Take-offs are optional, landings are mandatory.
Talent is God given. Be humble. Fame is man-given. Be grateful. Conceit is self-given. Be careful.
Professor of cognitive neuroscience in the department of Experimental Psychology at University College London.
<<list-links "[tag{!!title}]">>
author of the book //Educated//, a memoir about growing up in a survivalist Mormon family in rural Idaho.
<<list-links "[tag{!!title}]">>
Tautologies and contradictions are not real propositions, but degenerate cases. ...Clearly, by negating a contradiction we get a tautology, and by negating a tautology a contradiction.
A little Zen story:
In tea it is polite to say, in Japanese, before you drink the first bowl of team, "Osakini," which means "Please forgive me for going first."
When a Tea Master was on his deathbed, he asked one of the disciples attending to him to lean in closer. "Osakini," he said to her, just before he breathed his last.
Norman Fischer in his book //Sailing home: using the wisdom of Homer's Odyssey to navigate life's perils and pitfalls//.
[The current educational system/model] generally requires that students conform to certain norms and expectations: showing up on a schedule dictated by their school, sitting quietly unless called upon, following spoken directions, and learning primarily by listening to teachers talk.
The problem with this model is that students are not like the raw inputs in a manufacturing process. A system that expects all students to learn from the same teacher-led lessons at roughly the same pace following the same calendar and schedule inevitably either marginalizes some students as it churns along or breaks down under the variations that are beyond its ability to control. Our society increasingly values individuality and diversity, but we’ve inherited an education system that by design requires standardization and conformity.
This is one reason why teaching is such a hard job: ''Teachers are the malleable, humanizing layer between the diverse individual needs of their students and the rigid standards and specifications of the system. The teachers we lionize splay their lives across the grinding cogs of the machine for the sake of the children they serve.''
: -- from an article titled [["A better way to do online learning"|https://www.bostonglobe.com/2022/01/13/opinion/better-way-do-online-learning/]] by Thomas Arnett
Teachers who offer you the ultimate answers do not possess the ultimate answers, for if they did, they would know that the ultimate answers cannot be given, they can only be received.
<<list-links "[tag{!!title}]">>
Teaching is only demonstrating that it is possible. Learning is making it possible for yourself.
or (my take on it):
Teaching (well) is showing what is (or may be) possible. Learning is what (naturally, inevitably) follows.
Teaching is the greatest act of optimism.
Even though Einstein was right when he said that love is a better teacher than duty^^1^^, it is our duty for the better good, the future of humanity and our culture, to have everyone know to read and write well.
As Thoreau said: Without books, history is silent, literature dumb, science crippled, thought and speculation at a standstill.
Maria Montessori had a way out of this dilemma, when she said: [[Embody the most powerful ideas of the culture in the environment.]]
----
^^1^^ = Einstein said "[[Teaching should be such that what is offered is perceived as a valuable gift rather than a hard duty.]]", but also you learn something better (and you work harder at it) when you love it.
Teaching should be such that what is offered is perceived as a valuable gift rather than a hard duty.
For me, the first challenge for computing science is to discover how to maintain order in a finite, but very large, discrete universe that is intricately intertwined.
And a second, but not less important challenge is how to mould what you have achieved in solving the first problem, into a teachable discipline: it does not suffice to hone your own intellect (that will join you in your grave), you must teach others how to hone theirs.
The more you concentrate on these two challenges, the clearer you will see that they are only two sides of the same coin: teaching yourself is discovering what is teachable.
<<list-links "[tag{!!title}]">>
Jan Hawkins made this observation a long time ago: technology doesn’t necessarily lead to learning the same things better - it often leads to better learning about new things.
<<list-links "[tag{!!title}]">>
"""
Tell all the truth but tell it slant —
Success in Circuit lies
Too bright for our infirm Delight
The Truth’s superb surprise
As Lightning to the Children eased
With explanation kind
The Truth must dazzle gradually
Or every man be blind —
"""
<<comparequote "Jerome Bruner" "Any subject can be taught in some intellectually honest form to any child at any stage of development." "intellectual honesty in teaching">>
In teaching: Tell the truth, nothing but the truth, but not the whole truth.^^1^^
Or as [[Ka Wai Cheung|https://www.goodreads.com/author/quotes/499304.Ka_Wai_Cheung]], in his book //The Developer's Code// (in the good series the Pragmatic Bookshelf), said: ''"Lie to simplify"''. Pare down a complex topic and break it down to a "less than perfect" one, in the first iteration.^^1^^
<<comparequote "Jerome Bruner" "Any subject can be taught in some intellectually honest form to any child at any stage of development." "intellectual honesty in teaching">>
(compare to [[Emily Dickinson]]'s [[poem about telling the truth|Tell All The Truth But Tell It Slant - poem by Emily Dickinson]])
----
^^1^^ or as [[Terry Pratchett]] wrote:
> Tiffany (a young apprentice witch :) was on the whole quite a truthful person, but it seemed to her that there were times when things didn’t divide easily into ‘true’ and ‘false’, but instead could be ‘things that people needed to know at the moment’ and ‘things that they didn’t need to know at the moment’.
Sed fugit interea, fugit irreparabile tempus. (Georgics (29 BC), Book III, line 284)
But meanwhile it is flying, irretrievable time is flying. Often quoted as tempus fugit ('time flies').
<<list-links "[tag{!!title}]">>
Terentius Lucanus was a Roman Senator who brought Terence to Rome as a slave. He took him under his wing and educated him and soon freed him out of his amazement of his abilities. Terence went onto become a famous playwright around 170 BCE.
<<list-links "[tag{!!title}]">>
Sir Terence David John "Terry" Pratchett, OBE (Order of the British Empire) was an English author of fantasy novels, especially comical works.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Thank you very much. I have no complaints.
: -- supposedly, this had been said as the last words of a female Zen teacher (as told by [[Sylvia Boorstein]] in her forward to the book //Aging as Spiritual Practice// by [[Lewis Richmond]]).
Dass aber ein jeder numerus par summa duorum primorum sey, halte ich fur ein ganz gewisses theorema, ungeachtet ich dasselbe nicht demonstriren kann.
That a given number is the sum of two primes, I hold for a completely certain result, ignoring the fact that I myself cannot prove it.
(on the certain feeling [[he|Leonhard Euler]] had about the Goldbach Conjecture)
That facts about the world are in themselves capable of shaping the brain is slowly becoming accepted. Does the unconscious only get these facts from us, or does it have the same access to our sensorium that we have?
You can do whatever you like with the us and the our and the we. I did.
At some point the mind must grammaticize facts and convert them to narratives. The facts of the world do not for the most part come in narrative form. We have to do that.
That the birds of worry and care fly over your head, this you cannot change, but that they build nests in your hair, this you can prevent.
That would be a good thing for them to cut on my tombstone: Wherever she went, including here, it was against her better judgment.
That's the thing about people who think they hate computers. What they really hate is lousy programmers.
That's what the gods are! An answer that will do!
From [[The Multi-Path Career|https://jjbeshara.com/2020/05/25/the-multi-path-career/]]:
The 20th century invention of a “career” was more or less defined as one path per life, one job per life.
Like a road trip with one destination in mind, with time spent finding the one highway to get you there.
That was the goal; to get to that destination where you could rest and relax. Maybe it was a goal to earn a pension after your 30 years on the General Motors manufacturing floor or to get tenure as a professor. One destination per person. One path that you should settle on by your early 30’s.
In the last few years, the norm has changed drastically, but it’s still a legacy of last century. Now it is one path “at a time” and one job “at a time.” Changing it up as fleets of fancy (or destabilizing forces like a layoff) take you in a new direction every few years. But it’s still one path and one job at a time, and hopefully settling into a groove by your 40’s. It’s still a road trip, but maybe it’s to Tahoe for a little while and then to Los Angeles after that and then settling in down in Sedona.
The term multi-tasking doesn’t quite fit here. Everyone multi-tasks throughout the day. These people were multi-pathing.
[career advice]
The 5 Buddhist training precepts: refrain from harming, refrain from taking what is not given, refrain from false speech, refrain from sexual misconduct, refrain from needless use of intoxicants.
The ability to create and use explanatory knowledge gives people a power to transform nature which is ultimately not limited by parochial factors, as all other adaptations are, but only by universal laws. This is the cosmic significance of explanatory knowledge – and hence of people, whom I shall henceforward define as entities that can create explanatory knowledge.
:— from [[his|David Deutsch]] book "//The Beginning of Infinity: Explanations That Transform the World//"
The acorn becomes an oak by means of automatic growth; no commitment is necessary...But a man or woman becomes fully human only by his or her choices and his or her commitment to them.
''The After''
after Margaret Atwood^^1^^
"""
There is always the after
even if you knew it was coming
prepared for it, worked even at prevention
and at just in case, and at more, further
the berries went bad, the paint peeled,
the eggs floated to the surface,
the refrigerator went out, the tread of the tires,
worn with the progress you had hoped for,
things fell apart, unraveled, didn’t work out,
and maybe you were right in ending it,
or at least did well, did your best,
learned a thing or two,
perhaps you won, succeeded, found healing,
made amends, made arrangements,
made your peace or made it through,
but there is always the after
"""
[holding life lightly] [ [[memento mori|https://dailystoic.com/memento-mori/]] ]
----
^^1^^ maybe inspired by a line from her [[poem "Spelling"|https://www.poemhunter.com/poem/spelling/]]:
> A word after a word
> after a word is power.
The after is the before for the next during.
Which, according to the authors, means: repeated practice of meditation results in lasting [i.e., changes in personality] traits.
What I thought it meant, before reading the authors' unpacking of this sentence (and it may be related) was that everything that happens, and seems to be the end of something (the "after"), is actually leading to, or the beginning of a new thing (the "before"), since everything is immersed in the stream pr flow (the "during").
from the book //Altered Traits// by Daniel Goleman and Richard Davidson
The afternoon knows what the morning never suspected.
-- Swedish proverb
The aim of every artist is to arrest motion, which is life, by artificial means and hold it fixed so that a hundred years later, when a stranger looks at it, it moves again since it is life.
To be frank, it sometimes seems that the American idea of freedom has more to do with my freedom to do what I want than your freedom to do what you want. I think that, in Europe, we're probably better at understanding how to balance those competing claims, though not a lot.
(compare to [[what Piet Hein had to say about freedom|Freedom means you're free to do just whatever pleases you; — if, of course that is to say, what you please is what you may.]])
(see also what [[John Andrew Holmes]] had said about [[consideration and respect|It is well to remember that the entire universe, with one trifling exception, is composed of others.]]).
The answer to the problem and the sorrow of time is one thing and one thing only: the experience of meaning.
:: -- from his book [[Time and the Soul|http://www.jacobneedleman.com/time-and-the-soul]].
The antidote to exhaustion is not necessarily rest. The antidote to exhaustion is wholeheartedness. You're so exhausted because you can't be wholehearted at what you're doing.
!!!David Whyte tells the following story:
There was a time, many years ago, working at a nonprofit organization, trying to fix the world and finding the world didn't want to be fixed as quickly as I'd like, that I found myself exhausted, stressed and finally, after one particularly hard day, at the end of my tether, I went home and saw a bottle of fine red wine I had left out on the table that morning before I left. No, I did not drink it immediately, though I was tempted, but it reminded me that I was to have a very special guest that evening.
That guest was an Austrian friend, a Benedictine monk, Brother David Steindl-Rast, the nearest thing I had to a really wise person in my life at that time or at any time since. We would read German poetry together—he would translate the original text, I read the translations, all the while drinking the red wine. But I had my day on my mind, and the mind-numbing tiredness I was experiencing at work. I said suddenly, out of nowhere, almost beseechingly, "Brother David, speak to me of exhaustion. Tell me about exhaustion."
And then he said a life-changing thing. "You know," he said, "the antidote to exhaustion is not necessarily rest."
"What is it then?"
"The antidote to exhaustion is wholeheartedness. You're so exhausted because you can't be wholehearted at what you're doing...because your real conversation with life is through poetry."
It was just the beginning of a long road that was to take my real work out into the world, but it was a beginning.
THE ARROW AND THE SONG
"""
I shout an arrow into the air,
It fell to earth, I knew not where;
For, so swiftly it flew, the sight
Could not follow it in its flight.
I breathed a song into the air,
It fell to earth, I knew not where;
For who has sight so keen and strong,
That it can follow the flight of song?
Long, long afterward, in an oak
I found the arrow, still unbroke;
And the song, from beginning to end,
I found again in the heart of a friend.
"""
Or as the Hebrew proverb [[Kohelet/Ecclesiastes 11:1|https://www.sefaria.org/Ecclesiastes.11.1?lang=bi]] says:
שַׁלַּ֥ח לַחְמְךָ֖ עַל־פְּנֵ֣י הַמָּ֑יִם כִּֽי־בְרֹ֥ב הַיָּמִ֖ים תִּמְצָאֶֽנּוּ
Shlach lachmecha al pnei ha'mayim ki berov hayamim timzaenuh,
(Cast your bread upon the water, because in the abundance of days you will find it).
Listening is not about being quiet. The being quiet is a side-effect. Listening is about being present.
To me, a generous listener, a definition of that would be wanting to understand the humanity behind the words of the other-- so it's not just about the words that are going
to pass [from the speaker to you, but it's also] wanting to bring your own best words and your best ideas into the conversation.
You have to muster in yourself, a real curiosity to bring that kind of generosity to bear.^^1^^ And the thing about curiosity is that you can't actually fake it. So really, even just this basic component of the art of living, of being curious, becomes a spiritual discipline.
Listening involves vulnerability. One litmus test about whether you have actually gotten
yourself to a curious place is that you can ask: are you willing to be surprised?
I think that the social art of listening is intimately connected with the virtue of hospitality,
which is a "spiritual technology". One thing I love about hospitality--it's a gateway to all the other great virtues, like compassion or love.
It's an easier entry point. You don't actually have to love someone to be hospitable towards them. You don't have to agree with them to be hospitable towards them. You don't even have to like them to be hospitable towards them.
Questions elicit answers in their likeness... it's almost impossible to meet a simplistic question with anything but a simplistic answer... and it's almost impossible to resist a generous question.
: -- from [[her|Krista Tippett]] conversation about [["The Art of Generous Listening"|https://www.youtube.com/watch?v=J5W36VWNd9E]] at Google.
----
^^1^^ compare to [[John W. Gardner]]'s [[Be interested. Everyone wants to be interesting – but the vitalizing thing is to be interested. Keep a sense of curiosity. Discover new things. Care. Risk failure. Reach out.]].
''The Art Of Marriage''
"""
Happiness in marriage is not something that just happens.
A good marriage must be created.
In the art of marriage the little things are the big things…
It is never being too old to hold hands.
It is remembering to say “I love you” at least once a day.
It is never going to sleep angry.
It is at no time taking the other for granted;
the courtship should not end with the honeymoon,
it should continue through all the years.
It is having a mutual sense of values and common objectives.
It is standing together facing the world.
It is forming a circle of love that gathers in the whole family.
It is doing things for each other, not in the attitude
of duty or sacrifice, but in the spirit of joy.
It is speaking words of appreciation
and demonstrating gratitude in thoughtful ways.
It is not looking for perfection in each other.
It is cultivating flexibility, patience,
understanding and a sense of humor.
It is having the capacity to forgive and forget.
It is giving each other an atmosphere in which each can grow.
It is finding room for the things of the spirit.
It is a common search for the good and the beautiful.
It is establishing a relationship in which the independence is equal,
dependence is mutual and the obligation is reciprocal.
It is not only marrying the right partner, it is being the right partner.
It is discovering what marriage can be, at its best.
"""
: – by Wilferd Arlan Peterson
(Or as [[Kahlil Gibran]] described [[healthy love and intimacy|The oak tree and the cypress grow not in each other's shadow.]]).
The art of teaching is the art of assisting discovery.
The artist is nothing without the gift, but the gift is nothing without work.
The asking and the answering which history provides may help us to understand, even to frame, the logic of experience to which we shall submit. History cannot give us a program for the future, but it can give us a fuller understanding of ourselves, and of our common humanity, so that we can better face the future.
<<comparequote "Winston Churchill" "The farther backward you can look, the farther forward you are likely to see." "history and vision">>
The attention span of a computer is only so long as its electrical cord. (Turnaucka's Law)
The authentic watermark running through the background of a life’s work is an arrival at generosity and, as a mark of that generosity, delight in the hopes of the young: and the giving away to them, not only of rewards that may have been earned but the reward in the secret itself, the core artistry that made the journey a journey.
Perhaps the greatest legacy we can leave from our work is not to instil ambition in others, though this may be the first way we describe its arrival in our life, but the passing on of a sense of sheer privilege, of having found a road, a way to follow, and then having been allowed to walk it, often with others, with all its difficulties and minor triumphs; the underlying primary gift of having been both a witness to and a full participant in the conversation.
: -- from [[his|David Whyte]] book //"Consolations -- The Solace, Nourishment, and Underlying Meaning of Everyday Words"//
[We say] Let's begin at the beginning, as if all one needed to do was to sit down at the table and start ...
These are the delusions of the pure and the unprepared, the beginning is never the clear, precise end of a thread, the beginning is a long, painfully slow process that requires time and patience in order to find out in which direction it is heading, a process that feels its way along the path ahead like a blind man, the beginning is just the beginning, what came before is nigh [almost] on worthless.
: -- from his book //The Cave//
----
In the same chapter, on the same page, he prefaces this with:
[[A long way of saying that life is complicated (and hard (and uncertain))]]
רֵאשִׁית חָכְמָה קְנֵה חָכְמָה וּבְכָל קִנְיָנְךָ קְנֵה בִינָה:
[[Mishlei - Proverbs - Chapter 4|http://www.chabad.org/library/bible_cdo/aid/16375/jewish/Chapter-4.htm]]
The beginning of wisdom is to acquire wisdom, [therefore] acquire understanding with all that you have.
or alternatively
"The beginning of wisdom (i.e., step 1) is to acquire wisdom (i.e., seek knowledge). Therefore, with everything you possess (i.e., your energy, resources/resourcefulness) acquire understanding."
See also the value of wisdom in Buddhism: [[If it is supported by morality, concentration is very fruitful, very beneficial. If it is supported by concentration, wisdom is very fruitful, very beneficial. If it is supported by wisdom, the mind becomes free of all defilements.]]
I love the "brainy" part of this proverb, as well as the "hearty" part:
The logical/sensical thing is that if you want to become wise, you have to acquire wisdom, which is (the necessary, but not sufficient) step 1.
The part with heart is that understanding leads to love and compassion, since you can't truly love and be compassionate without truly understanding someone or something.
The beginning of wisdom is in knowing when to stop. Or maybe sometimes it’s in just stopping.
From her [[blog|https://www.vidyamala-burch.com/]]:
In the Tibetan tradition of Buddhism the word for meditation is ‘familiarisation’ which I think is a very good description of what is happening when we meditate. We are going within and ‘familiarising’ ourselves with the inner world so we can learn to gradually let go of automatic reactions and to bring much more space to our experience.
''The behavioural outcome of meditation and mindfulness is choice.''* It is amazing to feel that we can have some control over out minds and emotions and to respond with kindness, love and a sense of connection to ourselves and all the people we come into contact with.
----
* this reminds me of [[Viktor Frankl]]'s observation about freedom:
> [[Between stimulus and response, there is a space. In that space lies our freedom and power to choose our response. In our response lies our growth and freedom.]]
The best error message is the one that never shows up.
The best kinds of freedom involve choosing your constraints wisely and claiming them as your own.
: -- from [[his|Jonathan Rowson]] book //The Moves That Matter: A Chess Grandmaster on the Game of Life//
The best moments in reading are when you come across something – a thought, a feeling, a way of looking at things – which you had thought special and particular to you. Now here it is, set down by someone else, a person you have never met, someone even who is long dead. And it is as if a hand has come out and taken yours.
''The Best of It''
"""
However carved up
or pared down we get,
we keep on making
the best of it as though
it doesn’t matter that
our acre’s down to
a square foot. As
though our garden
could be one bean
and we’d rejoice if
it flourishes, as
though one bean
could nourish us.
"""
This may echo what [[Albert Einstein]] had said (obviously in a different context):
> [[Everything should be made as simple as possible, but not simpler.]]
[simplification] [minimalism] [asceticism]
The best solutions to problems lie in the category "I didn't know that I didn't know," which means eliminating blind spots is more important than problem solving.
Blindspots constrain your view of what is even a problem, not to mention what is possible as a solution.
So you have to look for blindspots. Which means that perception is the first and most important stage in every effort to solve a problem.
The bottleneck in the path to an effective solution and effective action is perception, therefore no amount of action will make up for a constrained point of view.
This explains why raw effort is so uncorrelated with success. With clear enough perception, you should always do the highest-leverage thing.
(compare to [[Ray Manzarek]]'s take on [[knowns and unknowns|There are things known, and things unknown, and in between are the Doors.]])
The best way to overcome [the fear of death] -- so it seems to me -- is to make your interests gradually wider and more impersonal, until bit by bit the walls of the ego recede, and your life becomes increasingly merged in the universal life.
An individual human existence should be like a river -- small at first, narrowly contained within its banks, and rushing passionately past boulders and over waterfalls. Gradually the river grows wider, the banks recede, the water flows more quietly, and in the end, without any visible break, they become merged in the sea, and painlessly lose their individual being.
The man who, in old age, can see his life in this way, will not suffer from the fear of death, since the things he cares for will continue.
And if, with the decay of vitality, weariness increases, the thought of rest will not be unwelcome.
The best way to pay for a lovely moment is to enjoy it.
(Compare to [[Don't cry because it's over. Smile because it happened.]]).
I define happiness in two ways. The first is just a simple feeling of pleasure and joy. There’s a lot written about that. It’s fun. I like to be happy in that sense. But there is something sort of empty or cotton candy about that. Most of us, if given the choice of taking a pill that would do this for the rest of our lives, most of us shrink at that.
In writing “The Happiness Hypothesis”, the view that I came to from looking at ancient wisdom and modern research on flourishing, on a life well lived, is that we all have a set point for happiness that we tend to return to, but we can live our lives in ways that bring us above or below that set point fairly consistently.
The answer that I came to, I’ll give away the ending of the book right here, is that ''the best we can do is to get the right relationship between ourselves and others, between ourselves and our work, and between ourselves and something larger than ourselves.'' For most people that’s religion, but there are many other projects. The trick is to find some way in which you work with other people that you respect in pursuit of a noble end in a way that uses your strengths. If you can do that, that’s the best you can do.
: -- from a short clip on BigThink about [["The Duality of Happiness"|https://bigthink.com/videos/the-duality-of-happiness/]]
(see also how [[he|Jonathan Haidt]] put it [[slightly differently|Happiness is not the shallow state of feeling pleased and chipper all the time. Happiness is the state of a human being that has achieved cross-level coherence within themselves, and between themselves and people, challenges, work, and institutions around them. Happiness comes from between.]]).
The better we get at getting better, the faster we will get better.
The better you tell an old story, the more you are talking about right now.
:: -- from his book //Engine Summer//
Alone:
To be alone for any length of time is to shed an outer skin. The body is inhabited in a different way when we are alone than when we are with others. Alone, we live in our bodies as a question rather than a statement.
The permeability of being alone asks us to re-imagine ourselves, to become impatient with ourselves, to tire of the same old story and then slowly, hour by hour, to start to tell the story in a different way, as other parallel ears, ones we were previously unaware of, begin to listen to us more carefully in the silence.
To inhabit silence in our aloneness is to stop telling the story altogether. To begin with, aloneness always leads to rawness and vulnerability, to a fearful simplicity, to not recognising and to not knowing, to the wish to find any company other than that not knowing, unknown self, looking back at us in the silent mirror.
: -- from [[his|David Whyte]] book //"Consolations -- The Solace, Nourishment, and Underlying Meaning of Everyday Words"//
The brain is locked in total darkness, of course. It floats in a clear liquid inside the skull, never in the light. And yet the world it constructs in the mind is full of light. It brims with color and movement. So how does the brain, which lives without a spark of light, build for us a world full of light?
- from the wonderful book //All the Light We Cannot See// by Anthony Doerr
For billions of years on this planet there was life, but no free will. Physics hasn't changed, but now we have free will. The difference is not in physics. It has to, ultimately, do with biology. Particularly evolutionary biology. What has happened over those billions of years, is that greater and greater competences have been designed and have evolved.
And there's an entirely naturalistic story to tell about how we came to have that competence, or those competences. And it's that "Can do." attitude/ability. It's that power that we have which is natural, but powerful, which sets us aside from every other species. And the key to it is that we don't just act for reasons. We represent our reasons to ourselves and to others.
The business of asking somebody, "Why did you do that?" and the person being able to answer, is the key to responsibility. And in fact, the word, "responsibility," sort of wears its meaning on its sleeve. We are responsible because we can respond to challenges to (and questions about) our reasons. Why? Because we don't just act for reasons, we act for reasons that we consciously represent to ourselves. And this is what gives us the power and the obligation to think ahead, to anticipate, to see the consequences of our action. To be able to evaluate those consequences in the light of what other people tell us. To share our wisdom with each other.
No other species can do anything like it. And it's because we can share our wisdom that we have a special responsibility. That's what makes us free in a way that no bird is free, for instance. There's a very sharp limit to the depth that we as conscious agents can probe our own activities. This sort of superficial access that we have to what's going on, that's what consciousness is.
Now, when I say, who's this, "we," who's got this access? That's itself part of the illusion because there isn't a, sort of, boss part of the brain that's sitting there with this limited access. That itself is part of the illusion. What it is, is a bunch of different subsystems, which have varying access to varying things and that "conspire" in a sort of competitive way to execute whatever "projects" it is that they're, in their, sort of, mindless way executing.
: -- from the video clip [ext["The great free will debate - Bill Nye, Michio Kaku, Robert Sapolsky, Steven Pinker & more"|https://m.youtube.com/watch?v=3O61I0pNPg8]].
''[[The Calf-Path|https://www.poemhunter.com/poem/the-calf-path/]]''
"""
One day, through the primeval wood,
A calf walked home, as good calves should;
But made a trail all bent askew,
A crooked trail as all calves do.
Since then two hundred years have fled,
And, I infer, the calf is dead.
But still he left behind his trail,
And thereby hangs my moral tale.
The trail was taken up next day
By a lone dog that passed that way;
And then a wise bell-wether sheep
Pursued the trail o’er vale and steep,
And drew the flock behind him, too,
As good bell-wethers always do.
And from that day, o’er hill and glade,
Through those old woods a path was made;
And many men wound in and out,
And dodged, and turned, and bent about
And uttered words of righteous wrath
Because ‘twas such a crooked path.
But still they followed -- do not laugh --
The first migrations of that calf,
And through this winding wood-way stalked,
Because he wobbled when he walked.
This forest path became a lane,
That bent, and turned, and turned again;
This crooked lane became a road,
Where many a poor horse with his load
Toiled on beneath the burning sun,
And traveled some three miles in one.
And thus a century and a half
They trod the footsteps of that calf.
The years passed on in swiftness fleet,
The road became a village street,
And this, before men were aware,
A city’s crowded thoroughfare;
And soon the central street was this
Of a renowned metropolis;
And men two centuries and a half
Trod in the footsteps of that calf.
Each day a hundred thousand rout
Followed the zigzag calf about;
And o’er his crooked journey went
The traffic of a continent.
A hundred thousand men were led
By one calf near three centuries dead.
They followed still his crooked way,
And lost one hundred years a day;
For thus such reverence is lent
To well-established precedent.
A moral lesson this might teach,
Were I ordained and called to preach;
For men are prone to go it blind
Along the calf-paths of the mind,
And work away from sun to sun
To do what other men have done.
They follow in the beaten track,
And out and in, and forth and back,
And still their devious course pursue,
To keep the path that others do.
But how the wise old wood-gods laugh,
Who saw the first primeval calf!
Ah! many things this tale might teach --
But I am not ordained to preach.
"""
This is in the spirit of [[Man plans and God laughs.]]
[independent thinking/doing] [human nature]
So here you have it, a case about significance and attribution: do, but think; but, don't over-think. A balancing act. Where is the line between thinking and over-thinking, and how do we know we have crossed the line? And also: is there really only one line (or set of criteria to determine the line), or does it depend on the context and circumstances? That is, in certain cases, a certain depth/effort/thinking is enough, but in other cases/contexts/circumstances a different level/line is required.
This is similar to (and as difficult as!) Einstein's advice: Everything Should Be Made as Simple as Possible, But Not Simpler.
The capacity to feel love more than consciousness is the universal presence. Our feeling of love is actually a sense of that generativity when we can look at another person and see that they can be something more than they are and more than just what we are.
: -- [[Peter Wang]] in an interview with [[Lex Fridman|https://lexfridman.com/]] titled [["Peter Wang: Python and the Source Code of Humans, Computers, and Reality"|https://www.youtube.com/watch?v=X0-SXS6zdEQ]].
[relationship]
The chains of habit are too weak to be felt until they are too strong to be broken.
(compare to a Buddhist take [[on habits|The thought manifests as the word. The word manifests as the deed. The deed develops into a habit, and the habit hardens into character. So watch the thought and its ways with care, And let it spring from love, Out of respect for all beings.]]).
The chief beauty about the constant supply of time is that you cannot waste it in advance. The next year, the next day, the next hour are lying ready for you, as perfect, as unspoilt, as if you had never wasted or misapplied a single moment in all your life.
: ― in his book //How to Live on 24 Hours a Day//
(see also [[You wake up in the morning, and lo! your purse is magically filled with twenty-four hours of the unmanufactured tissue of the universe of your life! It is yours. It is the most precious of possessions.]]).
The code you write makes you a programmer. The code you delete makes you a good one. The code you don't have to write makes you a great one.
The computer is a medium of human expression and if it has not yet had its Shakespeares, its Michelangelos or its Einsteins, it will.
See also [[Some people write poetry in the language we speak. Perhaps better poetry will be written in the language of digital computers of the future than has ever been written in English.]]
The computer is an instrument whose music is ideas.
and
The music is not in the pipe organ.
See also [[Computers are to computing as instruments are to music. Software is the score whose interpretations amplifies our reach and lifts our spirits. Leonardo da Vinci called music the shaping of the invisible, and his phrase is even more apt as a description of software.]]
<a href="./resources/ComputerMusic.png" target="new"><img src="./resources/ComputerMusic.png" width="55%" height="55%" /></a>
[img[Thinking and computers|resources/ComputerMusic1.png]]
Reflecting the above:
There’s a story about Jascha Heifetz, the famously dyspeptic Russian violinist and giant of the golden age of recording: After a concert one evening, an admirer went to visit the soloist in his dressing room. “Mr. Heifetz,” he gushed, “what a performance! Your violin has such a gorgeous tone!” Heifetz picked up his instrument, held it to his ear and knit his brow. “I don’t hear anything.”
The contour of what we know is a mere silhouette cast by the infinite light of the unknown against the screen of the knowable.
<<comparequote "Ralph Sockman" "The larger the island of knowledge, the longer the shoreline of wonder." "learning and knowledge">>
The contributions of Muslim scientists typically occurred in spite of Islam rather than because of it. Orthodox Islamic scholars absolutely rejected any conception of the universe that involved consistent physical laws, because the absolute autonomy of Allah could not be restricted by natural laws. . . . Catholicism admits the possibility of miracles and acknowledges the role of the supernatural, but the very idea of a miracle suggests that the event in question is unusual, and of course it is only against the backdrop of an orderly natural world that a miracle can be recognized in the first place.
: —Thomas E. Woods, Jr., in his book //How the Catholic Church Built Western Civilization//
I began to realize that the only places where things were actually real was at this frontier between what you think is you and what you think is not you, that whatever you desire of the world will not come to pass exactly as you will like it. But the other mercy is that whatever the world desires of you will also not come to pass, and what actually occurs is this meeting, this frontier.
But it’s astonishing how much time human beings spend away from that frontier, abstracting themselves out of their bodies, out of their direct experience, and out of a deeper, broader, and wider possible future that’s waiting for them if they hold the conversation at that frontier level. Half of what’s about to occur is unknown both inside you and outside you.
John O’Donohue, a mutual friend of both of us, used to say that one of the necessary tasks is this radical letting alone of yourself in the world, letting the world speak in its own voice and letting this deeper sense of yourself speak out.
The poet, in many ways, looks at "the conversational nature of reality."
The conversational nature of reality is the fact that whatever you desire of the world -- whatever you desire of your partner in a marriage or a love relationship, whatever you desire of your children, whatever you desire of the people who work for you or with you, or your world -- will not happen exactly as you would like it to happen.
But equally, whatever the world desires of us -- whatever our partner, our child, our colleague, our industry, our future demands of us, will also not happen.
And what actually happens is this frontier between what you think is you and what you think is not you. And this frontier of actual meeting between what we call a self and what we call the world is the only place, actually, where things are real.
: -- from his [[TED Talk "A Lyrical Bridge between Past, Present, and Future"|https://www.ted.com/talks/david_whyte_a_lyrical_bridge_between_past_present_and_future/transcript?language=en]]
The covers of this book are too far apart.
Also
novel, n. A short story padded.
:― [[Ambrose Bierce]], The Unabridged Devil's Dictionary
Found in [[Seymour Papert]]'s article [[ Computer Criticism vs. Technocentric Thinking|http://www.papert.org/articles/ComputerCriticismVsTechnocentric.html]]
''critic'' (noun. From Greek kritikos able to discern or judge)
1: one who expresses a reasoned opinion on any matter involving a judgment of its truth value or righteousness, an appreciation of its beauty or techniques, or an interpretation...
2: one given to harsh or captious [petty] judgment.
:: -- Webster's Collegiate Dictionary
...the critic may on occasion be called upon to condemn the second rate and expose the fraudulent: though that duty is secondary to the duty of discriminating praise of what is praiseworthy.
:: -- [[T. S. Eliot]]
And also:
A drama critic is a person who surprises the playwright by informing him what he meant.
:: -- [[Wilson Mizner]]
The cure for boredom is curiosity. There is no cure for curiosity.
compare to [[If you are bored, you are not paying attention.]]
The hardest times for me were each day at twilight. Ever since I was a child, I've gotten lonesome at twilight. There's something about that in-between time when it's not day anymore but it's not yet night.
The day was on its deathbed—I watched it lie down on the brown hills. And up there, alone, what I call twilight sickness came over me. Why was I all alone? It was out of my control; the feeling just came like an uninvited guest. It varied in intensity but there was always a taste of grief at the end of the day.
The insects sang out-katydids? crickets?—farewell, day; hello, night. I tried to catch the moment when they started their klezmer song but I always missed it. When I first heard them, they were already singing, like the first star, always already shining. I had no one to be at my side "at the end of the day," as they say.
I could have tried to distract myself from the twilight sickness, [... but instead]
I sat down on my round black cushion in the loft to face the twilight. I vowed to sit there until it was night. Through the tall window, I watched the day give up the ghost. Where the sky met the line of the Yolla Bolly Mountains, I saw a color with no name, between green and pink. I slipped down in the loss of light, and my own life seemed to fade with the day—all I loved was gone; all I'd done was wrong. The dark ate the trees, leaf by leaf.
And still I sat there, staring down my mind. I had come by choice to be alone on Shimmins Ridge, like a monk in a Chinese scroll. "What is it?” I shouted. “What is it?"
At last, twilight was gone. I went down the steep stairs and lit the lamps and ate my rice and beans in a time that was no longer in between, a time that was simply night.
Evening after evening, I sat there with my demons, asking: What is it? Finally, I saw that it was nothing. It was OK. I began to believe that I was sitting in the lap of Buddha.
As the quiet days went by and I opened to my surroundings, nature helped me understand that I was not alone. Bats, quail, woodpeckers, deer. When the crickets are singing and the leaves are whispering, you feel the vibrations of all the life that's passing through you.
: -- from her book //This is getting old//, in the chapter titled "For the Time Being"
I read all the time. I probably spend more time reading than any other thing I’ve done in my life, including sleeping. I’ve spent many, many days of my life reading eight and ten hours a day, and there’s no day that I don’t read for hours, and don’t ask me how I can do all the other things — I don’t know. The day has pockets — you can always find time to read.
"""
The day is done, and the darkness
Falls from the wings of Night,
As a feather is wafted downward
From an eagle in his flight.
I see the lights of the village
Gleam through the rain and the mist,
And a feeling of sadness comes o'er me
That my soul cannot resist:
A feeling of sadness and longing,
That is not akin to pain,
And resembles sorrow only
As the mist resembles the rain.
Come, read to me some poem,
Some simple and heartfelt lay,
That shall soothe this restless feeling,
And banish the thoughts of day.
Not from the grand old masters,
Not from the bards sublime,
Whose distant footsteps echo
Through the corridors of Time.
For, like strains of martial music,
Their mighty thoughts suggest
Life's endless toil and endeavor;
And to-night I long for rest.
Read from some humbler poet,
Whose songs gushed from his heart,
As showers from the clouds of summer,
Or tears from the eyelids start;
Who, through long days of labor,
And nights devoid of ease,
Still heard in his soul the music
Of wonderful melodies.
Such songs have power to quiet
The restless pulse of care,
And come like the benediction
That follows after prayer.
Then read from the treasured volume
The poem of thy choice,
And lend to the rhyme of the poet
The beauty of thy voice.
And the night shall be filled with music,
And the cares, that infest the day,
Shall fold their tents, like the Arabs,
And as silently steal away.
"""
: ― from //The Belfry of Bruges and Other Poems//
[resting] [balm] [beauty] [longing] [sadness]
The myth of deliberate practice is that you can fashion yourself into anything with enough work and effort. While human beings do possess a remarkable ability to develop their skills, there are limits to how far any individual can go. Your genes set a boundary around what is possible.
while genetics influence performance, they do not determine performance. ''Do not confuse destiny with opportunity. Genes provide opportunity. They do not determine our destiny. It's similar to a game of cards. You have a better opportunity if you are dealt a better hand, but you also need to play the hand well to win.''
If you can't win by being better, then win by being different. By combining your skills, you reduce the level of competition, which makes it much easier to stand out regardless of your natural abilities.
Deliberate practice is necessary for success, but it is not sufficient. The people at the top of any competitive field are both well-suited and well-trained. To maximize your potential, you need to not only engage in consistent and purposeful practice, but also to align your ambitions with your natural abilities.
Regardless of where we choose to apply ourselves, deliberate practice can help us maximize our potential—no matter what cards we were dealt. That is the magic of deliberate practice. It turns potential into reality.
: -- from [[his|James Clear]] blog post [["The Deliberate Practice Myth"|https://jamesclear.com/deliberate-practice-myth]]
[deliberate practice] [habits] [genetics] [abilities]
The difference between an optimist and an incurable optimist is that an optimist says: "everything is for the best; mankind will survive." while an incurable optimist says: "everything is for the best; mankind will survive. And even if mankind doesn't survive, it is still for the best."
And then, there is the pessimistic optimist who sadly shakes his head and says: "I'm very much afraid that everything is for the best."
The Difference Between Genius And Stupidity Is That Genius Has Its Limits.
[[Einstein|Albert Einstein]] also said:
>Two things are infinite: the universe and human stupidity; and I'm not sure about the universe.
And a different take (by half :) from [[Johann Wolfgang von Goethe]]:
>Fools and wise folk are alike harmless. It is the half-wise and the half-foolish, who are the most dangerous.
And a "dictionary" definition of an idiot:
> Idiot, n. - A member of a large and powerful tribe whose influence in human affairs has always been dominant and controlling. The Idiot's activity is not confined to any special field of thought or action, but "pervades and regulates the whole." He has the last word in everything; his decision is unappealable. He sets the fashions and opinion of taste, dictates the limitations of speech and circumscribes conduct with a dead-line.
: ― [[Ambrose Bierce]], The Unabridged Devil's Dictionary
The difference between perseverance and obstinacy is that one comes from a strong will, and the other from a strong won't.
The difference between what the most and the least learned people know is inexpressibly trivial in relation to that which is unknown.
The difficulty of translation from a language that doesn't yet exist is considerable, but there's no need to exaggerate it. The past, after all, can be quite as obscure as the future.
The ancient Chinese book called Tao teh ching has been translated into English dozens of times, and indeed the Chinese have to keep retranslating it into Chinese at every cycle of Cathay^^1^^, but no translation can give us the book that Lao Tze (who may not have existed) wrote. All we have is the Tao teh ching that is here, now. And so with translations from a literature of the (or a) future. The fact that it hasn't yet been written, the mere absence of a text to translate, doesn't make all that much difference. What was and what may be lie, like children whose faces we cannot see, in the arms of silence. All we ever have is here, now.
:: -- From Le Guin's book "Always Coming Home"
(see also what [[she|Ursula K. Le Guin]] said [[about invented languages|Invented languages and linguistic inventions]]).
----
^^1^^ - Cathay is a (poetic/archaic) synonym for China.
The length of a Chinese cycle is about sixty years, though Tennyson writing "Cycle of Cathay" may have thought of it as a thousand years:
>Thro' the shadow of the world we sweep into the younger day:
>Better fifty years of Europe than a cycle of Cathay.)
Or maybe it's from the book "A Cycle of Cathay" by William Worthen Appleton.
Paraphrasing the inimitable [[Ursula K. Le Guin]] about [[language translation|The difficulty of translation from a language that doesn't yet exist is considerable, but there's no need to exaggerate it. The past, after all, can be quite as obscure as the future.]].
The difficulty of translation from another culture to yours is considerable, but there's no need to exaggerate it. Your own culture, after all, can be quite as obscure as the other.
(or as [[Adam Gopnik]] said: [[We are not captives of our tongues, but we are citizens of our languages.]]).
And on the individual level:
The difficulty of understanding another's perspective is considerable, but there's no need to exaggerate it. Your own perspective, after all, can be quite as unique as the other's.
(or as [[Steven Pinker]] wrote: [[The main cause of incomprehensible prose is the difficulty of imagining what it’s like for someone else not to know something that you know.]]).
The dignity that we seek in dying must be found in the dignity with which we have lived our lives. Ars moriendi as ars vivendi: The art of dying is the art of living. The honesty and grace of the years of life that are ending is the real measure of how we die. It is not in the last weeks or days that we compose the message that will be remembered, but in all the decades that preceded them. Who has lived in dignity, dies in dignity.
On cultural perceptions of fantasy [(and Sci-Fi) literature]: The direction of escape is toward freedom. So what is ‘escapism’ an accusation of?
The disadvantages involved in pulling lots of black sticky slime from out of the ground where it had been safely hidden out of harm’s way, turning it into tar to cover the land with, smoke to fill the air with and pouring the rest into the sea, all seemed to outweigh the advantages of being able to get more quickly from one place to another.
[environment] [progress] [destruction] [climate change] [global warming]
The distance between many people’s ears is a block.
He also said:
> If most people said what’s on their minds, they’d be speechless.
and
> Most minds are like concrete… all mixed up and permanently set!
[listening] [speaking] [thinking]
The distinction between the past, the present, and the future is only an illusion, albeit a persistent one.
<<comparequote "Douglas Adams" "Time is an illusion. Lunchtime doubly so." "the illusory nature of time">>
The diversity of the phenomena of nature is so great, and the treasures hidden in the heavens so rich, precisely in order that the human mind shall never be lacking in fresh nourishment.
[[quoted by the NASA astrophysicist Natalie Batalha|https://www.facebook.com/notes/kepler-and-k2-missions/happy-3rd-birthday-kepler/367714629917543/]], where she echos the sentiment:
>I walk through life as if in a fog, seeing half-truths, seeking deeper understanding. Reality is a poem on the tip of my tongue that I can't quite remember, familiar yet distant. It's a form seen through a veil. Mysterious. I ask myself if reality is truly knowable. I am a scientist. I live my life as if every mystery is there for us to discover and understand. The thought is tremendously exciting and drives me.
But hopefully not as [[Peter De Vries]] had said:
>The universe is like a safe to which there is a combination. But the combination is locked up in the safe.
This is NOT [[the entire poem (as read by Swenson)|https://vimeo.com/67925010]]! I just have excerpts which I thought were capturing the "miracle of it all" (which is "more fantastic than a fantasy story" :) :
"""
THE DNA Molecule
is The Nude Descending a Staircase,^^1^^
a circular one.
[...]
She is descending and at the same
time ascending and she moves around herself.
[...]
The Nude named DNA can be constructed
as a model with matches and a ribbon of tape.
[...]
Make your model as high as the Empire State Building
and you have an acceptable replica of the Nude.
But (and this is harder) you must make her move
in a continuous coil,
and you must make her increase
while at the same time occupying the same field.
She must be made to maintain "a basic topography”
changing yet remaining stable,
if she is to perform her functions which
is to produce and reproduce the microsphere.
Such a sphere is invisible to, but omnipresent in,
the naked eye of The Nude.
[...]
The Nude has “the capacity for replication
and transcription” of all genesis.
She ingests and regurgitates
the genetic material, it being the material of her own cell-self.
From single she becomes double, and from double single.
[...]
So from single to double and double to single and,
mounting while descending, she expands while contracts,
she proliferates while disappearing,
at both of her ends.
[...]
"""
As I said, Unbelievable!
----
^^1^^ is it in reference to [[Marcel Duchamp's Nude Descending a Staircase" drawing|https://www.khanacademy.org/humanities/art-1010/wwi-dada/dada1/a/marcel-duchamp-nude-descending-a-staircase-no-2]]?
The dragons! The dragons are avaricious, insatiable, treacherous; without pity, without remorse. But are they evil? Who am I, to judge the acts of dragons? . . . They are wiser than men are. It is with them as with dreams. We men dream dreams, we work magic, we do good, we do evil. The dragons do not dream. They are dreams. They do not work magic: it is their substance, their being. They do not do; they are.
: -- Archmage Sparrowhawk. From [[Ursula K. Le Guin]]'s book //The Farthest Shore// (part 3 of the Earthsea Series)
(see what [[G. K. Chesterton]] had to [[say about dragons|Fairy tales are not true. They are more than true. Not because they tell us that dragons exist, but because they tell us that dragons can be defeated.]]).
The early bird gets the worm, but the early worm gets the late bird.
See also [[The early bird gets the worm, but the second mouse gets the cheese.]]
The early bird gets the worm, but the second mouse gets the cheese.
See also [[The early bird gets the worm, but the early worm gets the late bird.]]
Must science come to an end? Not necessarily. But unless scientists become more philosophically sophisticated, their apologetics will continue to ring hollow. And unless our educational system focuses more on teaching students how to think than on what to think, our populace will become increasingly credulous.
Scientists and educators alike need to realize that ''the educated person is not the person who can answer the questions, but the person who can question the answers.''
In our age of rapidly changing information, knowing how to distinguish truth from falsity is more important than knowing what was once considered true and false. Only a person who knows the difference between a justified and an unjustified belief can truly appreciate the value of scientific inquiry.
: ― Theodore Schick Jr., in [[The Skeptical Inquirer, March/April, 1997|https://skepticalinquirer.org/1997/03/the_end_of_science/]] and also [["The End of Science?" (on GD)|https://docs.google.com/document/d/1brXPQ8nFjYreov84ZlZZv9nOqf9js5tsH_D1y7GpOdw/edit?usp=sharing]].
The emotional interpretations of such [[anomalous events|https://www.scientificamerican.com/article/anomalous-events-that-can-shake-one-s-skepticism-to-the-core/]] grant them significance regardless of their causal account. And if we are to take seriously the scientific credo to keep an open mind and remain agnostic when the evidence is indecisive or the riddle unsolved, we should not shut the doors of perception when they may be opened to us to marvel in the mysterious.
:-- from the article "Anomalous Events That Can Shake One’s Skepticism to the Core -- I just witnessed an event so mysterious that it shook my skepticism" in [[Scientific American 311, 4, 97 (October 2014)|https://www.scientificamerican.com/article/anomalous-events-that-can-shake-one-s-skepticism-to-the-core/]]
In case readers of the article misinterpret his beliefs/position, [[Michael Shermer]] [[clarified it later|https://whyevolutionistrue.com/2014/12/04/shermer-has-a-woo-experience-admits-there-may-be-something-to-it/]]:
> My skepticism is in fine shape.
> Hopefully [[this clarification|https://michaelshermer.com/tag/paranormal/]] will clear up matters. I guess if I had to sum it up even briefer it would be this: Weird things happen. We can’t explain everything. Enjoy the experience. But don’t abandon science or the natural worldview.
Or said a bit differently on his website:
> Until such time when science can explain even the most spectacularly unlikely events, what should we do with such stories? Enjoy them. Appreciate their emotional significance. But we do not need to fill in the explanatory gaps with gods or any such preternatural forces. We can’t explain everything, and it’s always okay to say “I don’t know” and leave it at that until a natural explanation presents itself. Until then, revel in the mystery and drink in the unknown. It is where science and wonder meet.
[openness] [mysticism] [supernatural] [skepticism]
''The End and the Beginning'' - by Wisława Szymborska
Translated by Joanna Trzeciak
"""
After every war
someone has to clean up.
Things won’t
straighten themselves up, after all.
Someone has to push the rubble
to the side of the road,
so the corpse-filled wagons
can pass.
Someone has to get mired
in scum and ashes,
sofa springs,
splintered glass,
and bloody rags.
Someone has to drag in a girder
to prop up a wall.
Someone has to glaze a window,
rehang a door.
Photogenic it’s not,
and takes years.
All the cameras have left
for another war.
We’ll need the bridges back,
and new railway stations.
Sleeves will go ragged
from rolling them up.
Someone, broom in hand,
still recalls the way it was.
Someone else listens
and nods with unsevered head.
But already there are those nearby
starting to mill about
who will find it dull.
From out of the bushes
sometimes someone still unearths
rusted-out arguments
and carries them to the garbage pile.
Those who knew
what was going on here
must make way for
those who know little.
And less than little.
And finally as little as nothing.
In the grass that has overgrown
causes and effects,
someone must be stretched out
blade of grass in his mouth
gazing at the clouds.
"""
[remembering] [memory] [human behavior] [learning from history] [generations] [young and old]
Stanislaw Baranczak, a long-time translator of [[her's|Wislawa Szymborska]], writes about this poem in [[an article titled "The Reluctant Poet" in the NYT|https://www.nytimes.com/1996/10/27/books/the-reluctant-poet.html]]:
It opens with a statement that sounds so disarmingly trivial that it seems not to contain any revelation at all.
Yet the naive question implied in this poem concerns no less pressing an issue than the meaning of human history or perhaps the senselessness of it. What makes this poem typically Szymborskian is that its initial naivete almost imperceptibly moves to another plane. The action of cleaning up the mess turns, by metaphoric equation, into the process of forgetting. Just as you must remove the rubble after the war, you must remove the remembrance of human evil; otherwise, the burden of living would be unbearable. But this means that we never learn from history. Our ability to forget makes us, at the same time, repeatedly commit the same tragic blunders.
(compare to what [[Thomas Pynchon]] had to say about [[history repeating itself|What goes around may come around, but it never ends up exactly the same place, you ever notice? Like a record on a turntable, all it takes is one groove's difference and the universe can be on into a whole 'nother song.]] )
The English language is like London: proudly barbaric yet deeply civilised, too, common yet royal, vulgar yet processional, sacred yet profane. Each sentence we produce, whether we know it or not, is a mongrel mouthful of Chaucerian, Shakespearean, Miltonic, Johnsonian, Dickensian and American. Military, naval, legal, corporate, criminal, jazz, rap and ghetto discourses are mingled at every turn.
The French language, like Paris, has attempted, through its Academy, to retain its purity, to fight the advancing tides of Franglais and international prefabrication. English, by comparison, is a shameless whore.
: ― From [[his|Stephen Fry]] book //The Ode Less Travelled: Unlocking the Poet Within//
[evocative imagery] [descriptive]
The enormous usefulness of mathematics in the natural sciences is something bordering on the mysterious and there is no rational explanation for it.
The miracle of the appropriateness of the language of mathematics for the formulation of the laws of physics is a wonderful gift which we neither understand nor deserve.
It is difficult to avoid the impression that a miracle confronts us here, quite comparable in its striking nature to the miracle that the human mind can string a thousand arguments together without getting itself into contradictions or to the two miracles of the existence of laws of nature and of the human mind's capacity to divine them.
...most people find that soon after beginning to pay attention...without ever knowing it, they are gone, lost in their thoughts.
This is not bad. It's just the way it is. The eye sees. The ear hears. The mind thinks. Thoughts are not the enemy, and the mind can be trained.
[listening] [observing]
The fact that modern physics, the manifestation of an extreme specialization of the rational mind, is now making contact with mysticism, the essence of religion and manifestation of an extreme specialization of the intuitive mind, shows very beautifully the unity and complementary nature of the rational and intuitive modes of consciousness; of the yang and the yin.
One hundred thousand years is pretty much an eyeblink. But two million years is not. This is, rather loosely, the length of time in which our unconscious has been organizing and directing our lives^^1^^. And without language you will note. At least for all but that recent blink.
How does it tell us where and when to scratch? We don't know. We just know that it’s good at it. But the fact that the unconscious prefers avoiding verbal instructions pretty much altogether— even where they would appear to be quite useful^^2^^ —suggests rather strongly that it doesn't much like language and even that it doesn't trust it. And why is that? How about for the good and sufficient reason that it has been getting along quite well^^3^^ without it for a couple of million years?
: -- from the article [[The Kakule Problem|https://nautil.us/the-kekul-problem-236574/]]
(compare to the Buddhist/Taoist notion by [[Lao Tsu]] inthe //Tao Teh Ching//:
> Those who know do not speak. Those who speak do not know.
)
(compare to [[Ludwig Wittgenstein]]'s [[observation on silence|What can be said at all can be said clearly; and about that of which one cannot speak, one must stay silent.]])
[understanding]
----
^^1^^ from the [[same article|https://nautil.us/the-kekul-problem-236574/]]:
> A logical place to begin would be to define what the unconscious is in the first place. To do this we have to set aside the jargon of modern psychology and get back to biology. The unconscious is a biological system before it is anything else. To put it as pithily as possibly—and as accurately—the unconscious is a machine for operating an animal. All animals have an unconscious. If they didn't they would be plants.
^^2^^ (for example :) from the [[same article|https://nautil.us/the-kekul-problem-236574/]]:
> Of the known characteristics of the unconscious its persistence is among the most notable. Everyone is familiar with repetitive dreams. Here the unconscious may well be imagined to have more than one voice: He’s not getting it, is he? No. He’s pretty thick. What do you want to do? I don't know. Do you want to try using his mother? His mother is dead. What difference does that make?
^^3^^ from the [[same article|https://nautil.us/the-kekul-problem-236574/]]:
Apart from its great antiquity the picture-story mode of presentation favored by the unconscious has the appeal of its simple utility. A picture can be recalled in its entirety whereas an essay cannot. Unless one is an Asperger’s case.
The farther backward you can look, the farther forward you are likely to see.
<<comparequote "Robert Penn Warren" "The asking and the answering which history provides may help us to understand, even to frame, the logic of experience to which we shall submit. History cannot give us a program for the future, but it can give us a fuller understanding of ourselves, and of our common humanity, so that we can better face the future." "history and vision">>
''The First Noble Truth - The Truth of Suffering''
The First Noble Truth simply says that suffering occurs. It does not say, “Life is suffering.”
That suffering occurs perhaps does not seem a particularly profound statement. Suffering comes with being human. Pain is a part of the human condition.
In the context of the Four Noble Truths, we can distinguish between inevitable suffering (actually/AKA "pain") and optional suffering ("anguish"). Optional suffering is created when we react to our experience (pain).
Or as Barbara Johnson said:
> There's only one way to deal with misery...I say Avoid it.
<<comparequote "Virgil" "There are tears in the nature of things, and death affects the mind." "pain and suffering">>
Our primary or innate awareness, our feeling of being alive, of just being here, doesn’t age.
It is as bright as always, like a candle flame that puts out steady light, whether the candle is new, half gone, or almost out.
[...]
The trick is to pay attention to the flame, and not the candle. ''The flame of a candle half gone may burn just as it did at the beginning, but by now it has burned longer, and it knows something about burning.'' Innate awareness never ages, though the body does, and maturity and wisdom is the compensation for what time eases from our grasp.
From [[Lewis Richmond's blog|http://www.lewisrichmond.com/the-candle-flame-burns-just-as-brightly/]]
"""
The royal feast was done; the King
Sought some new sport to banish care,
And to his jester cried: "Sir Fool,
Kneel now and make for us a prayer!
The jester doffed his cap and bells,
And stood the mocking court before;
They could not see the bitter smile
Behind the painted grin he wore.
He bowed his head and bent his knee
Upon the monarch's silken stool;
His pleading voice arose: "O Lord,
Be merciful to me, a fool!
"No pity, Lord, could change the heart
From red with wrong to white as wool;
The rod must heal the sin: but, Lord,
Be merciful to me, a fool!
" 'Tis not by guilt the onward sweep
Of truth and right, O Lord, we stay;
'Tis by our follies that so long
We hold the earth from heaven away.
"These clumsy feet, still in the mire,
Go crushing blossoms without end;
These hard, well-meaning hands we thrust
Among the heart-strings of a friend.
"The ill-timed truth we might have kept -
Who knows how sharp it pierced and stung?
The word we had not sense to say -
Who knows how grandly it had rung?
"Our faults no tenderness should ask,
The chastening stripes must clense them all;
But for our blunders - oh in shame
Before the eyes of heaven we fall.
"Earth bears no balsam for mistakes;
Men crown the knave, and scourge the tool
That did his will; but Thou, O Lord,
Be merciful to me, a fool!"
The room was hushed; in silence rose
The King, and sought his gardens cool,
And walked apart, and murmured low,
"Be merciful to me, a fool!"
"""
[mercy] [grace] [tenderness] [forgiveness]
(compare to [[God grant me the serenity to accept the things I cannot change; Courage to change the things I can; And wisdom to know the difference.]] by [[Reinhold Niebuhr]])
''The Four Ages of Man''
"""
He with body waged a fight,
But body won; it walks upright.
Then he struggled with the heart;
Innocence and peace depart.
Then he struggled with the mind;
His proud heart he left behind.
Now his wars on God begin;
At stroke of midnight God shall win.
"""
[toddler, adolescent, adult, elderly]
The statistician Persi Diaconis remarked that if you look at a big enough population long enough, then "almost any damn thing will happen".
This is one version of what the British mathematician Frank Ramsey proved, which can be colloquially stated as:
> the free lunch is guaranteed to exist if the garbage dump is large enough.
The function of prayer is not to influence God, but rather to change the nature of the one who prays.
Compare to [[what Oscar Wilde had to say on prayer|Prayer must never be answered: if it is, it ceases to be prayer and becomes correspondence.]]. Are they both right?
Compare to what [[Norman Fischer had said about prayer|When we pray we see that exactly because we have made our best effort and spent ourselves in doing so, we have become sacred. He or she is sacred who come wandering in weariness in these waters, to swim, float, or sink.]], which I believe is very similar in spirit.
<<comparequote "Mason Cooley" "A sense of blessedness comes from a change of heart, not from more blessings." "gratitude">>
"""
"""
On the other hand, sometimes (especially with certain upbringing :-| it feels like [[Jose Saramago]] describes it:
> There are such moments in life, when, in order for heaven to open, it is necessary for a door to close.
The fundamental problem of communication is that of reproducing at one point either exactly or approximately a message selected at another point. Frequently the messages have meaning.
[clear communication]
Quoted in the book "The Piano Player in the Brothel - The future of journalism" by Juan Luis Cebrian:
Each day we seem to wake up to an unknown and surprising world, where everything must be built from the ground up.
In an article titled [["The Voice of the Turtle: Whatever Happened to AI?"|http://worrydream.com/refs/Lenat%20-%20Voice%20of%20the%20Turtle.pdf]], Doug Lenat writes:
>We’re now well past 2001; where is HAL? When Marvin Minsky advised Arthur C. Clarke and Stanley Kubrick, 40 years ago, it seemed that achieving a full HAL-like AI by 2001 was every bit as likely as, well, commercial Pan Am flights to the moon by 2001. As Bill Rawley said, the future is just not what it used to be.
The future is there, looking back at us. Trying to make sense of the fiction we will have become. And from where they are, the past behind us will look nothing at all like the past we imagine behind us now.
: ― Cayce (a market-research consultant) in //Pattern Recognition//
“The genius,” [[Schopenhauer|Arthur Schopenhauer]] wrote in his timeless distinction between genius and talent, “lights on his age like a comet into the paths of the planets, to whose well-regulated and comprehensible arrangement its wholly eccentric course is foreign.” Unlike the person of talent, whose work simply exceeds in excellence the work of their contemporaries and is therefore easily appreciated by them, Schopenhauer argued that person of genius produces work which differs not in mere degree of excellence but in kind of vision. It is therefore often ridiculed or, worse yet, entirely ignored by the creator’s contemporaries, to be rediscovered and appreciated only by posterity.
: -- from her blog entry titled [[William Blake’s Most Beautiful Letter: A Searing Defense of the Imagination and the Creative Spirit|https://www.brainpickings.org/2016/07/14/william-blake-john-trusler-letter/]].
The goal of science is to make the wonderful and the complex understandable and simple but not less wonderful.
(compare with Albert Einstein's [[Everything should be made as simple as possible, but not simpler.]]).
"""
It must be troubling for the god who loves you
To ponder how much happier you’d be today
Had you been able to glimpse your many futures.
It must be painful for him to watch you on Friday evenings
Driving home from the office, content with your week—
Three fine houses sold to deserving families—
Knowing as he does exactly what would have happened
Had you gone to your second choice for college,
Knowing the roommate you’d have been allotted
Whose ardent opinions on painting and music
Would have kindled in you a lifelong passion.
A life thirty points above the life you’re living
On any scale of satisfaction. And every point
A thorn in the side of the god who loves you.
You don’t want that, a large-souled man like you
Who tries to withhold from your wife the day’s disappointments
So she can save her empathy for the children.
And would you want this god to compare your wife
With the woman you were destined to meet on the other campus?
It hurts you to think of him ranking the conversation
You’d have enjoyed over there higher in insight
Than the conversation you’re used to.
And think how this loving god would feel
Knowing that the man next in line for your wife
Would have pleased her more than you ever will
Even on your best days, when you really try.
Can you sleep at night believing a god like that
Is pacing his cloudy bedroom, harassed by alternatives
You’re spared by ignorance? The difference between what is
And what could have been will remain alive for him
Even after you cease existing, after you catch a chill
Running out in the snow for the morning paper,
Losing eleven years that the god who loves you
Will feel compelled to imagine scene by scene
Unless you come to the rescue by imagining him
No wiser than you are, no god at all, only a friend
No closer than the actual friend you made at college,
The one you haven’t written in months. Sit down tonight
And write him about the life you can talk about
With a claim to authority, the life you’ve witnessed,
Which for all you know is the life you’ve chosen.
"""
: -- from his book //Practical Gods//
(Compare to [[The Road Not Taken]] by [[Robert Frost]]).
The good life is one inspired by love and guided by knowledge.
Knowledge and love are both indefinitely extensible; therefore, however good a life may be, a better life can be imagined.
Neither love without knowledge, nor knowledge without love can produce a good life.
<<comparequote "Arthur C. Clarke" "In my life I have found two things of priceless worth – learning and loving. Nothing else – not fame, not power, not achievement for its own sake – can possibly have the same lasting value. For when your life is over, if you can say ‘I have learned’ and ‘I have loved,’ you will also be able to say ‘I have been happy’." "The Good Life">>
The GPS in my car never gets mad at me, no matter how many times I turn to avoid the torn-up, under construction, street she has recommended. She just says, “Recalculating” and directs me to turn right, and then right again, until I am back where she wanted me—on the street blocked by construction.
Again I select an alternative route. She quietly but firmly repeats, “Recalculating,” and I say back, “Hold on. Keep talking if you want. I know where I’m going. I’ll soon be where you want me to be.” When I finally rejoin the route she was aiming for, I almost expect her to say, “Good girl, Sylvia! You did it,” but she never does. We drive together quietly until the next time I need to disobey her instructions and she is right there again, firm but never impatient, ready to straighten me out.
I am trying to cultivate a mind like a GPS. My mind GPS would be ever vigilant to where I am and unwavering in clarity about my destination, all the while never losing its patience and never challenging my confidence.
My mind GPS would help me choose, moment to moment, the route that cultivates and maintains wholesome states in my mind. Any detour would immediately initiate a warning signal: “Leading to Unwholesome! Slow down! Consider! Maybe you need to back up! Or turn around!”
: -- from [[The GPS of the Mind|https://www.lionsroar.com/gps-of-the-mind-march-2014/]]
[recalibrating] [equanimity]
Or as [[Stanislaw Lem]] wrote in his book "//Return From the Stars//":
> I had noticed that I had no difficulty conversing with robots, because absolutely nothing surprised them. They were incapable of surprise. A very sensible quality.
The great challenge of adulthood is holding on to your idealism after you lose your innocence.
The great source of both the misery and disorders of human life, seems to arise from over-rating the difference between one permanent situation and another. Avarice over-rates the difference between poverty and riches: ambition, that between a private and a public station: vain-glory, that between obscurity and extensive reputation. The person under the influence of any of those extravagant passions, is not only miserable in his actual situation, but is often disposed to disturb the peace of society, in order to arrive at that which he so foolishly admires. The slightest observation, however, might satisfy him, that, in all the ordinary situations of human life, a well-disposed mind may be equally calm, equally cheerful, and equally contented. Some of those situations may, no doubt, deserve to be preferred to others: but none of them can deserve to be pursued with that passionate ardour which drives us to violate the rules either of prudence or of justice; or to corrupt the future tranquillity of our minds, either by shame from the remembrance of our own folly, or by remorse from the horror of our own injustice.
from "The Theory of Moral Sentiments"
The great use of ones life is to spend it for something that outlasts it.
While regular practice might include mindless repetitions, deliberate practice requires focused attention and is conducted with the specific goal of improving performance.
''The greatest challenge of deliberate practice is to remain focused. In the beginning, showing up and putting in your reps is the most important thing. But after a while we begin to carelessly overlook small errors and miss daily opportunities for improvement.
This is because the natural tendency of the human brain is to transform repeated behaviors into automatic habits''^^1^^.
: -- from [[his|James Clear]] blog post [["The Beginner’s Guide to Deliberate Practice"|https://jamesclear.com/beginners-guide-deliberate-practice]]
----
^^1^^ See what [[Alfred North Whitehead]] had to say about [[automating behavior|It is a profoundly erroneous truism, repeated by all the copybooks, and by eminent people when they are making speeches, that we should cultivate the habit of thinking what we are doing. The precise opposite is the case...]].
[deliberate practice] [meditation]
The greatest sign of success for a teacher... is to be able to say, 'The children are now working as if I did not exist.'
(Compare with [[Lao Tzu's take on leadership|A leader is best When people barely know he exists Of a good leader, who talks little, When his work is done, his aim fulfilled, They will say, “We did this ourselves.”]]).
The greatest thing a human soul ever does in this world is to see something and tell what it saw in a plain way. Hundreds of people can talk for one who can think but thousands can think for one who can see! To see clearly is poetry, prophecy and possibility – all in one.
(see what [[Jeanette Winterson]] had to [[say about poetry|A tough life needs a tough language – and that is what poetry is. That is what literature offers – a language powerful enough to say how it is. It isn’t a hiding place. It is a finding place.]]).
The greatest weapon against stress is our ability to choose one thought over another.
The hard thing when you get old is to keep your horizons open. The first part of your life everything is in front of you, all your potential and promise. But over the years, you make decisions, you carve yourself into a given shape. Then the challenge is to keep discovering the green growing edge.
The most valuable skill of a successful entrepreneur … isn’t “vision” or “passion” or a steadfast insistence on destroying every barrier between yourself and some prize you’re obsessed with. Rather, it’s the ability to adopt an unconventional approach to learning: an improvisational flexibility not merely about which route to take towards some predetermined objective, but also a willingness to change the destination itself. This is a flexibility that might be squelched by rigid focus on any one goal.
: -- as [[covered in BrainPickings|https://www.brainpickings.org/2014/02/05/oliver-burkeman-antidote-plans-uncertainty/]]
"""
The heights by great men reached and kept
Were not achieved by sudden flight,
But they, while their companions slept,
Were toiling upward in the night.
"""
- often quoted by Winston Churchill
- compared to [[Einstein's saying on perseverance|It’s not that I’m so smart; it’s just that I stay with problems longer.]]
The highest form of love is the love that allows for intimacy without the annihilation of difference.
:― from his book //The Courage to Teach: Exploring the Inner Landscape of a Teacher's Life//
(Or as [[Kahlil Gibran]] described [[healthy love and intimacy|The oak tree and the cypress grow not in each other's shadow.]]).
The highest reward for a person's toil is not what they get for it, but what they become by it.
The horrific struggle to establish a human self results in a self whose humanity is inseparable from the horrific struggle. That our endless and impossible journey toward home is in fact our home.
[return]
It is uncontroversial that the human brain has capabilities that are, in some respects, far superior to those of all other known objects in the cosmos. ''It is the only kind of object capable of understanding that the cosmos is even there, or why there are infinitely many prime numbers, or that apples fall because of the curvature of space-time, or that obeying its own inborn instincts can be morally wrong, or that it itself exists.'' Nor are its unique abilities confined to such cerebral matters.
The cold, physical fact is that it is the only kind of object that can propel itself into space and back without harm, or predict and prevent a meteor strike on itself, or cool objects to a billionth of a degree above absolute zero, or detect others of its kind across galactic distances.
But no brain on Earth is yet close to knowing what brains do in order to achieve any of that functionality.
: -- from [["Creative blocks - The very laws of physics imply that artificial intelligence must be possible. What’s holding us up?"|https://aeon.co/essays/how-close-are-we-to-creating-artificial-intelligence]] by [[David Deutsch]]
The Humanities, and especially, art and literature, can help us walk through the soul of others.
The I Ching teaches us: acceptance. It essentially advances this lesson: if we want to use chance operations, then we must accept the results. We have no right to use it if we are determined to criticize the results and to seek a better answer. In fact, the I Ching promises a completely sad lot to anyone who insists on getting a good answer. If I am unhappy after a chance operation, if the result does not satisfy me, by accepting it I at least have the chance to modify myself, to change myself. But if I insist on changing the I Ching, then it changes rather than I, and I have gained nothing, accomplished nothing!
The idea of transmigration is this: After death, the soul migrates from one body to another, celestial, human, animal or vegetative.
[...]
The idea of transmigration has a certain appeal to the imaginative mind if one is not too critical or scientific...
[...]
I do not know whether transmigration can be proved or maintained on the scientific level, but I know that it is an inspiring theory and full of poetic suggestions, and I am satisfied with this interpretation and do not seem to have any desire to go beyond it. To me, the idea of transmigration has a personal appeal, and as to its scientific and philosophical implications, I leave it to the study of the reader.
: from D.T. Suzuki's book [[Mysticism, Christian and Buddhist|https://terebess.hu/zen/mesterek/d-t-suzuki-mysticism-christian-and-buddhist.pdf]].
"""
"""
In [[an interview, Huston Smith|https://www.inquiringmind.com/article/2202_20_heng-sure_houston-smith/]] tells the anecdote about someone asking [[Ram Dass|https://www.ramdass.org/bio/]] whether he believed in reincarnation:
>Without batting an eye, Ram Dass said, “It’s there when I need it.”
>
and Huston Smith continues:
>I think that’s a wonderful answer, and I would say the same. Philosophically, there is no other answer to the problem of evil that rivals reincarnation.
"""
"""
Compare to [[Wes Nisker's take|A belief in reincarnation would at least give us some slack; we would have many lifetimes to get it right.]]
[[Rippling|https://www.psychotherapy.net/article/staring-at-the-sun#section-rippling-in-action]] refers to the fact that each of us creates— often without our conscious intent or knowledge—concentric circles of influence that may affect others for years, even for generations. That is, the effect we have on other people is in turn passed on to others, much as the ripples in a pond go on and on until they're no longer visible but continuing at a nano level.
The idea that we can leave something of ourselves, even beyond our knowing, offers a potent answer to those who claim that meaninglessness inevitably flows from one's finiteness and transiency.
Or, as [[Douglas Hofstadter]] had written:
> The key question is, no matter how much you absorb of another person, can you have absorbed so much of them that when that primary brain perishes, you can feel that that person did not totally perish from the earth... because they live on in a 'second neural home'?... In the wake of a human being's death, what survives is a set of afterglows, some brighter and some dimmer, in the collective brains of those who were dearest to them...
>Though the primary brain has been eclipsed, there is, in those who remain... a collective corona that still glows.
But (and!) even this corona will fade and disappear.
(see what [[Phil Stutz]] observes about [[taking and giving|You can't really take in life, you can only really give.]])
(see also what [[Vernon Jordan]] had said [[about taking and giving and living forever|You are where you are today because you stand on somebody’s shoulders. And wherever you are heading, you cannot get there by yourself. If you stand on the shoulders of others, you have a reciprocal responsibility to live your life so that others may stand on your shoulders. It’s the quid pro quo of life. We exist temporarily through what we take, but we live forever through what we give.]]).
(See [[Marilynne Robinson]]'s take on [[our long term effects on life and the living|We will be judged twice, once when we die and once when everything we have said or done has had its final effect.]]).
[parenting] [legacy]
The illiterate of the 21st century will not be those who cannot read and write, but those who cannot learn, unlearn, and relearn.
This is quoted in the article titled [[The Metaskills You Need to Thrive in the 21st Century|https://liberationist.org/the-metaskills-you-need-to-thrive-in-the-21st-century/]]
by Gustavo Razzetti, where he also defines a metaskill:
> a meta-skill is a master skill that magnifies and activates other skills. It is a high order skill that allows you to engage with functional expertise more effectively. It’s a catalyst for learning and building new skills faster.
[work] [professionalism]
The imagination is the true fire, stolen from heaven, to animate this cold creature of clay, producing all those fine sympathies that lead to rapture, rendering men social by expanding their hearts.
:: -- from [[her letter to her (unreciprocating) lover|https://www.brainpickings.org/2017/01/18/mary-wollstonecraft-imagination-letters/]]
Reminds me of a few things Albert Einstein said about imagination:
* Logic will get you from A to B, imagination will take you everywhere.
* The true sign of intelligence is not knowledge but imagination.
* Imagination is everything. It is the preview of life’s coming attractions.
* Imagination is more important than knowledge. For knowledge is limited to all we now know and understand, while imagination embraces the entire world, and all there ever will be to know and understand.
The "Media Ecologist" (and NYU professor) [[Neil Postman]] was mainly concerned with the media and their influence/impact on culture and education. Here he refers to the "Information Glut" we are suffering from nowadays, but he brings up an idea that is very related/relevant/connected to Dr. [[David Passig|https://en.wikipedia.org/wiki/David_Passig]]'s idea and urge to come up with "Brit Yeud" (what do we envision/want in the future), (and on top of it, he quotes [[Edna St. Vincent Millay]]'s [[poem|Sonnet X from Huntsman, What Quarry? - poem by Edna St. Vincent Millay]] which I quoted in my MA project at Stanford so I was sold right there :) :
"""
Upon this gifted age, in its dark hour,
Rains from the sky a meteoric shower
Of facts . . . they lie unquestioned, uncombined.
Wisdom enough to leech us of our ill
Is daily spun, but there exists no loom
To weave it into fabric.
"""
What we are facing, then, is a series of interconnected delusions, [... ending with] the most serious delusion of all: that it is possible to live without a loom to weave our lives into fabric, that is to say, without a transcendent narrative.
I use the word narrative as a synonym for “god,” with a small “g.” I know it is risky to do so, not only because the word “god,” having an aura of sacredness, is not to be used lightly, but also because it calls to mind a fixed figure or image. But it is the purpose of such figures or images to direct one’s mind to an idea and, more to my point, to a story. Not any kind of story but one that tells of origins and envisions a future; a story that constructs ideals, prescribes rules of conduct, provides a source of authority, and above all, gives a sense of continuity and purpose. A god, in the sense I am using the word, is the name of a great narrative, one that has sufficient credibility, complexity, and symbolic power so that it is possible to organize one’s life around it.
-- [[Neil Postman]] at [[https://www.firstthings.com/article/1997/01/science-and-the-story-that-we-need]]
[culture] [civilization] [society] [values]
In [[Donald Knuth]]'s book [[Things a Computer Scientist Rarely Talks About|https://en.wikipedia.org/wiki/Things_a_Computer_Scientist_Rarely_Talks_About]]:
I am sure that the promise of heaven was very important to me when I was growing up. But I remember being happy to realize, maybe 20 years ago, that heaven was no longer a big deal for me. I am extremely glad that God has something in mind for me in the future, whatever it is, and I trust that it will be the right thing; maybe the computers in heaven will be really terrific, and maybe I'll be able to continue doing mathematical research and font design. But the prospect of heaven has basically nothing to do with why I go to church every day.
The important thing to me [...] is not the destination, but the journey^^1^^. Philippians 3:16 expresses it well:
> "Meanwhile, let us keep in step with the pace we have set".
[...]
How great it is to be alive and going somewhere!
[Instead of biking to work and back home every day] I could take the "T" (public train in Boston) and get to my apartment a lot faster, but I wouldn't see the beautiful Charles River and all the other things that make life worthwhile.
----
^^1^^ or as [[Alan Kay]] (another "[[CS Sage|https://en.wikipedia.org/wiki/List_of_computer_scientists]]") once said:
> Understanding — like civilization, happiness, music, science and a host of other great endeavors — is not a state of being, but a manner of traveling.
One of the things I know about writing is this: spend it all, shoot it, play it, lose it, all, right away, every time. Do not hoard what seems good for a later place in the book or for another book; give it, give it all, give it now. The impulse to save something good for a better place later is the signal to spend it now. Something more will arise for later, something better. These things fill from behind, from beneath, like well water.
Similarly, the impulse to keep to yourself what you have learned is not only shameful, it is destructive. Anything you do not give freely and abundantly becomes lost to you. You open your safe and find ashes.
: ― from [[her|Annie Dillard]] book //"The Writing Life"//
[generosity] [giving]
In our personal life we often cling to illusions. That is, we do not dare to examine certain beliefs which could be easily contradicted by experience, because we are afraid of upsetting our emotional balance. There may be circumstances in which it is not unwise to cling to illusions, but in science we need a very different attitude, the inductive attitude. This attitude aims at adapting our beliefs to our experience as efficiently as possible. It requires a certain preference for what is matter of fact. It requires a ready ascent from observations to generalizations, and a ready descent from the highest generalizations to the most concrete observations. It requires saying "maybe” and “perhaps” in a thousand different shades. It requires many other things, especially the following three.
* First, we should be ready to revise any one of our beliefs.
* Second, we should change a belief when there is a compelling reason to change it.
* Third, we should not change a belief wantonly, without some good reason.
These points sound pretty trivial. Yet one needs rather unusual qualities to live up to them.
The first point needs ''“intellectual courage."'' You need courage to revise your beliefs.
The second point needs ''“intellectual honesty.”'' To stick to my conjecture that has been clearly contradicted by experience just because it is my conjecture would be dishonest.
The third point needs ''"wise restraint.”'' To change a belief without serious examination, just for the sake of fashion, for example, would be foolish.
Yet we have neither the time nor the strength to examine seriously all our beliefs. Therefore it is wise to reserve the day's work, our questions, and our active doubts for such beliefs as we can reasonably expect to amend. ''"Do not believe anything, but question only what is worth questioning."''
Intellectual courage, intellectual honesty, and wise restraint are the moral qualities of the scientist.
: -- from [[his|George Polya]] book "//Mathematics and Plausible Reasoning//"
So close — the infinitesimal and the infinite. But suddenly, I knew they were really the two ends of the same concept. The unbelievably small and the unbelievably vast eventually meet — like the closing of a gigantic circle.
I looked up, as if somehow I would grasp the heavens. The universe, worlds beyond number, God's silver tapestry spread across the night. And in that moment, I knew the answer to the riddle of the infinite. I had thought in terms of man's own limited dimension. I had presumed upon nature. That existence begins and ends in man's conception, not nature's.
And I felt my body dwindling, melting, becoming nothing. My fears melted away. And in their place came acceptance. All this vast majesty of creation, it had to mean something. And then I meant something, too. Yes, smaller than the smallest, I meant something, too.
To God [and in physics], there is no zero. I still exist!
: -- from his book //The Incredible Shrinking Man// (also a 1957 science fiction film)
Success is not something that we do or that happens to us. Success is something that happens through us.
We inherit, starting even before we are born, a great river of knowledge, a great flow from many ages and many sources.
The information that comes from millions of years ago, we call brain chemistry.
The information that comes from hundreds of thousands of years ago from our hunter and gatherer ancestors we call genes.
The information that was handed down thousands of years ago we call religion.
The information passed along hundreds of years ago we call culture. The information passed along from decades ago we call family.
The information you absorbed over the past few years [in college] we call education.
: -- from his [[commencement speech at Wake Forest University (2007)|https://commencement.news.wfu.edu/2000s/c2007/2007-speaker-david-brooks/]]
[meaning]
The inner spaces that a good story lets us enter are the old apartments of religion.
Reminds me of the TED Talk by [[Alain de Botton]] about [[what religion can teach us|https://www.ted.com/talks/alain_de_botton_atheism_2_0/transcript]] (or "What Can Atheism Learn From Religion?").
and also
<<comparequote "Alain de Botton" "atheists should learn to inform themselves about what religions are up to and then selectively steal the best bits." "learning from religions">>
[literature]
Activism’s includes traditional forms of advocacy and protest; but far more than that, it is any concern that holds political or social results as the central goal. Activism in this broad sense rules the day in contemporary higher education.
Activism reaches far beyond progressivism. Conservatives, too, use academic institutions to wield social and political influence, and activism is often nonpartisan. Partisan politics on campus generates strong emotions, but no one is outraged by the assumption that political and social goods are paramount.
But the world is improved by many types of enterprise not learned at a university, and there is much taught at a university that is not socially transformative.
Activism is crucial for social and political functioning, and some professional training is sometimes necessary for some forms of it. As such it has some place at institutions that provide training in the professions. But its conquest of the whole of intellectual life—and thus the whole enterprise of higher education—must be resisted.
To justify intellectual activity in terms of its economic and political benefits, as do contemporary defenders of the humanities and liberal education, might seem banal or beside the point. But it is worse than that: such defenses are false and destructively so. For intellectual life to provide the human benefit it provides, it must be in fact withdrawn from considerations of economic benefit or from social and political efficacy. This is in part because, as the little human things testify, a human being is more than an instrument of personal or public benefit. Intellectual life is a source of human dignity exactly because it is something beyond politics and social life. But withdrawal from the world is also necessary because intellectual life is an ascetic practice.
Human beings need to be reminded that they are more than vehicles of social utility. They need to set aside considerations of utility to see how things really are. But they also need to connect with one another in terms of a shared good.
''The intellectual realm is a place of wonder, awe, and insight; a place of deep realities beyond the "small utilities" of ordinary life; and a place where what it means to be a human being is sought out, with however much difficulty and facing however many illusions. It's where awe lives and opinions go to die.''
University teaching is increasingly a high-wire act where one keeps a large room of students entertained and adequately graded while trying to carve out a bit of space to pass on to the few and interested the things one really cares about. In the search for measurable outcomes and results, we drive the human factor out of teaching and send young scholars to churn out article after article, book after book, as if the purpose of publication lay in numbers of pages rather than in the continued pursuit of understanding. The growing class of adjuncts is not an outlier but an emblem of the contemporary academic world: the subjection of the human being to measures of outcomes, measures that fail to mask the swift decrease in the ability of colleges and universities to meet the human needs of teachers and students alike.
: -- from [[her|Zena Hitz]] essay [["Why Intellectual Work Matters"|https://isi.org/wp-content/uploads/2017/07/MA59.3_Hitz_SymposiumEssay.pdf?x66229]]
[human flourishing]
Based on personal experience (and multiple data points :(
Optics' inverse law: the more expensive the glasses, the quicker they get scratched.
The inverse (ha!) is also true: the cheaper the glasses, the longer they last.
Variations:
* the higher the price of the glasses, the higher the weight that crushes them (when you, or someone else, accidentally sit on them)
* the cheaper the glasses, the longer it takes to lose them (AKA the 'losslessness' property of the optics involved)
Corollary/universality:
* this law applies to both prescription eye glasses, //and// sunglasses.
''First and second innocence''
The clown breaks the rules of social convention not because she doesn’t see them, but more because she sees right through them. She plays subversively back and forth across the boundaries of what’s “normal”. She’s naïve and knowing at the same time. She is innocent and experienced. She knows and lives by the rules and she transgresses them.
[...]
The kind of knowing innocence the clown possesses might be called a “second” innocence, one that is learned through the experience of living life, warts and all.
: -- from his paper [[THOUGHTS ON SUSTAINABILITY: The Fool and the Great Turning|http://www.wildmargins.com/Artful_Knowing_files/TheFoolAndTheGreatTurning.pdf]]
The larger the island of knowledge, the longer the shoreline of wonder.
Or as [[Marcelo Gleiser]] wrote in his book [[The Island of Knowledge|https://marcelogleiser.com/books/the-island-of-knowledge]]:
> As our island of knowledge grows, so do the shores of our ignorance.
(see also [[Tiago Forte]] on [[Save and savor contradictory ideas]]).
But also/maybe
The further one goes, the less one knows.
:: ― Lao Tzu, Tao Te Ching
<<comparequote "David Epstein" "How can frontiers be pushed, if one day it will take a lifetime just to reach them in every specialized domain? If this Big Bang of public knowledge keeps apace, subspecialties would be like galaxies, flying away from one another until each is invisible to every other." "knowledge explosion">>
<<comparequote "Maria Popova" "The contour of what we know is a mere silhouette cast by the infinite light of the unknown against the screen of the knowable." "learning and knowledge">>
And for a possible remedy/way out:
<<comparequote "Alfred North Whitehead" "It is a profoundly erroneous truism, repeated by all the copybooks, and by eminent people when they are making speeches, that we should cultivate the habit of thinking what we are doing. The precise opposite is the case..." "automation for efficiency">>
Das letzte Hemd hat keine Taschen.
(The last shirt has no pockets.)
You can't take it with you (Money isn't everything.).
Compare with [[And tomorrow, what shall tomorrow bring to the overprudent dog burying bones in the trackless sand as he follows the pilgrims to the holy city?]]
Keep your eye fixed on the way to the top, but don't forget to look right in front of you.
The last step depends on the first... but also, The first step depends on the last.
: ― from [[his|René Daumal]] book "//Mount Analogue//"
[ambition] [determination] [goals]
On December 14 at 5:54:37 p.m. EST, humans left the moon for what would turn out to be the last time.
The commander of the Apollo 17 mission, Gene Cernan, had said:
> As I take man's last step from the surface, back home for some time to come (but we believe not too long into the future), I'd like to just say what I believe history will record: That America's challenge of today has forged man's destiny of tomorrow. And, as we leave the Moon at Taurus-Littrow, we leave as we came and, God willing, as we shall return: with peace and hope for all mankind.
But, according to Apollo 7 astronaut Walter Cunningham in his book The All-American Boys, Cernan's final words on the moon were: "Let's get this mother out of here." (Or as [[Miles O'Brien spells it|http://boingboing.net/2012/12/14/we-left-the-moon-40-years-ago.html]], awesomely, "let's get this mutha.")
But, but, the "outta here" thing is likely, alas, apocryphal. According to NASA's official transcript of Apollo 17's return to Earth, what Cernan actually said was in part a response to a malfunction his fellow astronaut, Jack Schmitt, was encountering with a camera: "Now, let's get off. Forget the camera."
From [[The Atlantic Magazine|http://www.theatlantic.com/technology/archive/2012/12/what-were-the-last-words-spoken-on-the-moon/266287/]]
The life expectancy of this [the clock mechanism at [[Stanford University's Clock Tower|https://en.wikipedia.org/wiki/Stanford_Clock_Tower]] ] is as long as you take care of it.
From an article about the clock tower "winders" at Stanford University.
''The Light of Interiors''
"""
The light of interiors
is the admixture
of who knows how many
doors ajar, windows
casually curtained,
unblinded or opened,
oculi set into ceilings,
wells, ports, shafts,
loose fits, leaks,
and other breaches
of surface. But, in
any case, the light,
once in, bounces
toward the interior,
glancing off glassy
enamels and polishes,
softened by the scuffed
and often-handled, muffled
in carpet and toweling,
buffeted down hallways,
baffled equally
by scatter and order
to an ideal and now
sourceless texture which,
when mixed with silence,
makes of a simple
table with flowers
an island.
"""
This reminds me of what [[Susan Moon]] had said:
> [[We are completely held by the atmosphere in a literal way...We are all connected, molecule to molecule. I'm held by everything that's not me.]]
This is also eflected in [[Sky - poem by Maggie Smith]].
The longer I live, the more I realize that real strength has much more to do with what is not seen. Real strength has to do with helping others.
From her essay [["The Lost Tools of Learning"|https://www.fadedpage.com/showbook.php?pid=20140328]]:
>For we let our young men and women go out unarmed, in a day when armour was never so necessary. By teaching them all to read, we have left them at the mercy of the printed word. By the invention of the film and the radio, we have made certain that no aversion to reading shall secure them from the incessant battery of words, words, words.
>
>They do not know what the words mean; they do not know how to ward them off or blunt their edge or fling them back; they are a prey to words in their emotions instead of being the masters of them in their intellects.
>
>We who were scandalised in 1940 when men were sent to fight armoured tanks with rifles, are not scandalised when young men and women are sent into the world to fight massed propaganda with a smattering of "subjects"; and when whole classes and whole nations become hypnotised by the arts of the spell-binder, we have the impudence to be astonished.
[...]
>the Middle Ages supposed to be the object and the right order of the educative process. The syllabus was divided into two parts; the Trivium and Quadrivium. The second part--the
>Quadrivium--consisted of "subjects," and need not for the moment concern us. The interesting thing for us is the composition of the Trivium, which preceded the Quadrivium and was the preliminary discipline for it. It consisted of three parts: Grammar, Dialectic, and Rhetoric, in that order.
[...]
>What, then, are we to do? ''We cannot go back to the Middle Ages.'' That is a cry to which we have become accustomed. We cannot go back--or can we? Distinguo [distinguish, separate, parse]. I should like every term in that proposition defined.
>Does ''Go back'' mean a retrogression in time, or the revision of an error? The first is clearly impossible per se; the second is a thing which wise men do every day.
>
>''Cannot'' -- does this mean that our behaviour is determined by some irreversible cosmic mechanism, or merely that such an action would be very difficult in view of the opposition it would provoke?
>''The Middle Ages'' -- obviously the 20th century is not and cannot be the 14th; but if "the Middle Ages" is, in this context, simply a picturesque phrase denoting a particular educational theory, there seems to be no a priori reason why we should not "go back" to it -- with modifications -- as we have already "gone back," with modifications, to, let us say, the idea of playing Shakespeare's plays as he wrote them, and not in the "modernised" versions of Cibber and Garrick, which once seemed to be the latest thing in theatrical progress.
From his poem [[On Houses|http://www.katsandogz.com/gibran/onhouses.php]]
The lust for comfort murders the passion of the soul, and then walks grinning in the funeral.
[...]
"""
Your house shall be not an anchor but a mast.
It shall not be a glistening film that covers a wound, but an eyelid that guards the eye.
You shall not fold your wings that you may pass through doors, nor bend your heads that they strike not against a ceiling, nor fear to breathe lest walls should crack and fall down.
You shall not dwell in tombs made by the dead for the living.
And though of magnificence and splendour, your house shall not hold your secret nor shelter your longing.
For that which is boundless in you abides in the mansion of the sky, whose door is the morning mist, and whose windows are the songs and the silences of night.
"""
[resting]
The main cause of incomprehensible prose is the difficulty of imagining what it’s like for someone else not to know something that you know.
Steven Pinker, in his book “The Sense of Style”
The main obstacle to progress is not ignorance but the illusion of knowledge.
Compare to [[Terry Pratchett]] who wrote (in //Equal Rites//):
> They say a little knowledge is a dangerous thing, but it is not one half so bad as a lot of ignorance.
The Many returning to and embracing the One is Good, and is known as wisdom; the One returning to and embracing the Many is Goodness, and is known as compassion.
: ― in [[his|Ken Wilber]] book //Sex, Ecology, Spirituality: The Spirit of Evolution//
[kindness]
The map is not the territory. In other words, the description of the thing is not the thing itself. The model is not reality. The abstraction is not the abstracted.
: -- from [[a blog entry in Farnam Street|https://fs.blog/2015/11/map-and-territory/]].
Sounds logical, but mathematically, as [[Alfred Korzybski]] wrote:
> An ideal map would contain the map of the map, the map of the map of the map, etc., endlessly…We may call this characteristic self-reflexiveness.
And as [[Nassim Taleb]] wrote in [[an article (about Value at risk)|https://www.fooledbyrandomness.com/jorion.html]]:
> A model might show you some risks, but not the risks of using it. Moreover, models are built on a finite set of parameters, while reality affords us infinite sources of risks.
on the other hand, as George Box and Norman Draper in their book [[Response surface methodology|http://en.wikipedia.org/wiki/Response_surface_methodology]] wrote:
> essentially, all models are wrong, but some are useful.
Or, again as [[Alfred Korzybski]] explains:
> Two important characteristics of maps should be noticed. A map is not the territory it represents, but, if correct, it has similar structure to the territory, which accounts for its usefulness.
:: -- in [[his|Alfred Korzybski]] book //Science and Sanity// (1933)
The question that the philosopher Samuel Scheffler posed (in his 2012 Tanner Lectures at Berkeley, later published in his book Death and the Afterlife):
Suppose we discovered that the world was guaranteed to be wiped out in a hundred years’ time by a nearby supernova. Or suppose that the whole human race was suddenly rendered infertile, so that no new babies could be born.
How would the certain prospect of humanity’s absolute extinction, not long after your own personal extinction, make you feel?
It would be “profoundly depressing”—so, at least, Scheffler plausibly maintains. And the reason is that ''the meaning and value of our own lives depend on their being situated in an ongoing flow of generations. Humanity’s extinction soon after we ourselves are gone would render our lives today in great measure pointless. Whether you are searching for a cure for cancer, or pursuing a scholarly or artistic project, or engaged in establishing more just institutions, a threat to the future of humanity is also a threat to the significance of what you do.'' True, there are some aspects of our lives—friendship, sensual pleasures, games—that would retain their value even in an imminent doomsday scenario. But our long-term, goal-oriented projects would be robbed of their point.
Our motivation for ensuring humanity’s survival is thus not merely moral; it is also self-interested. The value of our own lives depends on the fate of humanity after we’re gone.
Why should we care about the future of humanity after we’re gone? Not merely for moralizing reasons of a utilitarian or Platonic cast, but because our ability to lead purposeful, value-laden lives today depends on it. How much should we be willing to sacrifice today to safeguard that future? Not an unlimited amount, but enough to extend our temporal horizon sufficiently far, probabilistically speaking, so that the values we aspire to in the here and now have a hope of realization. Beyond that, safeguarding the fate of our species is the responsibility of the generations that will succeed us. We can overcome our provincialism^^1^^ about humanity’s future without becoming moral slaves to that future.
: -- from [[Jim Holt]]'s [[review of the book "The Precipice" by Toby Ord |https://www.nybooks.com/articles/2021/02/25/power-catastrophic-thinking-toby-ord-precipice/]].
----
^^1^^ [[T. S. Eliot]], in his 1944 essay [[“What Is a Classic?,”|http://bracchiumforte.com/PDFs/tseliot.pdf]] complained that a new kind of provincialism was becoming apparent in our culture: “a provincialism, not of space, but of time.” What Eliot had in mind was provincialism about the past: a failure to think of dead generations as fully real. But one can also be guilty of provincialism about the future: a failure to imagine the generations that will come after us, to take seriously our responsibilities toward them.
The humanities treat the strange properties of human nature by taking them as “just is.” With this perception as a bedrock, creative artists spin stories, make music, and create images in endless detail. The traits that define our species diagnostically appear very narrow when put against the full backdrop of biodiversity. The meaning of human existence cannot be explained until “just is" is replaced with “just is, because."
:: -- from the book [[The Meaning of Human Existence|https://www.washingtonpost.com/opinions/book-review-the-meaning-of-human-existence-by-edward-o-wilson/2014/11/14/deffe5bc-548f-11e4-809b-8cc0a295c773_story.html]] by Edward O. Wilson
The measure of a narrative’s ‘truth’ or ‘falsity’ is in its consequences: Does it provide people with a sense of personal identity, a sense of community life, a basis for moral conduct, explanations of that which cannot be known? . . . without a narrative, life has no meaning. Without meaning, learning has no purpose. Without a purpose, schools are houses of detention, not attention.
[society] [civilization]
(compare to [[Niels Bohr]]'s take on [[deep truths|The opposite of a fact is falsehood, but the opposite of one profound truth may very well be another profound truth.]])
My life has recently intersected, in a most personal way, two of Mark Twain's famous quips. One I shall defer to the end of this essay. The other (sometimes attributed to Disraeli), identifies three species of mendacity, each worse than the one before - lies, damned lies, and statistics.
Consider the standard example of stretching the truth with numbers - a case quite relevant to my story. Statistics recognizes different measures of an "average," or central tendency. The mean is our usual concept of an overall average - add up the items and divide them by the number of sharers (100 candy bars collected for five kids next Halloween will yield 20 for each in a just world). The median, a different measure of central tendency, is the half-way point. If I line up five kids by height, the median child is shorter than two and taller than the other two (who might have trouble getting their mean share of the candy). A politician in power might say with pride, "The mean income of our citizens is $15,000 per year." The leader of the opposition might retort, "But half our citizens make less than $10,000 per year." Both are right, but neither cites a statistic with impassive objectivity. The first invokes a mean, the second a median. (Means are higher than medians in such cases because one millionaire may outweigh hundreds of poor people in setting a mean; but he can balance only one mendicant in calculating a median).
The larger issue that creates a common distrust or contempt for statistics is more troubling. Many people make an unfortunate and invalid separation between heart and mind, or feeling and intellect. In some contemporary traditions, abetted by attitudes stereotypically centered on Southern California, feelings are exalted as more "real" and the only proper basis for action - if it feels good, do it - while intellect gets short shrift as a hang-up of outmoded elitism. Statistics, in this absurd dichotomy, often become the symbol of the enemy. As Hilaire Belloc wrote, "Statistics are the triumph of the quantitative method, and the quantitative method is the victory of sterility and death."
This is a personal story of statistics, properly interpreted, as profoundly nurturant and life-giving. It declares holy war on the downgrading of intellect by telling a small story about the utility of dry, academic knowledge about science. Heart and head are focal points of one body, one personality.
In July 1982, I learned that I was suffering from abdominal mesothelioma, a rare and serious cancer usually associated with exposure to asbestos. When I revived after surgery, I asked my first question of my doctor and chemotherapist: "What is the best technical literature about mesothelioma?" She replied, with a touch of diplomacy (the only departure she has ever made from direct frankness), that the medical literature contained nothing really worth reading.
Of course, trying to keep an intellectual away from literature works about as well as recommending chastity to Homo sapiens, the sexiest primate of all. As soon as I could walk, I made a beeline for Harvard's Countway medical library and punched mesothelioma into the computer's bibliographic search program. An hour later, surrounded by the latest literature on abdominal mesothelioma, I realized with a gulp why my doctor had offered that humane advice. The literature couldn't have been more brutally clear: mesothelioma is incurable, with a median mortality of only eight months after discovery. I sat stunned for about fifteen minutes, then smiled and said to myself: so that's why they didn't give me anything to read. Then my mind started to work again, thank goodness.
If a little learning could ever be a dangerous thing, I had encountered a classic example. Attitude clearly matters in fighting cancer. We don't know why (from my old-style materialistic perspective, I suspect that mental states feed back upon the immune system). But match people with the same cancer for age, class, health, socioeconomic status, and, in general, those with positive attitudes, with a strong will and purpose for living, with commitment to struggle, with an active response to aiding their own treatment and not just a passive acceptance of anything doctors say, tend to live longer. A few months later I asked Sir Peter Medawar, my personal scientific guru and a Nobelist in immunology, what the best prescription for success against cancer might be. "A sanguine personality," he replied. Fortunately (since one can't reconstruct oneself at short notice and for a definite purpose), I am, if anything, even-tempered and confident in just this manner.
Hence the dilemma for humane doctors: since attitude matters so critically, should such a sombre conclusion be advertised, especially since few people have sufficient understanding of statistics to evaluate what the statements really mean? From years of experience with the small-scale evolution of Bahamian land snails treated quantitatively, I have developed this technical knowledge - and I am convinced that it played a major role in saving my life. Knowledge is indeed power, in Bacon's proverb.
The problem may be briefly stated: What does "median mortality of eight months" signify in our vernacular? I suspect that most people, without training in statistics, would read such a statement as "I will probably be dead in eight months" - the very conclusion that must be avoided, since it isn't so, and since attitude matters so much.
I was not, of course, overjoyed, but I didn't read the statement in this vernacular way either. My technical training enjoined a different perspective on "eight months median mortality." The point is a subtle one, but profound - for it embodies the distinctive way of thinking in my own field of evolutionary biology and natural history.
We still carry the historical baggage of a Platonic heritage that seeks sharp essences and definite boundaries. (Thus we hope to find an unambiguous "beginning of life" or "definition of death," although nature often comes to us as irreducible continua.) This Platonic heritage, with its emphasis in clear distinctions and separated immutable entities, leads us to view statistical measures of central tendency wrongly, indeed opposite to the appropriate interpretation in our actual world of variation, shadings, and continua. In short, we view means and medians as the hard "realities," and the variation that permits their calculation as a set of transient and imperfect measurements of this hidden essence. If the median is the reality and variation around the median just a device for its calculation, the "I will probably be dead in eight months" may pass as a reasonable interpretation.
But all evolutionary biologists know that variation itself is nature's only irreducible essence. Variation is the hard reality, not a set of imperfect measures for a central tendency. Means and medians are the abstractions. Therefore, I looked at the mesothelioma statistics quite differently - and not only because I am an optimist who tends to see the doughnut instead of the hole, but primarily because I know that variation itself is the reality. I had to place myself amidst the variation.
When I learned about the eight-month median, my first intellectual reaction was: fine, half the people will live longer; now what are my chances of being in that half. I read for a furious and nervous hour and concluded, with relief: damned good. I possessed every one of the characteristics conferring a probability of longer life: I was young; my disease had been recognized in a relatively early stage; I would receive the nation's best medical treatment; I had the world to live for; I knew how to read the data properly and not despair.
Another technical point then added even more solace. I immediately recognized that the distribution of variation about the eight-month median would almost surely be what statisticians call "right skewed." (In a symmetrical distribution, the profile of variation to the left of the central tendency is a mirror image of variation to the right. In skewed distributions, variation to one side of the central tendency is more stretched out - left skewed if extended to the left, right skewed if stretched out to the right.) The distribution of variation had to be right skewed, I reasoned. After all, the left of the distribution contains an irrevocable lower boundary of zero (since mesothelioma can only be identified at death or before). Thus, there isn't much room for the distribution's lower (or left) half - it must be scrunched up between zero and eight months. But the upper (or right) half can extend out for years and years, even if nobody ultimately survives. The distribution must be right skewed, and I needed to know how long the extended tail ran - for I had already concluded that my favorable profile made me a good candidate for that part of the curve.
The distribution was indeed, strongly right skewed, with a long tail (however small) that extended for several years above the eight month median. I saw no reason why I shouldn't be in that small tail, and I breathed a very long sigh of relief. My technical knowledge had helped. I had read the graph correctly. I had asked the right question and found the answers. I had obtained, in all probability, the most precious of all possible gifts in the circumstances - substantial time. I didn't have to stop and immediately follow Isaiah's injunction to Hezekiah - set thine house in order for thou shalt die, and not live. I would have time to think, to plan, and to fight.
One final point about statistical distributions. They apply only to a prescribed set of circumstances - in this case to survival with mesothelioma under conventional modes of treatment. If circumstances change, the distribution may alter. I was placed on an experimental protocol of treatment and, if fortune holds, will be in the first cohort of a new distribution with high median and a right tail extending to death by natural causes at advanced old age.
It has become, in my view, a bit too trendy to regard the acceptance of death as something tantamount to intrinsic dignity. Of course I agree with the preacher of Ecclesiastes that there is a time to love and a time to die - and when my skein runs out I hope to face the end calmly and in my own way. For most situations, however, I prefer the more martial view that death is the ultimate enemy - and I find nothing reproachable in those who rage mightily against the dying of the light.
The swords of battle are numerous, and none more effective than humor. My death was announced at a meeting of my colleagues in Scotland, and I almost experienced the delicious pleasure of reading my obituary penned by one of my best friends (the so-and-so got suspicious and checked; he too is a statistician, and didn't expect to find me so far out on the right tail). Still, the incident provided my first good laugh after the diagnosis. Just think, I almost got to repeat Mark Twain's most famous line of all: the reports of my death are greatly exaggerated.
----
Dr. Gould was one of my favorite twentieth century scientific essayist. He penned this in 1982, and though it was cancer that took him from us in 2002, it was not the cancer he discusses here.
this essay is all over the web, so I consider it to be part of the public domain.
Gravity is the dominant force in astronomy, but only by default. Other interactions are far stronger, but they feature both attractions and repulsions. Normally matter reaches an accurate equilibrium, with the forces cancelled. Temporary imbalances (small ones) among electric forces lead to lightning storms; small temporary imbalances among strong forces induce nuclear explosions. Gross breakdowns of equilibrium cannot stand. Gravity, however, is always attractive. Though feeble at the level of individual basic particles, gravitational forces inexorably add up. The meek inherit the cosmos.
Frank Wilczek, in his book //The Lightness of Being: Mass, Ether, and the Unification of Forces//
The message of the summoned life is that you don’t need to panic if you don’t yet know what you want to do with your life. But you probably want to throw yourselves into circumstances where the summons will come.
[...]
life comes to a point only when the self dissolves into some larger task and summons. The purpose in life is not to find yourself. It’s to lose yourself.
: -- from his [[commencement speech at Rice University (2011)|https://www.graduationwisdom.com/speeches/0088-brooks.htm]]
[meaning of life]
The meteoric passage of humankind through cosmic history has left a brilliant trail. Call it history, call it culture. We came from somewhere and we are tending somewhere, and the spectacle is glorious and portentous. The study of our trajectory would yield insight into human nature, and into the nature of being itself.
: -- from [[Robinson|Marilynne Robinson]]'s essay //Cosmology//, in her book //When I was a Child I Read Books//.
The mind of man is more intuitive than logical, and comprehends
more than it can coordinate.
:: -- Vauvenargues, 1746
The mind ought sometimes to be diverted that it may return to better thinking.
::― Phaedrus
The moment is not properly an atom of time but an atom of eternity.
(compare to [[Time is a reality confined to the instant and suspended between two voids. Although time will no doubt be reborn, it must first die. It cannot transport its being from one instant to another in order to forge duration. The instant is already solitude… It is solitude in its barest metaphysical value.]]).
Suppose we are out on a lake and it’s a bit foggy–not too foggy, but a bit foggy–and we’re rowing along in our little boat having a good time. And then, coming out of the fog, we see this other rowboat and it’s heading right at us.
We begin to yell, “Hey, hey, watch out! Turn aside!” But the boat just keeps coming right at us. By this time we're standing up in our boat, screaming and shaking our fist, and then the boat smashes right into our boat.
Well, for a second we’re really angry–what is that fool in the other boat doing? We just painted our boat! And here he comes–crash!–right into it.
And then suddenly we notice that the other boat is empty. What happens to our anger? Well, the anger collapses…
We’ll just have to paint our boat again, that’s all. But if the rowboat that hit ours had another person in it, how would we react? You know what would happen!
Now our encounters with life, with other people, with events, are like being bumped by an empty rowboat. But we don’t experience it that way. We experience it as though there are people in that other rowboat and we’re really getting clobbered by them.
:-- from [[her|Charlotte Joko Beck]] book //Everyday Zen: love and work//
''The Monkey''
"""
1 little monkey
was goin' 2 the store
when he saw a banana 3
he'd never climbed be4.
By 5 o'clock that evenin'
he was 6 with a stomach ache
'cause 7 green bananas
was what that monkey 8.
By 9 o'clock that evenin'
that monkey was quite ill,
so 10 we called the doctor
who was 11 on the hill.
The doctor said, 'You're almost dead.
Don't eat green bananas no more.'
The sick little monkey groaned and said,
'But that's what I 1-2 the 3-4.'
"""
[numbers and words] [ math word game play]
The more helpful our phones get, the harder it is to be ourselves. For everyone out there fighting to write idiosyncratic, high-entropy, unpredictable, unruly text, swimming upstream of spell-check and predictive auto-completion: Don't let them banalize you. Keep fighting.
:: -- from his book //The Most Human Human//
[[He|Brian Christian]] also wrote:
[[If we really want to start fathoming someone, we need to get them speaking in sentences we can't finish.]]
The more personal you are willing to be and the more intimate you are willing to be about the details of your own life, the more universal you are.
(compare to what [[Christian Dillo]] said about [[intimate (not)knowing|Not knowing is most intimate. Not-knowing should not be confused with ignorance. Not-knowing is not the removal of knowing but its deep reevaluation.]])
compare to [[We're all in the same boat on the sea of suffering.]]
In Pynchon’s 1973 novel Gravity’s Rainbow, an engineer named Kurt Mondaugen explains that temporal bandwidth is “the width of your present, your now … The more you dwell in the past and future, the thicker your bandwidth, the more solid your persona. But the narrower your sense of Now, the more tenuous you are."
and also [[The farther backward you can look, the farther forward you are likely to see.]]
[[Albert Einstein had said it|https://sciphilos.info/docs_pages/docs_Einstein_fulltext_css.html]]:
:{{imgquote}} The most beautiful thing we can experience is the mysterious. It is the source of all true art and science. He to whom the emotion is a stranger, who can no longer pause to wonder and stand wrapped in awe, is as good as dead — his eyes are closed.
BTW, and to be fair, Einstein also said about understanding, awe and wonder:
:{{imgquote}} Compound interest is the eighth wonder of the world. He who understands it, earns it ... he who doesn't ... pays it.
:: ;-)
Or said differently (or on a different occasion?):
:{{imgquote}} The most beautiful experience we can have is the mysterious — the fundamental emotion which stands at the cradle of true art and true science.
The most effective debugging tool is still careful thought, coupled with judiciously placed print statements.
Brian Kernighan, "Unix for Beginners" (1979)
The most exciting phrase to hear in science, the one that heralds new discoveries, is not "Eureka!", but "That's funny...".
The most important of all limitations on knowledge–creation is that we cannot prophecy: we cannot predict the content of ideas yet to be created, or their effects. This limitation is not only consistent with the unlimited growth of knowledge, it is entailed by it.
[[I|Haggai Mark]] find this to be an optimistic thought, since if we could prophecy (i.e., predict with certainty), this would mean that knowledge is bounded/limited, which is a "depressing reality".
[[Carl Sagan]] would come to echo the same sentiment in [[his Gifford lecture|https://www.giffordlectures.org/lectures/search-who-we-are]] — “If we ever reach the point where we think we thoroughly understand who we are and where we came from, we will have failed.”
(see also [[Hannah Arendt]]'s observation: [[By posing the unanswerable questions of meaning, men establish themselves as question-asking beings. Behind all the cognitive questions for which men find answers, there lurk the unanswerable ones that seem entirely idle and have always been denounced as such. It is more than likely that men, if they were ever to lose the appetite for meaning we call thinking and cease to ask unanswerable questions, would lose not only the ability to produce those thought-things that we call works of art but also the capacity to ask all the answerable questions upon which every civilization is founded.]])
The most important thing to understand: The choice of programming language is far from the most important thing in designing a course...For a course, what you want is a crystal-clear language that highlights the computer science ideas without hiding them in a cloud of syntax or library details.
from Brian Harvey's comments on [[Scheme vs. Python|http://www.cs.berkeley.edu/~bh/proglang.html]]
The most likely way for the world to be destroyed, most experts agree, is by accident. That's where we come in. We're computer professionals. We cause accidents.
The most painful state of being is remembering the future, particularly the one you'll never have.
<<comparequote "Robert Frost" "The Road Not Taken" "roads not taken">>
<<comparequote "T. S. Eliot" "Time present and time past Are both perhaps present in time future And time future contained in time past...Footfalls echo in the memory Down the passage which we did not take Towards the door we never opened Into the rose-garden." "regrets">>
[regrets]
The motto in many projects seems to be: Deliver yesterday, code today, think tomorrow.
The mounted horse did not kill athletics. We run for joy.
or the chess analog:
> Chess might be an art for some, a science for others; most of all though, it is a fight. Which is why computers haven't destroyed chess.
[human nature] [games]
The laws (of physics) amount to a funny way of saying, ‘Nothing equals something,' QED! One opinion I’ve encountered is that, since getting from nothing to something involves time, and time didn’t exist before there was something, the whole question is a meaningless one that we should stop asking ourselves. It’s beyond our intellectual limits as a species.
Put yourself into the position of a dog. A dog is responsive, shows intuition, looks at us with eyes behind which there is intelligence of a sort, and yet a dog must not understand most of the things it sees people doing. It must have no idea how they invented, say, the internal-combustion engine. So maybe what we need to do is imagine that we’re dogs and that there are realms that go beyond our understanding.
I’m not sure I buy that view, but it is a way of saying that the mystery of being is a permanent mystery, at least given the present state of the human brain. I have trouble even believing—and this will offend you—the standard scientific explanation of how the universe rapidly grew from nearly nothing. Just think of it. The notion that this planet and all the stars we see, and many thousands of times more than those we see — that all this was once bounded in a point with the size of, what, a period or a grape? How, I ask myself, could that possibly be? And, that said, I sort of move on.
[limitation on thinking]
(compare to [[David Deutsch]]'s take on [[believing in the in-understandable|As a logical possibility, of course, it's always possible that there are incomprehensible things in the universe. But I have argued that taking that seriously is exactly the same as a belief in the supernatural ...]])
(compare to [[Richard Hamming]]'s take: [[Perhaps there are thoughts we cannot think]]).
''The Nap Taker''
"""
No - I did not take a nap -
The nap - took - me
off the bed and out the window
far beyond the sea,
to a land where sleepy heads
read only comic books
and lock their naps in iron safes
so that they can't get took.
And soon as I came to that land,
I also came to grief.
The people pointed at me, shouting,
'Where's the nap, you thief?'
They took me to the courthouse.
The judge put on his cap.
He said, 'My child, you are on trial
for taking someone's nap.
'Yes, all you selfish children,
you think just of yourselves
and don't care if the nap you take
belongs to someone else.
It happens that the nap you took
without a thought or care
belongs to Bonnie Bowlingbrook,
who's sittin' cryin' there.
'She hasn't slept in quite some time -
just see her eyelids flap.
She's tired drowsy - cranky too,
'cause guess who took her nap?'
The jury cried, 'You're guilty, yes,
you're guilty as can be.
But just return the nap you took
And we might set you free.'
'I did not take that nap,' I cried,
'I give my solemn vow,
and if I took it by mistake
I do not have it now.'
'Oh fiddle-fudge,' cried out the judge,
your record looks quite sour.
Last night I see you stole a kiss,
Last week you took a shower,
'You beat your eggs, you've whipped your cream,
at work you punched the clock,
You've even killed an hour or two,
we've heard you darn your socks.
We know you shot a basketball,
you've stolen second base,
and we can see you're guilty
from the sleep that's on your face.
'Go lie down on your blanket now
and cry your guilty tears.
I sentence you to one long nap
for ninety million years.
And when the other children see
this nap that never ends,
no child will ever dare to take
somebody's nap again.'
"""
[nursery/children rhymes] [aggressive/violent language :)]
Each pulse of cognitive consciousness, each Thought, dies away and is replaced by another. The other, among the things it knows, knows its own predecessor, and finding it 'warm,' in the way we have described, greets it, saying: "Thou art mine, and part of the same self with me." Each later Thought, knowing and including thus the Thoughts which went before, is the final receptacle - and appropriating them is the final owner - of all that they contain and own. Each Thought is thus born an owner, and dies owned, transmitting whatever it realized as its Self to its own later proprietor.
As Kant says, it is as if elastic balls were to have not only motion but knowledge of it, and a first ball were to transmit both its motion and its consciousness to a second, which took both up into its consciousness and passed them to a third, until the last ball held all that the other balls had held, and realized it as its own. It is this trick which the nascent thought has of immediately taking up the expiring thought and 'adopting' it, which is the foundation of the appropriation of most of the remoter constituents of the self. Who owns the last self owns the self before the last, for what possesses the possessor possesses the possessed.
[...]
The thoughts themselves are the thinkers.
:: - from [[The Principles of Psychology|https://psychclassics.yorku.ca/James/Principles/prin10.htm]]
[There are three types of books (and opinions) about the Internet:] call them the Never-Betters, the Better-Nevers, and the Ever-Wasers. The Never-Betters believe that we’re on the brink of a new utopia, where information will be free and democratic, news will be made from the bottom up, love will reign, and cookies will bake themselves. The Better-Nevers think that we would have been better off if the whole thing had never happened, that the world that is coming to an end is superior to the one that is taking its place, and that, at a minimum, books and magazines create private space for minds in ways that twenty-second bursts of information don’t. The Ever-Wasers insist that at any moment in modernity something like this is going on, and that a new way of organizing data and connecting users is always thrilling to some and chilling to others—that something like this is going on is exactly what makes it a modern moment.
>
>''One’s hopes rest with the Never-Betters; one’s head with the Ever-Wasers; and one’s heart? Well, twenty or so books in, one’s heart tends to move toward the Better-Nevers, and then bounce back toward someplace that looks more like home.''
From [[an article in The New Yorker|https://www.newyorker.com/magazine/2011/02/14/the-information]] titled "The Information -- How the Internet gets inside us." by Adam Gopnik
''The Niagara River''
"""
As though
the river were
a floor, we position
our table and chairs
upon it, eat, and
have conversation.
As it moves along,
we notice—as
calmly as though
dining room paintings
were being replaced—
the changing scenes
along the shore. We
do know, we do
know this is the
Niagara River, but
it is hard to remember
what that means.
"""
This reminds me of [Shunryu Suzuki]]'s imagery:
> [[Life is like stepping onto a boat that is about to sail out to sea and sink.]]
[paying attention] [change] [urgency] [fire]
From [[his|Rainer Maria Rilke]] poem [["Die neunte Elegie|https://kalliope.org/en/text/rilke2000031709]] ([[“The Ninth Elegy”|https://www.poetryintranslation.com/PITBR/German/Rilke.php#anchor_Toc509812223]], (part of "The Duino Elegies"), translated by A. S. Kline)
<html>
<table>
<tr>
<td width="50%">
<pre>
warum dann
Menschliches müssen — und, Schicksal vermeidend,
sich sehnen nach Schicksal?...
[...]
Aber weil Hiersein viel ist, und weil uns scheinbar
alles das Hiesige braucht, dieses Schwindende, das
seltsam uns angeht. Uns, die Schwindendsten. Ein Mal
jedes, nur ein Mal. Ein Mal und nichtmehr. Und wir auch
ein Mal. Nie wieder. Aber dieses
ein Mal gewesen zu sein, wenn auch nur ein Mal:
irdisch gewesen zu sein, scheint nicht widerrufbar.
</pre>
</td>
<td width="50%">
<pre>
why then
have to be human — and shunning destiny
long for destiny?…
[...]
But because being here is much, and because all
that’s here seems to need us, the ephemeral, that
strangely concerns us. We: the most ephemeral. Once,
for each thing, only once. Once, and no more. And we too,
once. Never again. But this
once, to have been, though only once,
to have been an earthly thing — seems irrevocable.
</pre>
</td>
</tr>
</table>
</html>
From a conversation with [[Ian McEwan]] [[on Edge.org|https://www.edge.org/conversation/ian_mcewan-machines-like-me]]:
He [Adam, the embodied AI/Robot] believes that haikus are the literary form of the future because sooner or later humans will start to embody machinery into their own brains to keep up with robots.
[And this will result in a world where] Everyone will have instant access to the cloud or whatever its equivalent is, and this will be the end of the literary novel. The novel requires as its premise that we do not fully understand each other. The moment we fully understand each other and have no secrets is the end of literature, certainly the end of the novel. But the clear seventeen-syllable statement of how things are, is for Adam the only literary form worth writing, and that’s what he writes.
"""
Fill each other's cup but drink not from one cup.
Give one another of your bread but eat not from the same loaf
Sing and dance together and be joyous, but let each one of you be alone,
Even as the strings of a lute are alone though they quiver with the same music.
Give your hearts, but not into each other's keeping.
For only the hand of Life can contain your hearts.
And stand together yet not too near together:
For the pillars of the temple stand apart,
And the oak tree and the cypress grow not in each other's shadow.
"""
: -- from [[his|Kahlil Gibran]] poem [[On Marriage|http://www.katsandogz.com/gibran/onmarriage.php]]
(or as [[Parker Palmer]] described [[healthy intimacy and love|The highest form of love is the love that allows for intimacy without the annihilation of difference.]]).
(Or as [[Wilferd Arlan Peterson]] described [[healthy love and intimacy|The Art Of Marriage - poem by Wilferd Arlan Peterson]]).
The odds against life as we know it happening to you (and me) are literally and figuratively “astronomical.”
: -- from his post [[Be Here Wow!|https://www.inquiringmind.com/article/2002_50_nisker_be-here-wow/]]^^*^^
"""
"""
^^*^^This is obviously reflecting [[Ram Dass's book Be Here Now|https://beherenownetwork.com/be-here-now/]], but also
Possibly echoing the awe and enthusiasm Carl Sagan had when describing and talking about the Cosmos :)
The Odyssey, is a poem about a hero who’s so good at lies, at deceits and disguises, that, once he finally gets home, he has a difficult time proving that he is who he says he is. What is the “self,” exactly? Do you remain “yourself” even after undergoing radical transformations, physical and mental?
:-- from his article in The New Yorker [["A Father's Last Odyssey"|https://www.newyorker.com/magazine/2017/04/24/a-father-and-sons-final-odyssey]].
[identity]
Richard Feynman on Quantum Computing:
We always have had (secret, secret, close the doors!) … a great deal of difficulty in understanding the world view that quantum mechanics represents … It has not yet become obvious to me that there’s no real problem. … Can I learn anything from asking this question about computers–about this may or may not be mystery as to what the world view of quantum mechanics is?
The only difference between a probabilistic classical world and the equations of the quantum world is that somehow or other it appears as if the probabilities would have to go negative.
All sentient beings ultimately approach the state which might be called "angelhood." But just as the race of human beings is in a certain stage of biologic evolution, so angels are simply the end result of a process of Cosmic Evolution. The only difference between the so-called saint and the so-called sinner is that the former is vastly older than the latter.
from his article [[Is God a Taoist?|http://www.mit.edu/people/dpolicar/writing/prose/text/godTaoist.html]]
I began to realize that my identity depended not upon any beliefs I had, inherited beliefs or manufactured beliefs, but my identity actually depended on how much attention I was paying to things that were other than myself. And that as you deepen this intentionality and this attention, you started to broaden and deepen your own sense of presence. And I began to realize that the only place where things were actually real was at this frontier between what you think is you and what you think is not you. That whatever you desire of the world will not come to pass exactly as you will like it.
But the other mercy is that whatever the world desires of you will also not come to pass. And what actually occurs is this meeting, this frontier. But it’s astonishing how much time human beings spend away from that frontier, abstracting themselves out of their bodies, out of their direct experience, and out of a deeper, broader, and wider possible future that’s waiting for them if they hold the conversation at that frontier level.
Half of what’s about to occur is unknown, both inside you and outside you.
from a [[conversation between Krista Tippett and David Whyte on the conversational nature of reality|https://onbeing.org/programs/david-whyte-the-conversational-nature-of-reality/]]
The only programmer to whom you should compare yourself is the programmer you were yesterday.
: -- [[torquing|On torquing expressions into new meanings]] a saying on [[David B. Schlosser]]'s [[blog|http://www.dbschlosser.com/]] about [[writers and writing|writing]]
The only reason for time is so that everything doesn't happen at once.
or as Terry Pratchett wrote (in Wyrd Sisters):
>A year went past. The days followed one another patiently. Right back at the beginning of the multiverse they had tried all passing at the same time, and it hadn’t worked.
or as Susan Sontag had said: [[Time exists in order that everything doesn’t happen all at once … and space exists so that it doesn’t all happen to you.]]
[[Einstein|Albert Einstein]] also said:
> I never think of the future. It comes soon enough.
The only thing worth pondering on and being mindful of is the human heart in conflict with itself.
Inspired by [[William Faulkner]]'s:
> The only thing worth writing about is the human heart in conflict with itself.
[self knowledge] [self improvement]
The only thing worth writing about is the human heart in conflict with itself.
And [[my|Haggai Mark]] take on it:
> The only thing worth pondering on and being mindful of is the human heart in conflict with itself.
[self knowledge] [self improvement]
The only way to have a friend is to be one.
The only Zen you find on the tops of mountains is the Zen you bring up there.
<<comparequote "Wislawa Szymborska" "I like being near the top of a mountain. One can’t get lost there." "mountains and states of mind">>
The opposite of a fact is falsehood, but the opposite of one profound truth may very well be another profound truth.
[[Bohr|Niels Bohr]] also [[told|https://www.brainpickings.org/2018/02/01/niels-bohr-science-religion/]] Werner Heisenberg:
> We ought to remember that religion uses language in quite a different way from science. The language of religion is more closely related to the language of poetry than to the language of science. True, we are inclined to think that science deals with information about objective facts, and poetry with subjective feelings. Hence we conclude that if religion does indeed deal with objective truths, it ought to adopt the same criteria of truth as science.
>But I myself find the division of the world into an objective and a subjective side much too arbitrary. The fact that religions through the ages have spoken in images, parables, and paradoxes means simply that there are no other ways of grasping the reality to which they refer. __But that does not mean that it is not a genuine reality. __
>And splitting this reality into an objective and a subjective side won’t get us very far.
(compare to [[Neil Postman]]'s take on [[the deep truth of narratives|The measure of a narrative’s ‘truth’ or ‘falsity’ is in its consequences: Does it provide people with a sense of personal identity, a sense of community life, a basis for moral conduct, explanations of that which cannot be known? . . . without a narrative, life has no meaning. Without meaning, learning has no purpose. Without a purpose, schools are houses of detention, not attention.]])
The opposite of depression is not happiness -- it is human vitality.
The optimism bias protects us from accurately perceiving the pain and difficulties the future undoubtedly holds, and it may defend us from viewing our options in life as somewhat limited. As a result, stress and anxiety are reduced, physical and mental health are improved, and the motivation to act and be productive is enhanced. In order to progress, we need to be able to imagine alternative realities—not just any old realities, but better ones, and we need to believe them to be possible.
That last line is crucial. We tell ourselves stories about our potential for progress because if we’re realistic about how common failure and pain is, we’d never get off the couch.
Which is how ''the optimism bias becomes self-fulfilling. Once people believe in a better future – for themselves and others – they become willing to take risks, work hard, sacrifice near-term comfort, delay gratification, and cooperate with others, all of which are the raw ingredients of economic and social progress.''
: -- In her book //Optimism Bias//
The ordinary + extra attention = the extraordinary
from [[the book "Keep Going"|https://austinkleon.com/keepgoing/]] by Austin Kleon.
The ordinary traveler, who never goes off the beaten route and who on this beaten route is carried by others, without himself doing anything or risking anything, does not need to show much more initiative and intelligence than an express package.
He does nothing; others do all the work, show all the forethought, take all the risk—and are entitled to all the credit. He and his valise are carried in practically the same fashion; and for each the achievement stands about on the same plane.
The overarching purpose of schooling is to stimulate, capitalize on, and sustain the kind of motivation, intellectual curiosity, awe, and wonder that a child possesses when he or she begins schooling.
Thinking becomes something that happens to us through us, with us, by us and for us. When we concentrate, we are the charmer and the charmed.
Yet the charm is an achievement that we risk taking for granted. ''We concentrate when we want to and when we must, rarely just because we can; and yet when we try to concentrate, we risk missing the point – our will becomes another element of consciousness to hold and tame, and we risk getting in our own way.''
Concentration therefore arises as a kind of paradox, when we simultaneously forget and find ourselves; when we know who we are without asking, and know what to do without getting in the way of doing it. In those moments of coalescence called concentration we are mostly fully ourselves, most fully alive, and free.
: ― from [[Jonathan Rowson]]'s book //The Moves That Matter: A Chess Grandmaster on the Game of Life//
I do in fact steer by One Big Idea, which makes me a hedgehog rather than a fox. It is this: the part of reality that we can make meaningful claims about is limited by our experience and observation. This is a Big Idea that tends to deflate other Big Ideas.
[human nature] [humility]
Brand's Asymmetry:
The past can only be known, not changed. The future can only be changed, not known.
Brand's Shortcut:
The only way to predict the future is to make sure it stays exactly the same as the present.
Brand also said:
* Information wants to be free.
* Information also wants to be expensive.
* In haste, mistakes cascade. With deliberation, mistakes instruct
The past is never dead. It’s not even past.
The pattern using system is a very efficient way of handling information. Once established, the patterns form a sort of code. The advantage of a code system is that instead of having to collect all the information, one collects just enough to identify the code pattern which is then called forth, even as library books on a particular subject are called forth by a catalogue code number…
But inseparable from the great usefulness of a patterning system are certain limitations. In such a system it is easy to combine patterns or to add to them but it is extremely difficult to restructure them for the patterns control attention. Insight and humour both involve the restructuring of patterns. Creativity also involves restructuring but with more emphasis on the escape from restricting patterns. Lateral thinking involves restructuring, escape and the provocation of new patterns.
(Compare to [[Alfred North Whitehead]]'s take on [[automating responses/behaviors|It is a profoundly erroneous truism, repeated by all the copybooks, and by eminent people when they are making speeches, that we should cultivate the habit of thinking what we are doing. The precise opposite is the case...]]).
(see also [[Sallustius]]'s take on [[the ever-presence of myths|Myths are things that never happened, but always are.]])
The perplexity of life arises from there being too many
interesting things in it for us to be interested properly
in any of them.
:: - G. K. Chesterton, 1909
The person who is best suited to us is not the person who shares our every taste (he or she doesn’t exist), but the person who can negotiate differences in taste intelligently — the person who is good at disagreement. Rather than some notional idea of perfect complementarity, it is the capacity to tolerate differences with generosity that is the true marker of the “not overly wrong” person. Compatibility is an achievement of love; it must not be its precondition.
: -- from [[his|Alain de Botton]] essay [["Why You Will Marry the Wrong Person"|https://www.nytimes.com/2016/05/29/opinion/sunday/why-you-will-marry-the-wrong-person.html]]
[marriage] [relationship]
(see also [[Compatibility is an achievement of love. It shouldn’t be the precondition of love]]).
The person who knows HOW will always have a job. The person who knows WHY will always be that person's boss.
The person who lives without folly is not as wise as he thinks.
: -- Maxim 209 ([[Francois La Rochefoucauld]]'s [[Maxims|https://www.gutenberg.org/files/9105/9105-h/9105-h.htm]]).
[playfulness]
The personal and the temporal is where we all begin. Even Spinoza began by being only himself. The question is whether that is where one ought to end. Spinoza tells us no. He urges one to forsake, in a sense, one’s own temporal identity as it has passively come down to one through the contingencies of what he calls “external causality,” contingencies that have nothing to do with one’s own true essence.
: -- From Rebecca Goldstein's book “Betraying Spinoza: The Renegade Jew Who Gave Us Modernity.”
The plan is nothing; the planning is everything.
This is analogous to what [[Gerald Weinberg]] said about software/project documentation:
> The //documentation// is nothing; the //documenting// is everything.
[process] [thinking] [reflecting]
The plane of life is a frozen sea, on which all make many slips, and finally break through into eternity.
compare to [[Perfection is a fragile, ice-thin ground that barely holds our human weight]] in David Whyte's poem [[The New Nobility|https://www.facebook.com/PoetDavidWhyte/posts/370319849660691]]
compare to [[Life is like stepping onto a boat that is about to sail out to sea and sink.]]
The poem . . . is a little myth of man's capacity of making life meaningful. And in the end, the poem is not a thing we see-it is, rather, a light by which we may see-and what we see is life.
The point of liberal education is to learn something about everything, and everything about something.
Donald Knuth in [[a short (4:40 min.) video clip|https://youtu.be/75Ju0eM5T2c?t=221]] giving advice to young people
The possibilities are numerous once we decide to act and not react.
In a succinctly expressed observation, [[Michael Shermer]], a skeptic's skeptic, simply explained why he thinks we are making progress, as we expand our knowledge.
The piece is titled [["At the Boundary of Knowledge"|https://michaelshermer.com/2016/09/at-the-boundary-of-knowledge/]]:
>[...] isn’t the history of science also strewn with the remains of failed theories such as phlogiston, miasma, spontaneous generation and the luminiferous aether? Yes, and that is how we know we are making progress. The postmodern belief that discarded ideas mean that there is no objective reality and that all theories are equal is more wrong than all the wrong theories combined. The reason has to do with the relation of the known to the unknown.
>
>As the sphere of the known expands into the aether of the unknown, the proportion of ignorance seems to grow—the more you know, the more you know how much you don’t know. But note what happens when the radius of a sphere increases: the increase in the surface area is squared while the increase in the volume is cubed. Therefore, as the radius of the sphere of scientific knowledge doubles, the surface area of the unknown increases fourfold, but the volume of the known increases eightfold. It is at this boundary where we can stake a claim of true progress in the history of science.
Compare with [[The larger the island of knowledge, the longer the shoreline of wonder.]]
which proves the point Niels Bohr made: [[The opposite of a fact is falsehood, but the opposite of one profound truth may very well be another profound truth.]]
compare to [[Robert Brault]]: It is hard to reason with someone who regards truth as one school of thought.
The potentially nice thing about artificial intelligence is that it's possibly better than natural stupidity.
Paraphrasing [[Terry Pratchett]]:
>The nice thing about artificial intelligence is that at least it's better than artificial stupidity.
who also wrote (in //Equal Rites//):
> They say a little knowledge is a dangerous thing, but it is not one half so bad as a lot of ignorance.
Compared to what [[Sendhil Mullainathan (an Edgie)|https://www.edge.org/memberbio/sendhil_mullainathan]] [[had said about artificial Intelligence|https://www.edge.org/conversation/jaron_lanier-the-myth-of-ai]]:
> We should be afraid. Not of intelligent machines. But of machines making decisions that they do not have the intelligence to make. ''I am far more afraid of machine stupidity than of machine intelligence.''
"""
"""
And compare to [[Jaron Lanier]]'s observation:
> Best guess for [[Circle of Empathy|You have to draw a Circle of Empathy around yourself and others in order to be moral. If you include too much in the circle, you become incompetent, while if you include too little you become cruel. This is the "Normal form" of the eternal liberal/conservative dichotomy.]]: Danger of increasing human stupidity is probably greater than potential reality of machine sentience. Therefore choose not to place machines in [[Circle of Empathy|You have to draw a Circle of Empathy around yourself and others in order to be moral. If you include too much in the circle, you become incompetent, while if you include too little you become cruel. This is the "Normal form" of the eternal liberal/conservative dichotomy.]].
I came across this opportunity to "Follow" a poet that I like [[Edward Rowland Sill]] on the [[All Poetry website|https://allpoetry.com/]].
<a href="./resources/Edward Rowland Sill.png" target="new"><img src="./resources/Edward Rowland Sill.png" width="95%" height="95%" /></a>
Now, I always knew that poetry can elevate the soul [ha!], but to actually enable you to "Follow" a Dead Poet!? Miracle of Miracles :)
''The power of statistics'' ([[pun intended|https://www.scribbr.com/statistics/statistical-power/]])
Once a student told me that they don't understand the need for anesthetics in surgeries. They claimed that giving the patient a few randomly selected pages from a (carefully selected? :) statistics textbook just before the operation, would "do the trick nicely".
I ran the student's idea by a few anesthesiologists friends of mine, who (suppressing a yawn) said they liked the idea, but on careful examination thought it may be too risky: the patient may not wake up //after// the surgery, they said.
: -- from [[his|Haim Shapira]] book //"What Really Matters"//
The price of metaphor is eternal vigilance.
From his book //Everything and More//:
If you had the right classes in school, however, you might now recall that the rule or principle you want does exist—its official name is the Principle of Induction. It is the fundamental principle of modern science. Without the Principle of Induction (P.I.), experiments couldn’t confirm a hypothesis, and nothing in the physical universe could be predicted with any confidence at all. There could be no natural laws or scientific truths.
The Principle of Induction (P.I.) states that if something x has happened in certain particular circumstances n times in the past, we are justified in believing that the same circumstances will produce x on the (n+1)^^th^^ occasion. The P.I. is wholly respectable and authoritative, and it seems like a well-lit exit out of the whole problem [of the nature of knowledge]. Until, that is, it happens to strike you (as can occur only in very abstract moods or when there’s an unusual amount of time before the alarm goes off) that the P. I. is itself merely an abstraction from experience … and so now what exactly is it that justifies our confidence in the P. I.?
[...]
Finding some higher-level justification for your confidence in the P.I. seems much more urgent when you realize that, without this justification, our [basis for confidence about our knowledge of reality]. But the conclusion, abstract as it is, seems inescapable: What justifies our confidence in the Principle of Induction is that it has always worked so well in the past, at least up to now. Which would seem to mean that our only real justification for the Principle of Induction is the Principle of Induction, which seems shaky and question-begging in the extreme.
The only way out of the potentially bedridden-for-life paralysis of this last conclusion is to pursue further abstract side-inquiries into what exactly ‘justification’ means and whether it’s true that the only valid justifications for certain beliefs and principles are rational and noncircular.
The principle of logical parsimony has some relevance for literary analysis and deconstructions as well. I readily grant that in a short story, say, much more appeals to us than its information content or complexity. Nevertheless, exegeses [critical explanations or interpretations] that are considerably longer than the story itself begin to run afoul of the complexity-theoretic ideas just described [referring to Russian mathematician [[A. N. Kolmogorov|https://en.wikipedia.org/wiki/Andrey_Kolmogorov]], and computer scientist [[Gregory Chaitin]]].
It is no trick at all to generate a sequence with a program whose complexity is much greater that that of the sequence. The voluminous criticism that sometimes attaches to a story or the torrential media commentary that surrounds some events therefore must say more about critics and commentators or about other matters than it does about the story or events in question.
[journalism]
The problem is that ego can convert anything to its own use, even spirituality. Ego is constantly attempting to acquire and apply the teachings of spirituality for its own benefit.
Originally said about teaching mathematics:
The way mathematics is currently taught it is exceedingly dull. In the calculus book we are currently using on my campus, I found no single problem whose answer I felt the student would care about! The problems in the text have the dignity of solving a crossword puzzle - hard to be sure, but the result is of no significance in life.
The process of learning through life is by no means continuous and by no means universal. If it were, age and wisdom would be perfectly correlated, and there would be no such thing as an old fool -- a proposition at odds with common experience.
-- Speech at Oberlin College, Ohio,1958
This echoes what Christa Tippett said when she [[interviewed the Franciscan Father Richard Rohr|https://onbeing.org/programs/richard-rohr-living-in-deep-time-apr2017/]]:
>Not everybody becomes an elder. Some people just get old. And it’s also possible to be old and childish.
The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination. Few media of creation are so flexible, so easy to polish and rework, so readily capable of realizing grand conceptual structures. ...
Yet the program construct, unlike the poet's words, is real in the sense that it moves and works, producing visible outputs separate from the construct itself. It prints results, draws pictures, produces sounds, moves arms. The magic of myth and legend has come true in our time.
!!! Or from //"The Joys of the Craft"// in [[his|Fred Brooks]] book //"The Mythical Man-Month"//:
Why is programming fun? What delights may its practitioner expect as his reward?
First is the sheer joy of making things. As the child delights in his mud pie, so the adult enjoys building things, especially things of his own design. I think this delight must be an image of God’s delight in making things, a delight shown in the distinctness and newness of each leaf and each snowflake.
Second is the pleasure of making things that are useful to other people. Deep within, we want others to use our work and to find it helpful. In this respect the programming system is not essentially different from the child’s first clay pencil holder “for Daddy’s office.”
Third is the fascination of fashioning complex puzzle-like objects of interlocking moving parts and watching them work in subtle cycles, playing out the consequences of principles built in from the beginning. The programmed computer has all the fascination of the pinball machine or the jukebox mechanism, carried to the ultimate.
Fourth is the joy of always learning, which springs from the nonrepeating nature of the task. In one way or another the problem is ever new, and its solver learns something: sometimes practical, sometimes theoretical, and sometimes both.
Finally, there is the delight of working in such a tractable medium. The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination.
The proper recipe for remaining young: If you have wide and keen interests and activities in which you can still be effective, you will have no reason to think about the merely statistical fact of the number of years you have already lived, still less of the probable shortness of your future.
The purpose of computing is insight, not numbers.
This was [[parodied by George Elmer Forsythe|The Purpose of Computing Numbers Is Not Yet in Sight.]]
The Purpose of Computing Numbers Is Not Yet in Sight.
A [[parody on a book dedication by Richard Hamming|The purpose of computing is insight, not numbers.]]
The purpose of life is not to be happy—but to matter, to be productive, to be useful, to have it make some difference that you lived at all.
The quality of any advice anybody has to offer has to be judged against the quality of life they actually lead.
This is a story of how Queen Elizabeth II handled an encounter with two American hikers who did not recognise her, recounted by a former bodyguard, officer Richard Griffin, known as Dick, who was with her that day.
The monarch was out in the hills near her Scottish castle at Balmoral when two U.S. tourists on a walking holiday approached and one of them engaged her in conversation.
The hiker asked the queen where she lived, so she said London, but added that she had a holiday home just over the hill and had been visiting the area for more than 80 years since she as a little girl. She did not say she was referring to Balmoral.
Aware that the castle was in the vicinity, the hiker then asked her if she had ever met the queen.
Quick as a flash the queen said: 'I haven't, but Dick here meets her regularly'.
The hiker than asked Griffin what the monarch was like in person.
"Because I was with her a long time and I knew I could pull her leg (tease her), I said 'oh, she can be very cantankerous at times, but she's got a lovely sense of humour'," Griffin said.
Delighted, the hiker then put his arm around Griffin's shoulder and asked if he could have a picture of the two of them together.
"Before I could see what was happening, he gets his camera and gives it to the queen and says 'can you take a picture of us?'"
The queen obliged, and then Griffin took the camera and took a picture of her with the pair of hikers.
Later, Griffin said, the queen told him: "I'd love to be a fly on the wall when he shows those photographs to friends in America and hopefully someone tells him who I am."
From his excellent book //The Uncommon Reader//:
On her daily walk with her dog in the royal garden, the queen (does it matter [[Which Queen]]? :) bumps into a mobile library truck parked outside, and decides to find out more about it. She "pops in" and meets the librarian (Mr. Hutchings) and another reader (Norman Seakins who works in the royal kitchens), and strikes up a conversation:
>'Do you have much time for reading?'
>'Not really, ma'am.'
>'I'm the same. Though now that one is here I suppose one ought to borrow a book.'
>Mr Hutchings smiled helpfully.
>'Is there anything you would recommend?'
>'What does Your Majesty like?'
>The Queen hesitated, because to tell the truth she wasn't sure. She'd never taken much interest in reading. She read, of course, as one did, but liking books was something she left to other people. It was a hobby and it was in the nature of her job that she didn't have hobbies. Jogging, growing roses, chess or rock climbing, cake decoration, model aeroplanes. No. Hobbies involved preferences and preferences had to be avoided; preferences excluded people. One had no preferences. Her job was to take an interest, not to be interested herself. And besides, reading wasn't doing. She was a doer. So she gazed round the book-lined van and played for time.
>'Is one allowed to borrow a book? One doesn't have a ticket.'
>'No problem,' said Mr Hutchings.
>'One is a pensioner,' said the Queen, not that she was sure that made any difference.
>'Ma'am can borrow up to six books.'
>'Six? Heavens!'
and on it goes... :)
The question is not what you look at, but what you see.
The above quotation is by Robert D. Richardson Jr who wrote
>“It is not what you look at that matters, it’s what you see.”
in his biography, Henry Thoreau: A Life of the Mind
The question of whether a computer can think is no more interesting than the question of whether a submarine can swim.
the questions raised by thinking and which it is in reason’s very nature to raise — questions of meaning — are all unanswerable by common sense and the refinement of it we call science. The quest for meaning is “meaningless” to common sense and common-sense reasoning because it is the sixth sense’s function to fit us into the world of appearances and make us at home in the world given by our five senses; there we are and no questions asked.
This, I think, echos what [[Friedrich Nietzsche]] meant by:
> [[We hear only those questions for which we are in a position to find answers.]]
The quickest way to double your money is to fold it over and put it back in your pocket.
The rain here [in The Ramtops district part of The Diskworld] has a curiously penetrative quality which makes ordinary rain seem almost arid.
: -- from his book Wyrd Sisters.
The rationality of our universe is best suggested by the fact that we can discover more about it from any starting point, as if it were a fabric that will unravel from any thread.
The real voyage of discovery consists not in seeking new landscapes, but in having new eyes.
The really unusual day would be one where nothing unusual happens.
The reason for living was to get ready to stay dead a long time.
: -- from his book [["As I Lay Dying"|https://archive.org/stream/AsILayDyingFullTextWILLIAMFAULKNER/As%20I%20Lay%20Dying%20Full%20Text%20WILLIAM%20FAULKNER_djvu.txt]].
The reason literacy is important is that literature //is// the operating instructions. The best manual we have. The most useful guide to the country we're visiting, life.
: -- from [[excerpts from the book Words Are My Matter|https://library.hcplonline.org/Mobile/BakerAndTaylor/Excerpt?ISBN=9781618731340&UPC=&position=1]]
The reason most people never experience this simplicity (on [[the other side of the complexity curve|For the simplicity on this side of complexity, I wouldn't give you a fig. But for the simplicity on the other side of complexity, for that I would give you anything I have.]]) is that they confuse learning and understanding with what is happening in School and University; topics are taught in a way that only ever increases the complexity of mental models and just a small minority of people experience this other side of complexity.
: -- from [[Sven Schnieders]]' post [["The Death of Intellectual Curiosity"|https://unfashionable.substack.com/p/the-death-of-intellectual-curiosity]]:
The reasonable man adapts himself to the world; the unreasonable man persists in trying to adapt the world to himself. Therefore, all progress depends on the unreasonable man.
The reformer is always right about what is wrong. He is generally wrong about what is right.
[utopia] [criticism]
<<comparequote "Dee Hock" "Active critics are a great asset. Without the slightest expenditure of time or effort, we have our weakness and error made apparent and alternatives proposed. We need only listen carefully, dismiss that which arises from ignorance, ignore that which arises from envy or malice, and embrace that which has merit." "reformers or critics">>
The relation between minds and machines, and the combination of delight and despair we find in their collisions, leads you to a broader thought: at any given moment, our most complicated machine will be taken as a model of human intelligence, and whatever media kids favor will be identified as the cause of our stupidity.
From [[his|Adam Gopnik]] [[article in The New Yorker|https://www.newyorker.com/magazine/2011/02/14/the-information]] titled "The Information -- How the Internet gets inside us."
''The Road Ahead, or the Road Behind''
Sometimes I think the Fates must grin as we denounce them and insist
the only reason we can't win, is the Fates themselves have missed.
Yet there lives on the ancient claim:
we win or lose within ourselves.
The shining trophies on our shelves can never win tomorrow's game.
You and I know deeper down, there's always a chance to win the crown.
But when we fail to give our best,
we simply haven't met the test, of giving all and saving none
until the game is really won;
of showing what is meant by grit;
of playing through when others quit;
of playing through, not letting up.
It's bearing down that wins the cup.
Of dreaming there's a goal ahead; of hoping when our dreams are dead;
of praying when our hopes have fled; yet losing, not afraid to fall,
if, bravely, we have given all.
For who can ask more of a man than giving all within his span.
Giving all, it seems to me, is not so far from victory.
And so the Fates are seldom wrong, no matter how they twist and wind.
It's you and I who make our fates --
we open up or close the gates on the road ahead or the road behind.
: -- from [[his|John Wooden]] [[TED Talk (2001)|https://www.ted.com/talks/john_wooden_the_difference_between_winning_and_succeeding]]
[determination] [not giving up] [fighting]
"""
Two roads diverged in a yellow wood,
And sorry I could not travel both
And be one traveler, long I stood
And looked down one as far as I could
To where it bent in the undergrowth;
Then took the other, as just as fair,
And having perhaps the better claim,
Because it was grassy and wanted wear;
Though as for that the passing there
Had worn them really about the same,
And both that morning equally lay
In leaves no step had trodden black.
Oh, I kept the first for another day!
Yet knowing how way leads on to way,
I doubted if I should ever come back.
I shall be telling this with a sigh
Somewhere ages and ages hence:
Two roads diverged in a wood, and I—
I took the one less travelled by,
And that has made all the difference.
(1916)
"""
<<comparequote "Soren Kierkegaard" "The most painful state of being is remembering the future, particularly the one you'll never have." "regrets">>
compare to [[Robert Brault]]: I remember well the road I took -- and the friends I traveled with. Did we ever get to where we were going? That I don't recall.
<<comparequote "T. S. Eliot" "Time present and time past Are both perhaps present in time future And time future contained in time past...Footfalls echo in the memory Down the passage which we did not take Towards the door we never opened Into the rose-garden." "regrets">>
(compare to [[W. H. Auden]]'s [[Clear, unscalable, ahead Rise the Mountains of Instead, From whose cold, cascading streams None may drink except in dreams.]])
(compare to [[The God Who Loves You - poem by Carl Dennis]] by [[Carl Dennis]]).
(Also compare to the "warning" by [[Adam Phillips]] about [[Our unlived lives - Missing Out]]).
(Compare to [[Adam Phillips]] and [[Parker Palmer]] writing about [[The unexamined life is surely worth living, but is the unlived life worth examining?]]).
And, finally, the clear-eyed view of [[Donald Knuth]] (AKA [["The Yoda of Silicon Valley"|https://www.nytimes.com/2018/12/17/science/donald-knuth-computers-algorithms-programming.html]]) who wrote (in his article [["Literate Programming"|http://www.literateprogramming.com/knuthweb.pdf]] (1984)):
> The world is a place of many paths not-taken.
"""
The road to wisdom?
Well, it's plain and easy to express:
Err, and err, and err again,
but less, and less, and less.
"""
As seen on [[Donald Knuth]]'s house wall at Stanford:
<a href="./resources/pietHeinWisdom.jpg" target="new"><img src="./resources/pietHeinWisdom.jpg" width="45%" height="45%" /></a>
(see what [[Ursula K. Le Guin]] had to say [[about the road to wisdom|(On the road to wisdom) The first lesson, and the last, is 'Do what is needful. And no more!' The lessons in between consist in learning what is needful. One must consider the Balance. But when the Balance itself is broken—then one considers other things. Above all, haste.]]).
The road, one felt, had to go somewhere.
This geographical fiction has been the death of many people. Roads don’t necessarily have to go anywhere, they just have to have somewhere to start.
:: – in his book Wyrd Sisters
I wonder if this is a response to [[Lewis Carroll]] and [[the scene with Alice and the Cheshire Cat|Which way ought you go from here? That depends a good deal on where you want to get to. If you don’t much care where you get to, then it doesn’t matter which way you go. You’re sure to get somewhere, if you only walk long enough.]].
Compare to [[what James Lendall Basford said|Life is a long road on a short journey.]].
The root of joy is gratefulness...It is not joy that makes us grateful; it is gratitude that makes us joyful.
Or said differently:
It is not happy people who are grateful; it is grateful people who are happy.
The saddest ([and most dangerous, I might add] aspect of life right now is that science gathers knowledge faster than society gathers wisdom.
The same free flow that makes information cheap and reproducible helps us treasure the sight of information that is not. A story gains power from its attachment, however tenuous, to a physical object. The object gains power from the story. The abstract version may flash by on a screen, but the worn parchment and the fading ink make us pause. The extreme of scarcity is intensified by the extreme of ubiquity.
: -- from [[his|James Gleick]] article about [[buying the real/actual Magna Carta ("Keeping it Real")|https://www.nytimes.com/2008/01/06/magazine/06wwln-lede-t.html]]
[fleeting] [memory]
The satirist shoots to kill while the humorist brings his prey back alive and eventually releases him again for another chance.
Adopted/abreviated from https://www.knowyourcat.info/lib/cheshirecat.htm:
"""
[...] the Cat vanished.
Alice was not much surprised at this, she was getting so used to queer things happening. While she was looking at the place where it had been, it suddenly appeared again.
'By-the-bye, what became of the baby?' said the Cat. 'I'd nearly forgotten to ask.'
'It turned into a pig,' Alice quietly said, just as if it had come back in a natural way.
'I thought it would,' said the Cat, and vanished again. Alice waited a little, half expecting to see it again, but it did not appear, and after a minute or two she walked on in the direction in which the March Hare was said to live. 'I've seen hatters before,' she said to herself; 'the March Hare will be much the most interesting, and perhaps as this is May it won't be raving mad--at least not so mad as it was in March.' As she said this, she looked up, and there was the Cat again, sitting on a branch of a tree.
'Did you say pig, or fig?' said the Cat.
'I said pig,' replied Alice; 'and I wish you wouldn't keep appearing and vanishing so suddenly: you make one quite giddy.'
'All right,' said the Cat; and this time it vanished quite slowly, beginning with the end of the tail, and ending with the grin, which remained some time after the rest of it had gone.^^1^^
'Well! I've often seen a cat without a grin,' thought Alice; 'but a grin without a cat! It's the most curious thing I ever saw in my life!'
"""
----
^^1^^ - this slow/gradual behavior is mentioned in an article titled [["Shtetls There and Here"|https://www.jstor.org/stable/j.ctvcwnscc]] by Steven Zipperstein, analyzing themes in the play [["Fiddler on the Roof"|https://nytf.org/wp-content/uploads/2019/08/Fiddler2018_Lyrics.pdf]]:
> Curiously, the fiddler in the title role -- the show's emblem of tradition, perched predictably on Chagall's roof -- is all but absent (the original actor in the role, a distinguished violinist, nearly quit in frustration because of his progressively dwindling lines). What was left of him, after various rewrites, was an elusive, vague reminder of a tradition whose hold on Tevye himself is elastic, at best.
The School Where I Studied - By Yehuda Amichai
Translated by Chana Bloch
בית-הספר" מתוך "פתוח סגור פתוח" - יהודה עמיחי"
<html>
<table>
<tr>
<td width="50%">
<pre>
עָבַרְתִּי לְיַד בֵּית-הַסֵּפֶר שֶׁבּוֹ לָמַדְתִּי בִּנְעוּרַי ואמרתי אל לבי, כאן למדתי דברים אחדים
ולא למדתי דברים אחרים. כל חיי אני אוהב אהבת חינם
את הדברים שלא למדתי. אני מלא דעת, אני מומחה
בוטניקה של עץ הדעת טוב ורע, אני יודע על פריחתו
ועל צורת עליו ופעולת שורשיו, על מזיקיו ועל טפיליו,
אני עדיין חוקר את הטוב והרע ואחקור עד יום מותי.
עמדתי ליד בית הספר. בחדר הזה ישבנו ולמדנו,
חלונות חדרי כיתה תמיד פונים אל העתיד
ואנחנו חשבנו לתומנו שזה הנוף שראינו מן החלון.
</pre>
</td>
<td width="50%">
<pre>
I passed by the school where I studied as a boy
and said in my heart: here I learned certain things
and didn't learn others. All my life I have loved in vain
the things I didn't learn. I am filled with knowledge,
I know all about the flowering of the tree of knowledge,
the shape of its leaves, the function of its root system, its pests and parasites.
I'm an expert on the botany of good and evil,
I'm still studying it, I'll go on studying till the day I die.
I stood near the school building and looked in. This is the room
where we sat and learned. The windows of a classroom always open
to the future, but in our innocence we thought it was only landscape
we were seeing from the window.
</pre>
</td>
</tr>
</table>
</html>
The search for the impossible is part of what intelligence is about.
from http://blogs.law.nyu.edu/magazine/2015/his-first-century/
The Second Law of Thermodynamics states that all energy systems run down like a clock and never rewind themselves. But life not only 'runs up,' converting low energy sea-water, sunlight and air into high-energy chemicals, it keeps multiplying itself into more and better clocks that keep 'running up' faster and faster.
Why, for example, should a group of simple, stable compounds of carbon, hydrogen, oxygen and nitrogen struggle for billions of years to organize themselves into a professor of chemistry? What's the motive?
If we leave a chemistry professor out on a rock in the sun long enough the forces of nature will convert him into simple compounds of carbon, oxygen, hydrogen and nitrogen, calcium, phosphorus, and small amounts of other minerals. It's a one-way reaction. No matter what kind of chemistry professor we use and no matter what process we use we can't turn these compounds back into a chemistry professor.
Chemistry professors are unstable mixtures of predominantly unstable compounds which, in the exclusive presence of the sun's heat, decay irreversibly into simpler organic and inorganic compounds. That's a scientific fact.
The question is: Then why does nature reverse this process? What on earth causes the inorganic compounds to go the other way? It isn't the sun's energy. We just saw what the sun's energy did. It has to be something else. What is it?
:: -- from his book //Lila : An Inquiry Into Morals//
The secret of getting ahead is getting started.
(compare to what [[Vaclav Havel]] had said about [[strong character|Vision is not enough. It must be combined with venture. It is not enough to stare up the steps, we must step up the stairs.]]).
The secret of success in life is for a man to be ready for his opportunity when it comes.
Or as [[Theodore Roosevelt]] had said:
>It is not often that a man can make opportunities for himself. But he can put himself in such shape that when or if the opportunities come he is ready.
Echoing William Shakespeare (in Henry V):
>All things are ready, if our mind be so.
[preparedness]
The secret to a long life is simple: choose the right parents.
Compare to:
[[Wisdom is hereditary - You get it from your children.|Wisdom is hereditary - You get it from your children.]]
And also compare to:
[[I would gladly go back and travel the road not taken, if I knew at the end of it, I'd find the same set of grandkids (or children, for that matter).]]
And also compare to Will Rogers’ advice on investing:
>Don't gamble! Take ALL your savings and buy yourself a nice stock. Then wait until it goes up in price and sell it for a good profit. If the stock doesn't go up, don't buy it!
The self is merely a shadow cast by grammar.
(said about philosophy?)
The Seven Deadly Sins: Wealth without work; Pleasure without conscience; Knowledge without character; Commerce without morality; Science without humanity; Religion without sacrifice; Politics without principle.
Before the Vogons destroyed Planet Earth with their destroyer spaceships
>The great ships hung motionless in the sky, over every nation on Earth.
>The ships hung in the sky in much the same way that bricks don't.
Then
> There was a terrible ghastly silence.
> There was a terrible ghastly noise
> There was a terrible ghastly silence.
and
> The Vogon Construction Fleet coasted away into the inky starry void.
or as Adams sums it up:
>For a moment, nothing happened. Then, after a second or so, nothing continued to happen.
From [[Kevin Mims]]'s [[article in the NYT|https://www.nytimes.com/2018/10/08/books/review/personal-libraries.html]] about libraries and books:
[[tsundoku|https://en.wikipedia.org/wiki/Tsundoku]]^^1^^, a Japanese word for a stack of books that you have acquired but not yet read.
[[Taleb|Nassim Taleb]] argues that “read books are far less valuable than unread ones,” because unread ones can teach you things you don’t yet know. I don’t really agree with him. I think it’s a good idea to keep your shelves stocked both with books you’ve read and books you haven’t. But just as important is that third category of book: those you haven’t read all of and may never get around to finishing.
The sight of a book you’ve read can remind you of the many things you’ve already learned. The sight of a book you haven’t read can remind you that there are many things you’ve yet to learn. And the sight of a partially read book can remind you that reading is an activity that you hope never to come to the end of.^^2^^
Perhaps the Japanese have a word for that^^3^^.
"""
"""
----
^^1^^ - a nice combination of tsunde-oku (積んでおく, to pile things up ready for later and leave) and dokusho (読書, reading books). -- from Wikipedia^^4^^. See also [[OpenCulture|https://www.openculture.com/2014/07/tsundoku-should-enter-the-english-language.html]].
^^2^^ And as [[Jeanette Winterson]] reflects:
> [[Book collecting is an obsession, an occupation, a disease, an addiction, a fascination, an absurdity, a fate. It is not a hobby. Those who do it must do it. Those who do not do it, think of it as a cousin of stamp collecting, a sister of the trophy cabinet, bastard of a sound bank account and a weak mind.]]
^^3^^ see [[On the perfect aptness of words]].
^^4^^ [[the Wikipedia entry|https://en.wikipedia.org/wiki/Tsundoku]] has a nice reference to a [[blog post|http://languagehat.com/a-quote-on-bibliomania/]] quoting a combination of [[A. E. Newton|https://www.nndb.com/people/030/000084775/]] and [[Holbrook Jackson|https://en.wikipedia.org/wiki/Holbrook_Jackson]], who express similar sentiments:
> Even when reading is impossible, the presence of books acquired by passionate devotion to them produces such an ecstasy that the buying of more books than one can peradventure read is nothing less than the soul reaching towards infinity, and that this passion is the only thing that raises us above the beasts that perish, [...] we cherish books even if unread, their mere presence exudes comfort, their ready access, reassurance.
[collecting] [library]
a saying [[attributed to Albert Einstein|http://icarus-falling.blogspot.com/2009/06/einstein-enigma.html]]:
The significant problems we have cannot be solved at the same level of thinking with which we created them.
"""
"""
Echoed in [[Stephen J. Gould]] observation:
> We cannot see our own embeddedness. Scientists and their conclusions are a product of their time, deeply coloured by their personal and political persuasions.
"""
"""
It's interesting to read the "evolution" (or [[torquing|On torquing expressions into new meanings]]) of the meanings of this attributed quote on the [[Icarusfalling|https://www.blogger.com/profile/00786527401883351156]] blog.
He (Icarusfalling) claims that the original meaning was more about changing our way/type of thinking without introducing the (relatively new in terms of psychology vocabulary) concept of ''levels'' of thinking:
> a new type of thinking is essential if mankind is to survive and move toward higher levels. ([[Einstein|Albert Einstein]])
The single biggest problem in communication is the illusion that it has taken place.
or said differently:
The biggest problem with communication is the illusion that it has occurred.
"""
1. That can't happen
2. That doesn't happen on my machine (or in my code)
3. That shouldn't happen
4. Why does that happen ?
5. Oh, I see
6. How did that ever work ?
"""
Having the right attitude helps.
[[Peter De Vries]] said “I love being a writer. What I can't stand is the paperwork.”
So, you, as a programmer should //not// say: I love programming. What I can't stand is the debugging.
The last meditation retreat I attended was beside the ocean, and while I was sitting I listened to the surf. The surf is the sound of the ocean breathing. It's never still. Sometimes the sea is so loud and crashing that I crave a little silence, and so I listen for the silence between the waves, but just as one wave recedes from the shore, flowing back down the sand into the ocean, getting quieter and quieter, just before it gets silent, the next wave always breaks. The ocean never stops breathing because it's alive.
As I sit on my seat in the zendo, following my breathing, I follow the breathing of the ocean, too, and I begin to breathe in rhythm with the ocean.
The sound of the ocean is the sound of time passing, the sound of one moment giving way to the next. Each wave, each moment, is a gate that I pass through into the next moment.
And even if I'm not sitting by the ocean, one wave of my life is still followed immediately by the next, with no completely quiet place in between.
I love the vow: "Dharma gates are boundless; I vow to enter them." I keep giving myself away to the next moment, and the next moment receives me. I just have to step through.
: -- from her book [["This is getting old"|https://www.lionsroar.com/this-is-getting-old-september-2010/]], in the chapter titled "This Vast Life"
[[4' 33"|https://en.wikipedia.org/wiki/4%E2%80%B233%E2%80%B3]] is a three-movement composition by American experimental composer John Cage. It was composed in 1952, for any instrument or combination of instruments, and the score instructs performers not to play their instruments during the entire duration of the piece throughout the three movements.
John Cage’s ' 4’ 33” ' was no compositional prank^^1^^, but a deep exploration of the very nature of music and the beautiful chaos of life.
Cage’s ' 4’33” ' is actually not about silence at all. Though most members of the audience were focused on the absence of music, there were also ambient vibrations they ignored: wind stirring outside, raindrops pattering on the tin roof—and, toward the end of the performance, the listeners themselves making “all kinds of interesting sounds as they talked or walked out. Music is continuous,” the composer explained. “It is only we who turn away.”
This is echoeed in what [[Nick Bostrom]] wrote in [[Letter from Utopia|https://www.nickbostrom.com/utopia.html]] (2008) [[about music/harmonies and our ability to hear it|Imagine a world with all the music dried up: what impoverishment, what loss! But give your thanks not to the lyre but to your ears for the music. And then ask yourself, what other harmonies are there in the air, that you lack the ears to hear?]].
[[My|Haggai Mark]] thoughts:
- Why 4' 33" and not some other length/duration? I'm not sure, but it reminds me of [[Donald Knuth]]'s book/project [[3:16 Bible Texts Illuminated|https://www-cs-faculty.stanford.edu/~knuth/316.html]], where Knuth is talking about the fact that the arbitrary/random choice of interpreting/illuminating every 16^^th^^ verse of every 3^^rd^^ chapter of every book of the bible turned out to yield deep insights:
> The text found in chapter 3, verse 16, of most books in the Bible is a typical verse with no special distinction. But when Knuth examined what leading scholars throughout the centuries have written about those verses, he found that there is a fascinating story to be learned in every case, full of historical and spiritual insights. This book presents jargon-free introductions to each book of the Bible and in-depth analyses of what people from many different religious persuasions have said about the texts found in chapter 3, verse 16, together with 60 original illustrations by many of the world's leading calligraphers.
>The result is a grand tour of the Bible -- from Genesis 3:16 to Revelation 3:16 -- a treat for the mind, the eyes, and the spirit.
Or as some readers/critics put it:
> This book is ingenious, provocative, and wonderfully informative. A more imaginative and effective passageway into the Bible I have yet to see. Jews and Christians of all stripes -- in fact, nonbelievers too -- will read 3:16 with profit and delight.
>It is difficult to think that a totally new approach to the Bible could be found -- at least one that is sane. Donald Knuth has found one, and produced a book that is physically beautiful and intellectually and spiritually stimulating.
----
^^1^^ from [[a story about John Cage as a writer|http://wheretheheartbeatsbook.com/john-cage-stories/]]:
> Only a great writer could have written the title 4′33″. If the piece were entitled Silence, it would be worthless. 4′33″ is perfectly specific, and a beautiful number, yet it has no meaning. The title contains three mutually dependent jokes: 1) That silence should have a name; 2) That the name should be a number; 3) That the number doesn’t describe anything at all.
The spirit, like the body, can be strengthened and developed by frequent exercise. Just as the body, if neglected, grows weaker and finally impotent, so the spirit perishes if untended.
The spiritual teacher is both ordinary and extraordinary. And so are we.
[[David Hume]] had an insight (which [[Bertrand Russell]] called a "scandal of philosophy"), that the standard justification of scientific induction is itself inductive. We expect the future to be like the past in certain ways only because past futures have been like past pasts in these specific ways.
This is helpful only if the future will be like the past, which is the point at issue.
This is a Hume-ongous problem!
The sunflower keeps its eye on the sun with its back turned to the shade. We die facing life with our backs to death, as if we were walking out of a room backwards.
He resented such questions as people do who have thought a great deal about them. The superficial and slipshod have ready answers, but those looking this complex life straight in the eye acquire a wealth of perception so composed of delicately balanced contradictions that they dread, or resent, the call to couch any part of it in a bland generalization. The vanity (if not outrage) of trying to cage this dance of atoms in a single definition may give the weariness of age with the cry of youth for answers the appearance of boredom.
: ― from his book //The Blood of the Lamb//
The task is not so much to see what no one yet has seen but to think what nobody yet has thought about that which everybody sees.
The test of a first-rate intelligence is the ability to hold two opposed ideas in the mind at the same time, and still retain the ability to function.
One should, for example, be able to see that things are hopeless and yet be determined to make them otherwise.
: -- from his essay [[The Crack-up|https://www.esquire.com/lifestyle/a4310/the-crack-up/]]
<<comparequote "James Geary" "Puns point to the essence of all true wit—the ability to hold in the mind two different ideas about the same thing at the same time." "intelligence, wit, and ideas">>
The test of a round character is whether it is capable of surprising in a convincing way. If it never surprises, it is flat. If it does not convince, it is flat pretending to be round. [A round character] has the incalculability of life about it—life within the pages of a book.
: -- from [[his|E. M. Forster]] book //"The Aspects of the Novel"// (1927)
The test of courage comes when we are in the minority. The test of tolerance comes when we are in the majority.
The test of interesting people is that subject matter doesn't matter.
::-- Louis Kronenberger, 1954
Granny^^1^^ [Esme Weatherwax] subsided into unaccustomed, troubled silence, and tried to listen to the prologue [of a theater play/performace]. The theater worried her. It had a magic of its own, one that didn’t belong to her, one that wasn’t in her control. It changed the world, and said things were otherwise than they were. And it was worse than that. It was magic that didn’t belong to magical people. It was commanded by ordinary people, who didn’t know the rules. They altered the world because it sounded better.
: -- from his book Wyrd Sisters.
----
^^1^^ “Mistress Weatherwax was sort of the 'head witch', even though officially,
“Witches are all equal. [They] don’t have things like head witches. That’s quite against the spirit of witchcraft.”
The thing about coincidence is that when you imagine the umpteen trillions of coincidences that can happen at any given moment, the fact is, that in practice, coincidences almost never do occur. Coincidences are actually so rare that when they do occur they are, in fact memorable. This suggests to me that the universe is designed to ward off coincidence whenever possible—the universe hates coincidence—I don't know why—it just seems to be true. So when a coincidence happens, that coincidence had to work awfully hard to escape the system. There's a message there. What is it? Look. Look harder.
On the other hand, compare to:
>People often note some unlikely conjunction of events and marvel at the coincidence. Could anything be more wonderfully improbable, they wonder. The answer is Yes. The most amazing coincidence of all would be the complete absence of coincidence.
: -- [[John Allen Paulos]] (professor of mathematics at Temple University)
The thing about people who understand you is that when they are gone, you can still visit them, and they still understand you.
about legacy, support, strength, character
One of the things the Irish say is that “the thing about the past is it’s not the past.” It’s right here in this room, in this conversation.
from a [[conversation between Krista Tippett and David Whyte on the conversational nature of reality|https://onbeing.org/programs/david-whyte-the-conversational-nature-of-reality/]]
The longer you live ,the more you realise that nothing is fixed. Everyone will become a refugee if they live long enough. Everyone will realise that their nationality means little in the long run. Everyone would see their worldviews challenged and disproved.
Everyone would realise that the thing that defines a human being is being a human.
:: -- from his book //How to Stop Time//
The thing that differentiates scientists is purely an artistic ability to discern what is a good idea, what is a beautiful idea, what is worth spending time on, and most importantly, what is a problem that is sufficiently interesting, yet sufficiently difficult, that it hasn't yet been solved, but the time for solving it has come now.
''The thinker is a thought among thoughts; the feeler is a feeling among feelings.''
This reminds me of Douglas Hofstadter's idea/image of the simmballs.
Hofstadter tells a wonderful story about the emergence of symbolic thought from neural activity:
> Imagine a pool table with a million small interacting magnetic marbles (“simms”) on it. These simms careen about the space of the pool table, which he calls the “careenium”. In some circumstances, the simms get magnetized to each other, and may form ball-shaped clusters – “simmballs”. The behaviour of single simms is random, but that of simmballs is not. The simmballs move around inside the careenium depending on what kind of external forces impinge on the careenium’s external walls. Thus the behaviour of simmballs inside the careenium comes to reflect conditions outside it.
In other words, there is no You separate from your collection of thoughts, feelings, actions, and so on.
And therefore you cannot define, analyze, and so on, yourself, more than a knife can cut itself, or a light can illuminate itself.
From his [[article in ZeroOne/Medium|https://onezero.medium.com/the-future-of-computing-is-analog-e758471fbfe1]]:
There are three laws of artificial intelligence.
''The first'', known as Ashby’s law, after cybernetician W. Ross Ashby, author of Design for a Brain, states that any effective control system must be as complex as the system it controls. (see [[Daniel Hillis]]'s take on [[information, control, and amplification|Amplification allows the difference that makes a difference to make a difference.]])
''The second law'', articulated by John von Neumann, states that the defining characteristic of a complex system is that it constitutes its own simplest behavioral description. The simplest complete model of an organism is the organism itself. Trying to reduce the system’s behavior to any formal description makes things more complicated, not less.
''The third law'' states that any system simple enough to be understandable will not be complicated enough to behave intelligently, while any system complicated enough to behave intelligently will be too complicated to understand.
"""
"""
The third law offers comfort to those who believe that until we understand intelligence, we need not worry about superhuman intelligence arising among machines. But there is a loophole in the third law. ''It is entirely possible to build something without understanding it''. You don’t need to fully understand how a brain works in order to build one that works. This is a loophole that no amount of supervision over algorithms by programmers and their ethical advisers can ever close. Provably “good” A.I. is a myth. Our relationship with true A.I. will always be a matter of faith, not proof.
: -- From John Brockman's book “Possible Minds - 25 Ways of Looking at AI”.
[Artificial Intelligence]
The Third-and-a-Half Noble Truth
. . . the end of suffering hasn’t happened for me yet. . . . I struggle and I suffer. I suffer less than I used to, though, and I’m not as distraught about the suffering as I used to be.
So, I have added an extra half Noble Truth. . . . “Suffering is manageable.” Short of coming to the very end of suffering, which I absolutely have faith in as a possibility, I am content with managing my suffering better.
: -- from [[her|Sylvia Boorstein]] book //It’s Easier Than You Think//
The thought manifests as the word. The word manifests as the deed. The deed develops into a habit, and the habit hardens into character. So watch the thought and its ways with care, And let it spring from love, Out of respect for all beings.
or as Swami Vivekananda had said:
> We are what our thoughts have made us; so take care about what you think. Words are secondary. Thoughts live; they travel far.
[[Rabbi Nachman of Breslov]] also talked [[On purity of thoughts and the need to guard ones mind]].
(compare to what [[Stanislaus Lec]] [[had to say about ideas|In a war of ideas it is people who get killed.]]).
(compare to [[Samuel Johnson]]'s take [[on habits|The chains of habit are too weak to be felt until they are too strong to be broken.]]).
And also what [[Aristotle]] said:
> We are what we repeatedly do. Excellence then, is not an act, but a habit.
And as [[John Allen Paulos]] had written:
> Stories become a physical part of us. They become encoded somehow into fragments of mental routines capable of generating them at will, and, if integrated into our conceptual and emotional maps of the world, they change us forever. We are the stories we tell.
The three laws of thermodynamics:
# energy, either work or heat, can never be created or destroyed, but only changed from one form to another
# heat can never be 100% converted into work, except
# at the absolute zero of temperature, which can never be reached.
These laws are sometimes summarized as the house rules of a hostile casino:
# you can't win
# you can't break even, and
# you can't get out of the game
And (fortunately, it seems more like, But!), [[Stuart A. Kauffman|https://en.wikipedia.org/wiki/Stuart_Kauffman]] suggests that the fourth law is:
4. But the game keeps getting more complicated, and there are always more different ways to play.
on appreciation/gratefulness/gratitude (and replacing "sanity" with "luck"):
The time to question your luck is not when everything seems out of whack but when everything seems to be in perfectly normal whack.
"""
The timeless in you is aware of life's timelessness,
And knows that yesterday is but today's memory and tomorrow is today's dream.
[...]
But if in your thought you must measure time into seasons, let each season encircle all the other seasons,
And let today embrace the past with remembrance and the future with longing.
"""
:: -- from his poem [[On Time|http://www.katsandogz.com/gibran/ontime.php]].
The spirit of [[Virgil|https://en.wikipedia.org/wiki/Virgil]] (Roman poet) explains the Trojan war to [[Lavinia|https://en.wikipedia.org/wiki/Lavinia]] (a King's daughter in Roman Mythology):
"""
[Spirit:] "There was a pretty prince of Troy named Paris.
He and a Greek queen ran off together.
Her husband called the other kings of Greece together, and they went to Troy, a great army in a thousand beaked ships, to get the woman back.
Helen was her name."
[Lavinia:] "What did they want her back for?"
[Spirit:] "Her husband's honor demanded it."
[Lavinia:] "I should think his honor demanded that he divorce her and find himself a decent wife."
[Spirit:] "Lavinia, these people were Greeks."
"""
: -- from her book [[Lavinia|https://en.wikipedia.org/wiki/Lavinia_(novel)]]
"""
I wrote so I could say I was truly paying attention. Experience in itself wasn’t enough. The diary was my defense against waking up at the end of my life and realizing I’d missed it.
[…]
The trouble was that I failed to record so much.
I’d write about a few moments, but the surrounding time — there was so much of it! So much apparent nothing I ignored, that I treated as empty time between the memorable moments.
[…]
I tried to record each moment, but time isn’t made of moments; it contains moments. There is more to it than moments.
So I tried to pay close attention to what seemed like empty time.
[…]
I wanted to comprehend my own position in time so I could use my evolving self as completely and as usefully as possible. I didn’t want to go lurching around, half-awake, unaware of the work I owed the world, work I didn’t want to live without doing.
"""
: -- from her book "Ongoingness: The End of a Diary" [[(on GD)|https://drive.google.com/open?id=1wuDGFAxifYUveUjyWHcpFwI1SBr59DYd]]
The trouble with socialism is socialism; the trouble with capitalism is capitalists.
For forty years, the upright-seeming Enriqueta (Argentina’s foremost expert in art authentication) has been using her authority for a most nefarious purpose: granting certificates of authenticity to outright forgeries.
Enriqueta’s defense of her crookedness is, if not entirely convincing, eloquent. It’s not just the commissions she earns, or the satisfaction of stealing from the rich:
>Rather, she said, she wanted to raise the bar for art in general: the true measure of a painting, she said, was how good it was, not the accuracy of the signature in the corner.
>
>“Can a forgery not give as much pleasure as an original? Isn’t there a point when fakes become more authentic than originals? And anyway,” she added, “isn’t the real scandal the market itself?”
[real value] [fraud]
The true sage is not he who sees, but he who, seeing the furthest, has the deepest love for mankind.
The true triumph of reason is that it enables us to get along with those who do not possess it.
compare with [[Robert Brault]]:
It is hard to reason with someone who regards truth as one school of thought.
The truth is not always beautiful, nor beautiful words the truth.
::― Lao Tzu, Tao Te Ching
The truth is that as a man’s real power grows and his knowledge widens, ever the way he can follow grows narrower: until at last he chooses nothing, but does only and wholly what he must do.
: -- from her 1^^st^^ book of the Earthsea series
[choice] [inevitability] [morality]
The truth is that even big collections of ordinary books distort space, as can readily be proved by anyone who has been around a really old-fashioned secondhand bookshop, one of those that look as though they were designed by M. C. Escher on a bad day and has more staircases than storeys and those rows of shelves which end in little doors that are too small for a full-sized human to enter.
The relevant equation is:
Knowledge = power = energy = matter = mass;
a good bookshop is just a genteel Black Hole that knows how to (pull you in to) read.
: – from [[his|Terry Pratchett]] book //“Guards! Guards!”// (in a Footnote)
[evocative imagery] [descriptive] [astronomy]
The truth is that, whatever happens after death, it is possible to justify a life of spiritual practice and self transcendence without pretending to know things we do not know.
::-- Sam Harris in his book //Waking Up//
“The two cultures” is the hugely influential 1959 lecture, also published in book form that year, by C. P. Snow. According to Snow, on one side were the humanists, on the other the scientists, and between them lay a shameful “gulf of mutual incomprehension.”^^1^^
Which side are you on? Snow offered a litmus test: If you can’t describe the second law of thermodynamics, you’re just as illiterate as any boffin who can’t quote Shakespeare.
In the 21st century, the two cultures are still with us, but the fault lines have shifted. Plenty of people can talk about thermodynamics and Shakespeare with equal facility; for that matter, no one has ever explained the second law better than Tom Stoppard in “Arcadia” (“You cannot stir things apart”). You’re probably comfortable with scientific expressions like “litmus test.” The question now is, can you explain a hash table? A linked list? A bubble sort? Maybe you can write — but can you code?
[...]
Must one learn computer programming, then, to qualify as literate? Of course not. It doesn’t hurt to be aware of code, though. One of these days code will be aware of us.
: — from [[his|James Gleick]] article in the NYT titled [["A Unified Theory"|https://www.nytimes.com/2014/08/24/books/review/geek-sublime-by-vikram-chandra.html]] reviewing [[Vikram Chandra]]'s book "//Geek Sublime//"
----
^^1^^ See [[Marcelo Gleiser]]'s [[conclusion|We need to reach beyond traditional disciplinary boundaries to create truly cross-disciplinary ways of thinking. It is no longer enough to read Homer and Einstein or Milton and Newton as disjoint efforts to explore the complexities of the world and of human nature. The new mindset proposes that the complexities of the world are an intrinsic aspect of human nature as we experience reality. We cannot separate ourselves from a world that we are a part of. Any description or representation, any feeling or interpretation, is a manifestation of this embedding. Who we are and what we are form an irreducible whole.]] in light of C. P. Snow's observations of "The Two Cultures".
The two powers which in my opinion constitute a wise man are those of bearing and forbearing.
Or as [[Norman Fischer]] wrote:
> [[A fierce Zen master and a strict meditation schedule are not required for the production of catastrophes. Life will do it for us quite naturally. Any moment is a catastrophe, a total disaster, a fierce and bracing challenge, if we are awake to it. Any moment calls for forbearance.]]
The ultimate goal of the educational system is to shift to the individual the burden of pursing his own education.
The ultimate metaphysical secret, if we dare state it so simply, is that there are no boundaries in the universe. Boundaries are illusions, products not of reality but of the way we map and edit reality. And while it is fine to map out the territory, it is fatal to confuse the two.
: ― In [[his|Ken Wilber]] book //No Boundary: Eastern and Western Approaches to Personal Growth//
(and also as observed by [[Halford John Mackinder]] about [[the unity of knowledge|Knowledge is one. Its division into subjects is a concession to human weakness.]] ).
The ultimate perfection of patience does not come from endurance or a re-evaluation of a situation. Rather it comes from the absence of our habitual, automatic triggers and reactive hooks to the challenges of life. Fully mature, patience is effortless. It is not a doing at all.
The Brahmana Samyutta in the Samyutta Nikaya tells the story of an angry man who insulted the Buddha. The Buddha simply asked the man if people ever visited him in his home.
Surprised at the change of topic, the man answered yes. The Buddha then asked if he ever offered to feed his guests. When the man replied yes again, the Buddha asked what would happen if they refused to accept the food? Who would the food belong to then? The man said that, of course, it would still belong to him.
The Buddha then calmly and, I imagine, kindly said, “In the same way, I do not accept your insults. They remain with you.”
As the inimitable [[Terry Pratchett|http://wiki.lspace.org/mediawiki/Biography]] (Sir Terry, mind you :) [[puts it|http://discworld.wikia.com/wiki/The_Fifth_Elephant]], in this conversation (happening in a [[boat|Life is like stepping onto a boat that is about to sail out to sea and sink.]]) between [[Sam Vimes|http://discworld.wikia.com/wiki/Samuel_Vimes]] (a policeman from [[Terry Pratchett]]'s Discworld book series. His full name and title is His Grace, The Duke of Ankh, Commander Sir Samuel Vimes) and [[DEATH|http://www.chrisjoneswriting.com/death.html]] (//Always// "speaking" in Capital Letters):
"""
GOOD MORNING.
Vimes blinked. A tall dark robed figure was now sitting in the boat.
'Are you Death?'
IT'S THE SCYTHE, ISN'T IT? PEOPLE ALWAYS NOTICE THE SCYTHE.
'I’m going to die?'
POSSIBLY.
‘Possibly? You turn up when people are //possibly// going to die?’
OH, YES. IT’S QUITE THE NEW THING. IT’S BECAUSE OF THE UNCERTAINTY PRINICIPLE^^1^^.
'What’s that?’
I’M NOT SURE. [ha, ha :) ]
‘That’s very helpful.’
I THINK IT MEANS PEOPLE MAY OR MAY NOT DIE. I HAVE TO SAY IT’S PLAYING [[HOB|https://www.merriam-webster.com/dictionary/hob]]^^2^^ WITH MY SCHEDULE, BUT I TRY TO KEEP UP WITH MODERN THOUGHT.
"""
----
^^1^^ The [[Heisenberg Uncertainty Principle|https://en.wikipedia.org/wiki/Uncertainty_principle]] in Physics
^^2^^ - Hob = mischief, trouble, confusion
The unexamined life is surely worth living, but is the unlived life worth examining?^^1^^
It seems a strange question until one realizes how much of our so-called mental life is about the lives we are not living, the lives we are missing out on, the lives we could be leading but for some reason are not. What we fantasize about, what we long for, are the experiences, the things and the people that are absent. It is the absence of what we need that makes us think, that makes us cross and sad. We have to be aware of what is missing in our lives — even if this often obscures both what we already have and what is actually available — because we can survive only if our appetites more or less work for us. Indeed, we have to survive our appetites by making people cooperate with our wanting.
: -- from his book [[Missing Out|https://www.brainpickings.org/2015/08/17/missing-out-adam-phillips/]].
[FOMO - Fear Of Missing Out]
----
^^1^^ - compared to what [[Parker Palmer]] had [[said|https://www.brainpickings.org/2015/08/10/parker-palmer-naropa-university-commencement-address/]]:
> "If the unexamined life is not worth living,” he [[counseled graduates|https://www.brainpickings.org/2015/08/10/parker-palmer-naropa-university-commencement-address/]], “it’s equally true that the unlived life is not worth examining."
```
What
is it about,
the universe,
the universe about us stretching out?
We within our brains
within it
think
we must unspin
the laws that spin it.
We think why
because we think
because.
Because we think,
we think
the universe about us.
But does it think,
the universe?
Then what about?
About us?
If not,
must there be cause
in the universe?
Must it have laws?
And what
if the universe
is not about us?
Then what?
What
is it about?
And what
about us?
```
THE UNIVERSE
Although it may at first appear formless, even chaotic as it crawls down the page, “The Universe” is an experiment in form. If we skim it quickly from top to bottom, we see four embedded columns: a "what” column, an “about” column, a “the universe" column (which is also a “because” or “be cause" column), and a "we think” column. Unlike most free-verse poems, in which line beginnings create a straight-line vertical left margin, “The Universe” has no meaningful left margin. It does, however, have something resembling a straight-line vertical right margin. If we hold the poem up to a mirror, noting the way it lies on the page, it more nearly resembles a poem using conventional typography. “The Universe,” then, is a reflection, a mirror image of what we expect to see when we look at the poem. Is this also what we see when we look at the universe? [[May Swenson]]'s highly, though idiosyncratically, structured poem implicitly raises and answers this question.
: -- analysy by Tom Hansen
"""
The universe may
be as great as they say.
But it wouldn't be missed
if it didn't exist.
"""
:: Nothing Is Indispensable : [[Grook|http://www.archimedes-lab.org/grooks.html]] to warn the universe against megalomania
The upside is that, the more confusing technology becomes, the more comfortable I am with death.
: ― in her book //"Did I Say That Out Loud?: Midlife Indignities and How to Survive Them"//
Art reveals something beyond the message. A story or poem may reveal truths to me as I write it. I don’t put them there. I find them in the story as I work.
And other readers may find other truths in it, different ones. They’re free to use the work in ways the author never intended.
''The use of the pot is where the pot is not.^^1^^ A poem of the right shape will hold a thousand truths. But it doesn’t say any of them.''
My reader gets out of my pot what she needs, and she knows her needs better than I do. My only wisdom is knowing how to make pots. Who am I to preach?
No matter how humble the spirit it’s offered in, a sermon is an act of aggression.
: -- from [[excerpts from the book Words Are My Matter|https://library.hcplonline.org/Mobile/BakerAndTaylor/Excerpt?ISBN=9781618731340&UPC=&position=1]]
----
^^1^^ compare to [[Lao Tzu]]'s [[spokes and wheel metaphores|Thus what we gain is Something, yet it is by virtue of Nothing that this can be put to use.]]
The value of marriage is not that adults produce children but that children produce adults.
<<comparequote "Haggai Mark" "Wisdom is hereditary - You get it from your children.">>
In describing the translation of the Bible into German that they published in the 1920s, Franz Rosenzweig and Martin Buber used the word Verdeutschung rather than the standard German word for translation (Übersetzung). Verdeutschung obviously means “a rendering into German,” but it is also the Yiddish word for both translation into Yiddish and commentary (teitsh ḥumesh means something like “the Bible translated and explained in Yiddish”). It is doubly ironic that Yiddish refers to itself as teitsh—that is, German—and to translation into Yiddish as “to render into German.”
By using this rare German word with its Yiddish reverberations [Teitsch vs. Deutsch], Rosenzweig and Buber were hinting that one goal of the Bible translation was not so much to translate the Bible into “pure” German, as Martin Luther had, but to infuse German with the intonations of the original Hebrew and thus make it a “Jewish language.” And they performed this linguistic magic with the very word they chose to describe their project.
: -- From [[his|David Biale]]'s book //“Cultures of the Jews.”//
The very thing about people that makes the human race interesting is also the thing that makes it so hard to get anything done without the most horrible confusions: no two people think exactly the same way about anything.
<<comparequote "Terry Pratchett" "Most of the great triumphs and tragedies of history are caused not by people being fundamentally good or fundamentally evil, but by people being fundamentally people." "understanding and accepting human nature">>
The virtue of forbearance: just holding on for dear life is what makes life dear.
-- from the book //Sailing Home// by Norman Fischer
Synonyms of forbearance: tolerance, patience, resignation, endurance, fortitude, stoicism; leniency, clemency, indulgence;
restraint, self-restraint, self-control
On the common human experience:
>The vociferous [vehement or clamorous] catastrophes of a general order — fires, wars, epidemics — are one single pain, illusorily multiplied in many mirrors.
>And yet, and yet… Denying temporal succession, denying the self, denying the astronomical universe, are apparent desperations and secret consolations. Our destiny … is not frightful by being unreal; it is frightful because it is irreversible and iron-clad. Time is the substance I am made of. Time is a river which sweeps me along, but I am the river; it is a tiger which destroys me, but I am the tiger; it is a fire which consumes me, but I am the fire. The world, unfortunately, is real; I, unfortunately, am Borges.
: -- from his 1946 essay //A New Refutation of Time//
(This echoes [[Sara Jenkins]]'s [[We're all in the same boat on the sea of suffering.]])
The “technique,” or treatment, of a problem begins with its first expression as a question. The way a question is asked limits and disposes the ways in which any answer to it — right or wrong — may be given.
If we are asked: “Who made the world?” we may answer: “God made it,” “Chance made it,” “Love and hate made it,” or what you will. We may be right or we may be wrong. But if we reply: “Nobody made it,” we will be accused of trying to be cryptic, smart, or “unsympathetic.” For in this last instance, we have only seemingly given an answer; in reality we have rejected the question.
The questioner feels called upon to repeat his problem. “Then how did the world become as it is?” If now we answer: “It has not ‘become’ at all,” he will be really disturbed. This “answer” clearly repudiates the very framework of his thinking, the orientation of his mind, the basic assumptions he has always entertained as commonsense notions about things in general. Everything has become what it is; everything has a cause; every change must be to some end; the world is a thing, and must have been made by some agency, out of some original stuff, for some reason.
: -- From her 1942 book //Philosophy in a New Key: A Study in the Symbolism of Reason, Rite, and Art// (covered in [[BrainPickings|https://www.brainpickings.org/2016/04/21/susanne-langer-philosophy-in-a-new-key-questions-answers/]].)
(see also [[Krista Tippett]]'s insight into [[the power of questions|A question is a powerful thing, a mighty use of words. Questions elicit answers in their likeness. Answers mirror the questions they rise, or fall, to meet.]]).
The way we deal with loss shapes our capacity to be present to life more than anything else. The way we protect ourselves from loss may be the way in which we distance ourselves from life.
Many people are aware of the Weak and Strong Anthropic Principles. The Weak One says, basically, that it was jolly amazing of the universe to be constructed in such a way that humans could evolve to a point where they make a living in, for example, universities, while the Strong One says that, on the contrary, the whole point of the universe was that humans should not only work in universities but also write for huge sums books with words like “Cosmic” and “Chaos” in the titles.†
: -- from [[his|Terry Pratchett]] book //"Hogfather"//
----
† And they are correct. The universe clearly operates for the benefit of humanity. This can be readily seen from the convenient way the sun comes up in the morning, when people are ready to start the day.
: -- from https://www.hjkeen.net/halqn/dscwldd4.htm
The whole modern world has divided itself into Conservatives and Progressives. The business of Progressives is to go on making mistakes. The business of the Conservatives is to prevent the mistakes from being corrected.
The whole purpose of places like Starbucks is for people with no decision-making ability whatsoever to make six decisions just to buy one cup of coffee. Short, tall, light, dark, caf, decaf, low-fat, non-fat, etc. So people who don't know what the hell they're doing or who on earth they are can, for only $2.95, get not just a cup of coffee but an absolutely defining sense of self.
-- Tom Hanks say this line in Ephron's movie "You've Got Mail".
What can I say:
I think that she captured the //perfect blend// (after all, we are talking about coffee here :) of good psychological observation and plain American capitalism :)
[[John 3:8|https://newchristianbiblestudy.org/de/bible/hebrew-modern/john/3/8]] Hebrew Bible:
הרוח באשר יחפץ שם הוא נשב ואתה תשמע את קולו אך לא תדע מאין בא ואנה הוא הולך כן כל הנולד מן הרוח׃
King James Bible:
The wind bloweth where it listeth^^1^^, and thou hearest the sound thereof, but canst not tell whence it cometh, and whither it goeth: so is every one that is born of the Spirit.
Holman Christian Standard Bible:
The wind blows where it pleases, and you hear its sound, but you don't know where it comes from or where it is going. So it is with everyone born of the Spirit.
: -- from [[John 3:8|https://biblehub.com/text/john/3-8.htm]]
----
^^1^^ lust, desire, want, pleasure/please
[freedom] [impermanence] [ever changing]
The wise programmer is told about Tao and follows it. The average programmer is told about Tao and searches for it. The foolish programmer is told about Tao and laughs at it.
If it were not for laughter, there would be no Tao.
- from [[The Tao of Programming|http://canonical.org/~kragen/tao-of-programming.html]]
"""
I invented a wonderful pen. Not a typewriter ...
I wanted to use just one hand, the right.
With my hand always bent,
the ink tube a vein in my wrist,
fixed between finger and thumb
the pen wrote as fast as I could feel.
It chose all the right words for my feelings.
But then, my feelings ran out through the pen.
It went dry.
I had a book of wonderful feelings,
but my right hand was paralyzed. I threw away the pen.
I invented a dream camera: a box, with a visor or mask ...
like a stereopticon.
When I awoke, I could view, and review, my dreams,
entire, in their depth.
Events, visions, symbols, colors without names, dazzled, obsessed me.
They scalded my sight. I threw away the camera.
I had a moving picture of my wonderful dreams, but I was blind.
So, with my left hand I wrote.
I had been lazy so long ...
The letters went backwards across the page.
Sometimes they went upside down:
a "q" for a "b," a “d” for a “p,"
or an “n” for a "u," an “m” for a "w.”
And it got worse.
Now, since I can't read, or see,
not even the mirror can tell me,
what I mean by the first line by the time I've written the last line.
But my feelings are back, and my dreams ...
What I write is so hard to write.
It must be hard to read.
So slow ...
So swift my mind, so stupid my pen.
I think I'll invent
a typewriter ...
For the left hand, and no eyes.
No! I throw away the thought.
But I have a wonderful mind: Inventive.
It is for you to find.
Read //me//.
Read my mind.
"""
From [[his|Stuart A. Kauffman]] article at Edge.org:
Agency: You are now reading this article, presumably on purpose. You are able to act on your own behalf. You are the clearest example we have of agency. It is utterly remarkable that agency has arisen in the universe — systems that are able to act on their own behalf. Systems that modify the universe on their own behalf. ''Out of agency comes value and meaning.'' This article either is, or is not interesting to you, hence is or is not valuable. It may change your world view, hence have deep meaning.
[...]
a bacterium, swimming up a glucose gradient, and performing work cycles, is an agent, and glucose has value and meaning for the bacterium, without assuming consciousness.
[...]
the biosphere and human culture are ceaselessly creative in ways that are fundamentally unpredictable and presumably non-algorithmic or machine like.
[...]
In short, in wondrous ways, these our universe, biosphere, econosphere, and culture are ceaselessly creative and emergent. The two cultures, science and humanities, stand united in this world view. ''Meaning and value have a scientific base.''
[...]
God is the most powerful symbol we have created. The Spaniards in the New World built their churches on the holy sites of those they vanquished. Notre Dame sits on a Druid holy site. Shall we use the God word? It is our choice. Mine is a tentative "yes". I want God to mean the vast ceaseless creativity of the only universe we know of, ours. What do we gain by using the God word? I suspect a great deal, for the word carries with it awe and reverence. If we can transfer that awe and reverence, not to the transcendental Abrahamic God of my Israelite tribe long ago, but to the stunning reality that confronts us, we will grant permission for a renewed spirituality, and awe, reverence and responsibility for all that lives, for the planet.
[...]
we can say, here is reality, is it not worthy of stunned wonder? What more could we want of a God? Yes, we give up a God who intervenes on our behalf. We give up heaven and hell. But we gain ourselves, responsibility, and maturity of spirit. I know that saying that ethics derives from evolution undercuts the authority of God as its source. But do we need such a God now? I think not. Nor do we need the spiritual wasteland that post-modernism has brought us.
The world is a looking-glass, and gives back to every man the reflection of his own face. Frown at it, and it will in turn look sourly upon you; laugh at it and with it, and it is a jolly kind companion; and so let all young persons take their choice.
:― in Vanity Fair
The world (and life and everything? :) is made up of four elements: Earth, Air, Fire and Water. This is a fact well known to everyone.
It’s also wrong.
There’s a fifth element, and generally it’s called Surprise.
Related to the above, and also coming in a group of four (or five! :) are the Biblical [["Four Riders"|https://en.wikipedia.org/wiki/Four_Horsemen_of_the_Apocalypse]] (Pestilence, War, Famine, Death ^^1^^) ([[hilariously portrayed|http://villains.wikia.com/wiki/Four_Horsemen_of_the_Apocalypse_(Good_Omens)]] in Neil Gaiman's and Terry Pratchett's book "Good Omens").
They seem to have a Fifth Supporter (Rider?):
[[Terry Pratchett]] (in his book "Thief of Time") actually has a Fifth Horseman, [[Kaos|https://wiki.lspace.org/mediawiki/Kaos]] (Yes, Kaos is written correctly. Kaos is the real chaos^^2^^. It is chaos with the complete absence of rules and not the chaos which can be used to draw [[pretty Mandelbrot patterns|https://www.google.com/search?source=univ&tbm=isch&q=pretty+Mandelbrot+patterns]].), but, as Sir Terry points out, he left the other four before they were famous because of artistic disagreements :)
----
^^1^^ see a fifth candidate (Hatred) as described in a poem by [[Wislawa Szymborska]]: [[Hatred|Hatred - poem by Wislawa Szymborska]]
^^2^^ See [[Jordan Peterson]]'s description of [[Chaos and other Elements|Things or objects are part of the objective world. They’re inanimate; spiritless. They’re dead. This is not true of chaos and order. Those are perceived, experienced and understood (to the degree that they are understood at all) as personalities]].
The world is much more interesting than any one discipline.
The world keeps ending but new people too dumb to know it keep showing up as if the fun's just started.
Gödel proved that the world of pure mathematics is inexhaustible; no finite set of axioms and rules of inference can ever encompass the whole of mathematics; given any set of axioms, we can find meaningful mathematical questions which the axioms leave unanswered.
I hope that an analogous situation exists in the physical world. If my view of the future is correct, it means that the world of physics and astronomy is also inexhaustible; no matter how far we go into the future, there will always be new things happening, new information coming in, new worlds to explore, a constantly expanding domain of life, consciousness
and memory.
: -- quoted in the book "//A Song for Molly//" by Jeremy Bernstein
[Goedel] [incompletenss]
"""
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one -- and preferably only one -- obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
"""
:: - Tim Peters, "The Zen of Python"
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
There ain't no answer. There ain't gonna be any answer. There never has been an answer. That's the answer.
There are always three^^1^^ speeches, for every one you actually gave. The one you practiced, the one you gave, and the one you wish you gave.
----
^^1^^ - [[I|Haggai Mark]] suspect there may be a fourth one: the one your listeners heard :-\
Reflection on what it is like to be a bat seems to lead us, therefore, to the conclusion that there are facts that do not consist in the truth of propositions expressible in a human language. We can be compelled to recognize the existence of such facts without being able to state or comprehend them.
: -- from his essay [[What is it like to be a bat|https://warwick.ac.uk/fac/cross_fac/iatl/study/ugmodules/humananimalstudies/lectures/32/nagel_bat.pdf]].
"""
"""
(Compare to Richard Hamming's [[Perhaps there are thoughts we cannot think]]).
(Compare to Thomas Nagel's [[Certainly it is possible for a human being to believe that there are facts which humans never will possess the requisite concepts to represent or comprehend.]]).
Once someone asked [the Buddha] for his secret in answering questions as effectively as he did.
He said that he had four ways of answering questions^^1^^:
''One way'' was categorically—simply to say yes or no without ambiguity.
''The second way'' was to examine the question analytically, clarifying definitions of terms, trying to determine what was actually being asked, usually by deconstructing the question. Most of the time when the Buddha employed this method, there was no need to answer the question: under analysis the question proved meaningless.
''The third way'' was by posing a counterquestion, whose purpose was to bring the questioner back to his or her own mind, redirecting attention away from the entanglement of the language of the question to something real that stood behind it.
''The fourth way'' was simply by putting the question aside, because some questions are so hopelessly entangled that to take them up on any terms at all would be to get stuck in them like flypaper—which doesn’t help. Trying to answer these questions is like trying to get through a wall by beating your head against it—it is ineffective and you get a sore head. To put the question aside is to walk around the wall without beating your head bloody. This way you do get to the other side, which is, after all, the important thing. So sometimes the Buddha’s response to a question was silence.
: -- from [[his|Norman Fischer]] book "//When You Greet Me I Bow//"
----
^^1^^ This reminds me of the 4 ways to ask a question, as described in the Passover/Pesach haggadah/Hagada/Hagaddah
There are lots of good things about getting old, though at the moment I’m forgetting what they are.
(compare to [[Old Age - poem by Julia Wiener]] (Hebrew poem)).
"There are more things in heaven and earth… than are dreamed of in your philosophy."
Hamlet's admonition (speaking to Horatio) urges us on when, as they always will, our philosophies produce anomalies. It answers the unspoken question, "WTF?" With every door into nature we nudge open, a hundred new doors become visible, each with it's own inscrutable combination lock. It's both an explanation and a challenge, because there's always more to know.
I like how it endlessly loops back on itself. Every time you discover a new thing in heaven or earth, it becomes part of your philosophy, which will eventually be challenged by new new things.
Like all explanations, of course, it has its limits. Hamlet says it to Horatio as a way of urging him to accept the possibility of ghosts (since Hamlet had just experienced talking with one).
It could just as well be used to prompt belief in UFOs, astrology, and even god—as if to say that that something is proved to exist by the very fact that you can't disprove it exists.
Still, the phrase can get us places. Not as a taxi to the end of thinking, but as a passport to exploration.
There are no hard problems, only problems that are hard to a certain level of intelligence. Move the smallest bit upwards [in level of intelligence], and some problems will suddenly move from “impossible” to “obvious.” Move a substantial degree upwards, and all of them will become obvious.
In wicked situations, experts do not have the liberty to train for their most challenging moments by trial and error. A team or organization that is both reliable and flexible, is like a jazz group. There are fundamentals -- scales and chords -- that every member must overlearn, but those are just tools for sensemaking in a dynamic environment.
There are no tools that cannot be dropped, reimagined, or repurposed in order to navigate an unfamiliar challenge. Even the most sacred tools. Even the tools so taken for granted they become invisible.
It is, of course, easier said than done. Especially when the tool is the very core of an organization's or team's culture.
(see another angle on [[the use of data and reason|In God We Trust, All Others Need to Bring Data.]]).
There are only two or three human stories, and they go on repeating themselves as fiercely as if they had never happened before.
: -- from [[her|Willa Cather]]'s book //O Pioneers!//
[literature] [plot]
There are patterns to life . . . Rhythms. It is so easy, while trapped in just the one life, to imagine that times of sadness or tragedy or failure or fear are a result of that particular existence. That it is a by-product of living a certain way, rather than simply living. I mean, it would have made things a lot easier if we understood there was no way of living that can immunise you against sadness. And that sadness is intrinsically part of the fabric of happiness. You can’t have one without the other. Of course, they come in different degrees and quantities. But there is no life where you can be in a state of sheer happiness for ever. And imagining there is just breeds more unhappiness in the life you’re in.
: -- in his book //The Midnight Library//
there are promising engineers, and there are old engineers, but there are no promising old engineers - they don’t make promises!
Surprisingly, not giving up—ever—also makes an appearance in the optimal stopping literature. It might not seem like it from the wide range of problems we have discussed, but there are sequential decision-making problems for which there is no optimal stopping rule.
A simple example is the game of “triple or nothing.” Imagine you have $1.00, and can play the following game as many times as you want: bet all your money, and have a 50% chance of receiving triple the amount and a 50% chance of losing your entire stake. How many times should you play? Despite its simplicity, there is no optimal stopping rule for this problem, since each time you play, your average gains are a little higher. Starting with $1.00, you will get $3.00 half the time and $0.00 half the time, so on average you expect to end the first round with $1.50 in your pocket. Then, if you were lucky in the first round, the two possibilities from the $3.00 you’ve just won are $9.00 and $0.00—for an average return of $4.50 from the second bet.
The math shows that you should always keep playing. But if you follow this strategy, you will eventually lose everything. ''Some problems are better avoided than solved.''^^1^^
: -- from [[his|Brian Christian]] book //“Algorithms to Live By”//
----
^^1^^ as some questions are "not worth" asking (because [[Certainly it is possible for a human being to believe that there are facts which humans never will possess the requisite concepts to represent or comprehend.]]?
sunt lacrimae rerum et mentem mortalia tangunt. ~= the world is a world of tears (or alternatively: there are tears in the nature of things) and the burdens of mortality touch the heart (or alternatively: and death affects the mind).
: -- Book I, line 462 of the Aeneid (c. 29–19 BC), by Roman poet Virgil (Publius Vergilius Maro) (70–19 BC).
(this echoes [[The First Noble Truth]]^^1^^ (and the approach to death) of Buddhism).
----
^^1^^ out of four (The Four Noble Truths).
There are things known, and things unknown, and in between are the Doors.
Attributed to William Blake’s circa 1790 work “The Marriage of Heaven and Hell” contained a quote that famously spoke of perception and metaphorical doorways:
>If the doors of perception were cleansed, every thing would appear to man as it is: infinite.
There are two things of which a man cannot be careful enough: of obstinacy if he confines himself to his own line of thought; of incompetency, if he goes beyond it.
Which, I think, is posing a "balanced dichotomy' similar to the one expressed by [[Rabbi Tarfon]]:
>It is not for you to finish the task, but nor are you free to desist from it.
There are two times in a man’s life when he should not speculate: when he can’t afford it, and when he can.
[money] [investment] [gamble]
There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies.
The first method is far more difficult. It demands the same skill, devotion, insight, and even inspiration as the discovery of the simple physical laws which underlie the complex phenomena of nature.
[programming advice] [programming technique] [elegance] [simplification]
From [[The Philosophers Mail|http://thephilosophersmail.com/wp-content/uploads/2014/04/Ten-Virtues.pdf]], (associated with the philosopher [[Alain de Botton]]), now "reincarnated" as [[The School of Life|http://www.theschooloflife.com/]].
It's an online publication focusing on news from a different perspective, which is much more sensical, and absolutely useful:
>There are two ways of looking at things: picking out what’s unique, and being attentive to what’s recurring. The news is based on the former, philosophy on the latter. Which means that the daily diet of information and opinion tends to miss much. News, we concluded, is really what you need to know now, rather than what has just happened. The ideas of the [[Stoics|http://thephilosophersmail.com/perspective/the-great-philosophers-2-the-stoics/]] or of [[Lao Tzu|http://thephilosophersmail.com/perspective/the-great-eastern-philosophers-lao-tzu/]] might be urgent news in our lives, even though they have been around in the cultural ether for two millennia.
(also see what [[Amanda Ripley]] had to say about [[How to Write Better News]]).
"""
There are usually thought to be three positions on the matter of God’s existence:
“I believe that God exists” (theism);
“I don’t believe that God exists” (atheism); and
“I can’t tell for sure whether God exists” (agnosticism).
Dr. Konner proposes a fourth claim, namely: “Huh?”
What he means is that he doesn’t understand what’s meant by “God.”
Does the term signify the God described by the prophet Ezekiel? Does it signify karma? Or Shiva, the Hindu god of destruction?
"""
:-- from his book //Believers: Faith in Human Nature//
(reviewed in an article [[The Future, Not Secular|https://www.wsj.com/articles/believers-review-the-future-not-secular-11569620253]])
There is a condition worse than blindness, and that is, seeing something that isn't there.
From __Anthem__ by Leonard Cohen:
"""
The birds they sang
at the break of day
Start again
I heard them say
Don’t dwell on what
has passed away
or what is yet to be….
Ring the bells that still can ring
Forget your perfect offering
There is a crack in everything
That’s how the light gets in.
"""
There is a gap between what we want and what we can have, and that gap ... is our link, our connection, to the world.
- compare to the Buddhist view: [[The First Noble Truth]]. I think that both say that suffering/frustration are inevitable, but also essential, since they are what connects us to reality (for better (striving, betterment, [[Tikkun Olam]], etc.) and for worse (sinking, bitterness, envy, etc.))
When asked whether there was a kind of kinship between poets and mathematicians^^1^^, [[Borges|Jorge Luis Borges]] himself replied:
>My mathematics is very slight. But I have read and reread [[Bertrand Russell]]. And I think there should be a kinship. And I suppose there is. There is a kinship between all things, especially between poets and mathematicians, and poets and philosophers, who are a measure of poets, I should say.
----
^^1^^ in connection with his book "Library of Babel" , as mentioned in an article titled [["THE IMAGINATIVE MATHEMATICS OF (William Goldbloom) BLOCH’S UNIMAGINABLE MATHEMATICS OF BORGES’S LIBRARY OF BABEL"|https://logicophilosophicus.org/borges-and-mathematics/review.pdf]] by [[Curtis Tuckey|http://logicophilosophicus.org/curtis-tuckey/curtis-tuckey-cv.htm]].
There is a logical explanation for everything, often mistaken for the reason it happened.
There is a moment in every dawn when light floats, there is the possibility of magic. Creation holds its breath.
[sunrise] [sunset] [beauty]
The answer to what makes wild animals wild might seem surprising: Could it be culture?
There is a peculiar arrogance in the widespread assumption that culture is what makes humans different from other creatures: We have it and they don’t. But as Mr. [Carl] Safina points out^^1^^,
> assuming that other animals don’t have culture because they don’t have human culture is like thinking that other creatures don’t communicate because they don’t have human communication.
>[...]
>An individual receives genes only from [its] parents, but can receive culture from anyone and everyone in the social group . . . and because culture improves survival, culture can lead where genes must follow and adapt...
>culture-based characteristics can actually cause speciation, because individuals who share a particular cultural tradition often avoid those whose styles are different. As cultural distinctions literally divide and distance creatures from one another, their genetic branches can drift apart.
: -- from a [[book review by David P. Barash|https://www.wsj.com/articles/becoming-wild-review-creatures-on-their-own-terms-11590184952]]
----
^^1^^ in his book //Becoming Wild//
There is a rumour going around that I have found God. I think this is unlikely because I have enough difficulty finding my keys, and there is empirical evidence that they exist.
There is a strong parallel between language as a sign system and Interface Theory of Perception (ITP)^^1^^. Indeed, language might be considered an interface between humans and their perceptions: an interface of meanings. Alternatively, ITP might be thought of as a system of signs created by our sensory apparatuses: the signs are the objects we perceive, and collectively these signs create systems of meaning. ITP thus might be the basis for a semiotics [the study of signs and systems of signs] of perception.
----
^^1^^ see [[Donald D. Hoffman]] on [[how evolution shaped our perception for better survival/fit|We’ve been shaped to have perceptions that keep us alive, so we have to take them seriously. I’ve evolved these symbols to keep me alive, so I have to take them seriously. But it’s a logical flaw to think that if we have to take it seriously, we also have to take it literally.]].
There is a wisdom that is woe; but there is woe that is madness. And there is a Catskill eagle in some souls that can alike dive down into the blackest gorges, and soar out of them again and become invisible in the sunny spaces.
: -- from //Moby-Dick//
[optimism]
The Guide says there is an art to flying", said Ford, "or rather a knack. The knack lies in learning how to throw yourself at the ground and miss."
::― Douglas Adams, Life, the Universe and Everything
Perspective/point of view/reframing is key... :)
Q: there is equally as much evidence for God as there is for dragons. But somehow, people regard dragons in a book as silly^^1^^, whereas they wouldn’t regard the idea of God in a book as silly; that they understand that the idea of God, even if it’s fictional, is incredibly powerful to people, but people seem to have a problem with the idea that dragons might have the same sort of emotional power.
A: You put it very well there; it does seem to me odd. Well, I suppose it’s not odd. I guess people feel, in a modern world, that we’ve superseded the beliefs in dragons and demons; that creatures like that are an expression of our fears and hopes and aspirations and longings^^1^^. But God hasn’t really passed out of our imaginative thinking.
In a way, science and exploration — just knowledge of the world — seems to have removed those other creatures. But God seems to be beyond the reach of science and all these things. And so God isn’t childish, God isn’t fantasy, because God is still recognized as a legitimate expression of people’s profound beliefs about how the world works.
: -- Kazuo Ishiguro (author of //Never Let me Go//) in [[an interview|http://www.lightspeedmagazine.com/nonfiction/interview-kazuo-ishiguro/]] about his book //The Buried Giant//
----
^^1^^ See what [[Ursula K. Le Guin]] [[wrote about it|The dragons are avaricious, insatiable, treacherous; without pity, without remorse. But are they evil? Who am I, to judge the acts of dragons? . . . They are wiser than men are. It is with them as with dreams. We men dream dreams, we work magic, we do good, we do evil. The dragons do not dream. They are dreams. They do not work magic: it is their substance, their being. They do not do; they are.]]
There is hopeful symbolism in the fact that flags do not wave in a vacuum.
There is no afterlife. We just die, and that’s it.
Which is why what we do in this life matters so much — and why how we treat others in the here and now is more important than how they might be treated in some hereafter that may or may not exist.
from his article at https://michaelshermer.com/2005/06/why-i-am-an-atheist/
<<comparequote "Ian McEwan" "Those who believe in the afterlife will never be disappointed. That's because if they're wrong, they'll never know about it." "the afterlife">>
:{{imgquote}} There is no doubt that the selection of topics we address mathematically has played an important role in math's perceived effectiveness. But mathematics would not work at all were there no universal features to be discovered. You may now ask: Why are there universal laws of nature at all?
:{{imgblank}}
: Or equivalently: Why is our universe governed by certain symmetries and by locality? I truly do not know the answers, except to note that perhaps in a universe without these properties, complexity and life would have never emerged, and we would not be here to ask the question.
(compare to [[Brian Martin]]'s take on [[the "solidity" of mathematics|Mathematical concepts, such as the number system, can be understood as chosen for their usefulness rather than their inherent correspondence with the nature of the universe. Mathematics can be considered a system of logic, but given that there are many possible logical systems, the choice of a particular system can be linked to its usefulness for human purposes.]]).
There is no exercise better for the heart than reaching down and lifting someone up.
There is no hope; but I may be wrong.
There’s a famous quote from the mathematician [[G. H. Hardy]] that says, “There is no permanent place in the world for ugly mathematics.” But ugly mathematics still has a role.
The first step is to establish the theorem, so that you can say, “I worked hard. I got the proof. It’s 20 pages. It’s ugly. It’s lots of calculations, but it’s correct and it’s complete and I’m proud of it.”
If the result is interesting, then come the people who simplify it and put in extra ideas and make it more and more elegant and beautiful. And in the end you have, in some sense, [[the Book proof|This one is from The (Divine) Book. You don’t have to believe in God, but you should believe in The Book.]].
To do these short and surprising proofs, you need a lot of confidence^^1^^. And one way to get the confidence is if you know the thing is true. If you know that something is true because so-and-so proved it, then you might also dare to say, “What would be the really nice and short and elegant way to establish this?” So, I think, in that sense, the ugly proofs have their role.
----
^^1^^ you need a lot of confidence, or [[strong conviction/belief|When a person must cross an exceedingly narrow bridge, the general principle and the essential thing is to not frighten oneself at all.]].
There is no way to happiness, happiness is the way.
[[You can't do something to get joy. Joy is what's there when you stop doing everything else.]]
A number of years ago, when I was a freshly-appointed instructor, I met, for the first time, a certain eminent historian of science. At the time I could only regard him with tolerant condescension.
I was sorry of the man who, it seemed to me, was forced to hover about the edges of science. He was compelled to shiver endlessly in the outskirts, getting only feeble warmth from the distant sun of science-in-progress; while I, just beginning my research, was bathed in the heady liquid heat up at the very center of the glow.
In a lifetime of being wrong at many a point, I was never more wrong. It was I, not he, who was wandering in the periphery. It was he, not I, who lived in the blaze.
I had fallen victim to the fallacy of the 'growing edge;' the belief that only the very frontier of scientific advance counted; that everything that had been left behind by that advance was faded and dead.
But is that true? Because a tree in spring buds and comes greenly into leaf, are those leaves therefore the tree? If the newborn twigs and their leaves were all that existed, they would form a vague halo of green suspended in mid-air, but surely that is not the tree. The leaves, by themselves, are no more than trivial fluttering decoration. It is the trunk and limbs that give the tree its grandeur and the leaves themselves their meaning.
There is not a discovery in science, however revolutionary, however sparkling with insight, that does not arise out of what went before. 'If I have seen further than other men,' said [[Isaac Newton]], 'it is because I have stood on the shoulders of giants.
: ― from [[his|Isaac Asimov]] book //Adding a Dimension: Seventeen Essays on the History of Science//
Compare with [[W. S. Anglin]]'s observation:
> [[Mathematics is not a careful march down a well-cleared highway, but a journey into a strange wilderness, where the explorers often get lost. Rigour should be a signal to the historian that the maps have been made, and the real explorers have gone elsewhere.]]
There is nothing so wretched or foolish as to anticipate misfortunes. What madness it is in your expecting evil before it arrives!
: — Epistolae Ad Lucilium. XCVIII.
There is nothing to writing. All you do is sit down at a typewriter and bleed.
Hemingway also famously "penned" a prized "Six Word Story":
> Baby shoes, for sale, never worn.
The success of Upper Confidence Bound algorithms^^1^^ offers a formal justification for the benefit of the doubt. Following the advice of these algorithms, you should be excited to meet new people and try new things—to assume the best about them, in the absence of evidence to the contrary. In the long run, optimism is the best prevention for regret.
and as [[Winston Churchill]] had said:
> “For myself I am an optimist. It does not seem to be much use being anything else.”
: -- from [[his|Brian Christian]] book //“Algorithms to Live By"//
[success] [adventure] [exploring] [friendship] [relationship]
----
^^1^^ The “Upper Confidence Bound" algorithm says, quite simply, to pick the option for which the top of the confidence interval (the so-called error bars that extend above and below any data point, indicating uncertainty in the measurement; the error bars show the range of plausible values that the quantity being measured could actually have) is highest.
There is something in experience that relates, however inexactly, to benevolence and also altruism. There is something in the nature of most of us that takes pleasure in the thought of a humane and benign social order.
-- from Marilynne Robinson's deeply thoughtful book //Absence of Mind//.
From [[David Deutsch]]'s conversation with Chris Anderson (of TED fame) titled [["On the infinite reach of knowledge"|https://www.ted.com/talks/the_ted_interview_david_deutsch_on_the_infinite_reach_of_knowledge/transcript]]
CA: [About the possibility of civilizations self-destructing:] it's possible that as technologies get more powerful, the stakes get ever higher.
It's possible to imagine that knowledge brings with it the potential for unlimited destructive power. And that as the sort of Humpty-Dumpty theory of -- you know, it's easier to break things than to make things.
DD: Yes. Of course, that's a possibility, because if it wasn't a possibility, then continued progress would be inevitable, which it isn't. But the knowledge of how to defend civilization against existential threats is also a form of knowledge, which is unlimited. So if we fail to create that knowledge, we're doomed. If we do create that knowledge, we're not doomed. That story is the same as with all knowledge. So the possibility is there for us to create it, for, as I put it, for the good guys to stay ahead of the bad guys.
But also, there is something about the bad actors that makes them progress more slowly. That is, they are enemies of civilization. Therefore, they are wrong. Right? And therefore, they have to be in a state of mind that can tolerate being wrong, and therefore, they can't tolerate a tradition of criticism [which is the base of Western/Scientific-minded civilization]. In fact, with the realistic ones that you perhaps have in mind, destroying the tradition of criticism is their main objective. That's what their grievance is. So that makes them slower. That makes them inherently trail the good guys. But that's just a tendency, it need not be so that there could be a breakthrough by some of the bad guys, and that's why I say we have a moral obligation to stay ahead of them.
CA: That's a beautifully optimistic argument, in a way. That there is such a thing as a clever devil, but not as a super clever devil, because by being a devil, you're taking away the ability to be truly clever in the long term.
[optimism] [doomed world]
There may be some good news for humans in the fact that one can be intelligent in many different ways. It gives us hope that we may endow robots with intelligence superior to ours but only in directions that are useful and not threatening to us. Also, it makes it clear that there is no good reason to want to make robots that are exactly like humans.
The most singular capability of living organisms on Earth must be that of survival. Anything that survives for billions of years, and many millions of generations, must be good at it. Fortunately, there is no reason for us to endow robots with this same capability. Even if their intelligence becomes superior to ours in a wide range of measures, there is no reason to believe that they would deploy this in the interests of their survival over ours unless we go out of our way to make them do just that.
We have limited fear of domesticated animals. We do not necessarily have to fear intelligent robots either. They will not resist being switched off, unless we provide them with the same heritage of extreme survival training that our own ancestors had been subject to on Earth.
(see also [[Garry Kasparov]]'s take on [[Intelligent Machines|We confuse performance—the ability of a machine to replicate or surpass the results of a human—with method, how those results are achieved. This fallacy has proved irresistible in the domain of higher intelligence that is unique to Homo sapiens.]]).
If I had other senses, there are other things I should know. It is nonsense to suppose, when I have perceived the exquisite division of running water, or a flower, that my separate senses can make, that there would be nothing more to perceive were we but endowed with other modes of perception.
How could we imagine flavour, or perfume, without the senses of taste and smell? They are completely unimaginable.
There must be many exciting properties of matter that we cannot know because we have no way to know them.
: -- from her book //The Living Mountain//
(see also [[Richard Hamming]]'s take on [[human limitations|Perhaps there are thoughts we cannot think]]).
There was never yet an uninteresting life. Such a thing is an impossibility. Inside of the dullest exterior there is a drama, a comedy, and a tragedy.
There's a big difference between judgement and discernment.
from Kenneth Reitz [[webpage|https://www.kennethreitz.org/values/]]
There's a hell of a distance between wise-cracking and wit. Wit has truth in it; wise-cracking is simply calisthenics with words.
There's a myth that learning is for young people. But as the proverb says^^1^^, "It's what you learn after you know it all that counts."^^2^^ The middle years are great, great learning years. Even the years past the middle years.
: -- from [[his|John W. Gardner]] speech about [[Personal Renewal|http://www.pbs.org/johngardner/sections/writings_speech_1.html]]
----
^^1^^ If you pay attention, it's what you learn after you know it all that counts.
: -- the legendary basketball coach John Wooden
^^2^^ compare to [[Oscar Wilde]]'s [[I am not young enough to know everything.]]
From her book [[Lighthousekeeping|https://en.wikipedia.org/wiki/Lighthousekeeping]]^^1^^:
conversations between Pew, the old, blind lighthouse keeper and Silver, the 10 year old orphan apprentice he brought into the lighthouse he was tending to, at Cape Wrath (Scotland):
>'What was he like, Pew?'
>'Who, child?'
>'Babel Dark.'
>
>Pew sucked on his pipe. For Pew, anything to do
>with thinking had first to be sucked in through his
>pipe. He sucked in words, the way other people
>blow out bubbles.
>
>'He was a pillar of the community.'
>'What does that mean?'
>'You know the Bible story of Samson.' (and Delilah)
>'No, I don't.'
>'Then you've had no right education.'
>'Why can't you just tell me the story without
>starting with another story?'
>'Because there's no story that's the start of itself,
>any more than a child comes into the world
>without parents.'
and at another time:
>Tell me a story, Pew.
>
>What kind of story, child?
>A story with a happy ending.
>There’s no such thing in all the world.
>As a happy ending?
>As an ending.
----
^^1^^ - on the art of lighthousekeeping (from the book):
> Every lighthouse has a story to it - more than one, and if you sail from here to America, there'll not be a light you pass where the keeper didn't have a story for the seamen. In those days the seamen came ashore as often as they could, and when they put up at the inn, and they had eaten their chops and lit their pipes and passed the rum, they wanted a story, and it was always the lighthousekeeper who told it, while his Second or his wife stayed with the light.
>
>These stories went from man to man, generation to generation, hooped the sea-bound world and sailed back again, different decked maybe, but the same story. And when the lightkeeper had told his story, the sailors would tell their own, from other lights. A good keeper was one who knew more stories than the sailors.
There's nothing new under the sun, but there are new suns.^^1^^
[change] [perspective] [sci-fi] [optimism]
----
^^1^^ in rebuttal/response^^2^^ to [[vanity of vanities says Ecclesiastes, all is vanity.]] ?
^^2^^ see [[Wislawa Szymborska]]'s response in [[her Nobel Prize lecture|http://www.nobelprize.org/nobel_prizes/literature/laureates/1996/szymborska-lecture.html]]:
> [[Ecclesiastes, I’d also like to ask you what new thing under the sun you’re planning to work on now?]]
There’s a worry that somehow artificial intelligence will become superpowerful and develop goals of its own that aren’t the same as ours. One thing that I’d like to convince you of is that I believe that’s starting to happen already. We do have intelligences that are superpowerful in some senses, not in every way, but in some dimensions they are much more powerful than we [individuals] are, and in other dimensions much weaker. The interesting thing about them is that they are already developing emergent goals of their own that are not necessarily well aligned with our goals, with the goals of the people who created them, with the goals of the people they influence, with the goals of the people who feed them and sustain them, goals of the people who own them.
Those early intelligences are probably not conscious. It may be that there’s one lurking inside Google or something. I can’t perceive that. Corporations are examples. Nation states are examples. Corporations are artificial bodies. That’s what the word means. They’re artificial entities that are constructed to serve us, but in fact what happens is that they don’t end up serving exactly the founders, or the shareholders, not the employees that they serve, or their customers. They have a life of their own. In fact, none of those entities that are the constituents have control over them. There’s a very fundamental reason why they don’t. It’s Ashby’s Law of Requisite Variety, which states that in order to control something, you have to have as many states as the thing you’re controlling. Therefore, these supercomplicated superintelligences, by definition, are not controllable by individuals.
: -- from his [[interview at Edge.org on Emergences and AI|https://www.edge.org/conversation/w_daniel_hillis-emergences]]
[Artificial Intelligence]
There’s reading and then there’s reading. There is the gleaning or browsing or cherry-picking of information, and then there is the deep immersion in constructed textual worlds... These are the books that possess one and the books one wants to possess.
''Thesaurus''
"""
It could be the name of a prehistoric beast
that roamed the Paleozoic earth, rising up
on its hind legs to show off its large vocabulary,
or some lover in a myth who is metamorphosed into a book.
It means treasury, but it is just a place
where words congregate with their relatives,
a big park where hundreds of family reunions
are always being held,
house, home, abode, dwelling, lodgings, and digs
all sharing the same picnic basket and thermos;
hairy, hirsute, woolly, furry, fleecy, and shaggy
all running a sack race or throwing horseshoes,
inert, static, motionless, fixed and immobile
standing and kneeling in rows for a group photograph.
Here father is next to sire and brother close
to sibling, separated only by fine shades of meaning.
And every group has its odd cousin, the one
who traveled the farthest to be here:
astereognosis, polydipsia, or some eleven
syllable, unpronounceable substitute for the word tool.
Even their own relatives have to squint at their name tags.
I can see my own copy up on a high shelf.
I rarely open it, because I know there is no
such thing as a synonym and because I get nervous
around people who always assemble with their own kind,
forming clubs and nailing signs to closed front doors
while others huddle alone in dark streets.
I would rather see words out on their own, away
from their families and the warehouse of Roget,
wandering the world where they sometimes fall
in love with a completely different word.
Surely, you have seen pairs of them standing forever
next to each other on the same line inside a poem,
a small chapel where weddings like these,
between perfect strangers, can take place.
"""
(compare to [[On Indexes and Indexing]]).
Every generation, every century has had its life-altering technologies, right?
The railroad changed everything.
The telephone changed everything.
Electricity changed everything.
Fire changed everything.
But what is new about our technologies--of course, the pace is different, but I don't think that's really it. Because I think, in other generations, the pace of those things was equally completely disorienting.
It is the intimacy.
Our technologies are woven into the fabric of our days, into the fabric of our lives.
They are shifting the way we make and lead and learn and love.
They are woven into the human enterprise.
And what I also see is that these technologies, and the interconnected world and economies they've given us, have actually given us the tools, for the first time as a species, to think and act as a species.^^1^^
: -- from [[her|Krista Tippett]] conversation about [["The Art of Generous Listening"|https://www.youtube.com/watch?v=J5W36VWNd9E]] at Google.
----
^^1^^ this enables [[Our highest human calling is to help repair the part of the world that we can see and touch.]] ([[Tikkun Olam]])
They [politicians] are not just clueless, they are dynamically anticlueful.
They say the first sentence in any speech is always the hardest. Well, that one's behind me, anyway.
[...] my lecture will be rather short. All imperfection is easier to tolerate if served up in small doses.
- from [[her Nobel Prize lecture|http://www.nobelprize.org/nobel_prizes/literature/laureates/1996/szymborska-lecture.html]]. (see [[more of her speech|Ecclesiastes, I’d also like to ask you what new thing under the sun you’re planning to work on now?]])
Together they had overcome the daily incomprehension, the instantaneous hatred, the reciprocal nastiness, and fabulous flashes of glory in the conjugal conspiracy. It was time when they both loved each other best, without hurry or excess, when both were most conscious of and grateful for their incredible victories over adversity. Life would still present them with other moral trials, of course, but that no longer mattered: they were on the other shore.
:: ― Gabriel García Márquez, Love in the Time of Cholera
<<list-links "[tag{!!title}]">>
Things are not always what they seem; the first appearance deceives many; the intelligence of few perceives what has been carefully hidden in the recesses of the mind.
(sometimes "Things are not always what they seem" is attributed to Koheleth ([[Ecclesiastes]])).
Also compare to what [[Sam Harris]] wrote [[about knowing|We have long known that how things seem in the world can be misleading ... and yet ... through sustained introspection, how things seem can be brought into closer register with how they are.]].
"Things have been", says the legal mind, "and so we are here". The creative mind says "we are here because things have yet to be."
[ways of looking at things] [different perspective]
Chaos and order are two of the most fundamental elements of lived experience — two of the most basic subdivisions of Being itself. But they’re not things, or objects, and they’re not experienced as such.
Things or objects are part of the objective world. They’re inanimate; spiritless. They’re dead. This is not true of chaos and order. Those are perceived, experienced and understood (to the degree that they are understood at all) as personalities^^1^^—and that is just as true of the perceptions, experiences and understanding of modern people as their ancient forebears.
[[John Updike]] commented about it:
> Chaos is God's body. Order is the Devil's chains.
----
^^1^^ See [[Terry Pratchett]]'s take on [[Chaos (or Kaos) and other Elements|The world is made up of four elements: Earth, Air, Fire and Water. This is a fact well known to everyone. It’s also wrong. There’s a fifth element, and generally it’s called Surprise.]].
"""
Think left and think right and think low and think high.
Oh, the thinks you can think up if only you try!
"""
Thinking is the negotiation of relationships between our noisy representations inside our heads and "what's out there".
This is a wonderful day. I’ve never seen this one before.
Echoed in [[David Steindl-Rast]]'s:
> Joy is happiness that doesn’t depend on what happens.
: -- from a conversation with [[Krista Tippett]] on [["How to Be Grateful in Every Moment (But Not for Everything)"|https://onbeing.org/programs/david-steindl-rast-how-to-be-grateful-in-every-moment/#transcript]]
[gratefulness]
גם זה לבני אדם (Gam Ze Le-Bnei-Adam) - This is also fit for humans (possibly interpreted as: this is on a human scale; or, this, too, is in the human realm.)
(see also [[Part of being human]]).
* every human behavior, affliction, characteristic, no matter how "terrible/revolting/disgusting", is something we/humans are capable of (by definition; or else we wouldn't be doing/seeing them.) What I think it says is that anything we observe in ourselves and/or others, no matter how "horrible", is something we can relate to as humans. It sort of brings things down to "human scale", which seems to make it manageable.
* this is similar in sentiment to what the Latin poet [[Terence]] had said: “Nothing truly human is abhorrent to me.” (Homo sum: humani nil a me alienum puto.) ^^1^^
This is one of my [[Mom|Sylvia Mark]]'s "pearls of wisdom" which she had been saying on and off for many years^^2^^. I think that these beliefs helped her in difficult times. They condense her life experience in quite a succinct way.
<<comparequote "Arnold Bennett" "One loses, in the study of cause and effect, that absurd air which so many people have of being always shocked and pained by the curiousness of life. Such people live amid human nature as if human nature were a foreign country full of awful foreign customs. But, having reached maturity, one ought surely to be ashamed of being a stranger in a strange land!" "human behavior">>
----
^^1^^ - II think that this was also something Protagoras referred to, when he said:
>Man is the measure of all things.
^^2^^ I suspect that being schooled in both Latin and Greek, my mother got inspired by [[Terence]]'s saying about [[tolerance and forgiveness|I am a man, I consider nothing that is human alien to me.]].
This is the first, the wildest and the wisest thing I know: that the soul exists and is built entirely out of attentiveness.
This is the paradox of vision: Sharp perception softens our existence in the world.
This is the strangest of all paradoxes of the human adventure; we live inside all experience, but we are permitted to bear witness only to the outside. Such is the riddle of life and the story of the passing of our days.
[perception] [friendship] [intimacy]
This isn’t life in the fast lane, it’s life in the oncoming traffic.
[work]
[[Paul Erdős|Paul Erdos]], the famously eccentric, peripatetic and prolific 20^^th^^-century mathematician, was fond of the idea that God has a celestial volume containing the perfect proof of every mathematical theorem. “This one is from The Book,” he would declare when he wanted to bestow his highest praise on a beautiful proof.
Never mind that Erdős doubted God’s very existence. “You don’t have to believe in God, but you should believe in The Book,” Erdős explained to other mathematicians.
: -- from [[an interview with the mathematician Günter Ziegler,|https://www.quantamagazine.org/gunter-ziegler-and-martin-aigner-seek-gods-perfect-math-proofs-20180319/]] who co-authored (with Martin Aigner) the book //Proofs From THE BOOK// (and here's at least [[an earthly shadow of it|http://www.springer.com/us/book/9783662442043]] :).
(see also [[(Even a mathematical) proof, in the end, is something that convinces the reader of things being true. And whether the proof is understandable and beautiful depends not only on the proof but also on the reader: What do you know? What do you like? What do you find obvious?]]).
[beauty]
From his poem [[After Reading a Child’s Guide to Modern Physics|https://www.preposterousuniverse.com/blog/2006/11/01/after-reading-a-childs-guide-to-modern-physics/]]:
"""
This passion of our kind
For the process of finding out
Is a fact one can hardly doubt,
But I would rejoice in it more
If I knew more clearly what
We wanted the knowledge for,
Felt certain still that the mind
Is free to know or not.
"""
[curiosity]
The new modified tiddlers are tagged with "''hmark modification''"
!! Added a "comparequote" macro
* added a system tiddler macro to insert (compare/refer) to related quotes: at $:/macros/hmark/comparequote.js
** Usage: `<<comparequote "author" "quote" ["topic or keyword(s)"]>>`
*** example: `<<comparequote "G. K. Chesterton" "It is not bigotry to be certain we are right; but it is bigotry to be unable to imagine how we might possibly have gone wrong." "bigotry">>`
!! Added 2 buttons to the "Searching for a quote" tiddler
* added 2 buttons with button labels: "Create New Quote" and "Create New Author" to [[Searching for a quote]]
** The format/template for a button (for example the "Create New Author" button) is:
** the line $action-setfield - defines the tiddler name ("NewAuthor"), the default tags to put in ("author"), and the default tiddler text to put in (<<list-links "[tag{!!title}]">>')
** the line $action-sendmessage - defines which function to call when the button is pressed ("tm-edit-tiddler"), and, as the function parameter, the name of the new tiddler to create ("NewAuthor")
** then the button label is given (Create New Author)
```
<$button>
<$action-setfield $tiddler="NewAuthor" tags="author" text='<<list-links "[tag{!!title}]">>'/>
<$action-sendmessage $message="tm-edit-tiddler" $param="NewAuthor"/>
Create New Author
</$button>
```
!! Added a "quoteimage" tiddler
* Created a modified (from the shadow tiddler $:/core/images/quote) regular (non-shadow, non-system) tiddler for transcluding the quote image tiddler: [[imgquote]]
** modified the size from 22px to 12px
** see example of usage at [[Searching for a quote]]
** an __alternative way to quote__ is using stylesheets, like in [[By posing the unanswerable questions... |By posing the unanswerable questions of meaning, men establish themselves as question-asking beings. Behind all the cognitive questions for which men find answers, there lurk the unanswerable ones that seem entirely idle and have always been denounced as such. It is more than likely that men, if they were ever to lose the appetite for meaning we call thinking and cease to ask unanswerable questions, would lose not only the ability to produce those thought-things that we call works of art but also the capacity to ask all the answerable questions upon which every civilization is founded.]]
!! Added a "imgblank" tiddler
* Created a modified (from the shadow tiddler $:/core/images/blank) regular (non-shadow, non-system) tiddler for transcluding the blank image tiddler: [[imgblank]]
** modified the size from 22px to 12px
** see example of usage at [[we are messily slouching...|we are messily slouching towards a non-pastoral utopia on an asymptotic trajectory where reality gradually blurs into magic, waste into wealth, technology into nature and work into play.]]
!! Added another tiddler search box
* added a Search tiddler to the "Searching for a quote" tiddler (the 'home' or 'welcome' tiddler), by transcluding in the $:/core/ui/SideBarSegments/search tiddler.
!! added a regular expression search tiddler and tab
* added a regular expression -- [[regex search]] tiddler, and added it as a tab in the "side bar" (by tagging it "$:/tags/SideBar"), and the "advanced search" UI (by tagging it "$:/tags/AdvancedSearch").
** the search is case-insensitive (ignoring upper/lower case) by including (?i) in the reg exp.
** the code for the tiddler is:
```
\define makefilter() [regexp[(?i)$(pattern)$]] [regexp:text[(?i)$(pattern)$]] -[title[$:/temp/mysearch]]
<$edit-text tiddler="$:/temp/mysearch" tag="input" default=""/><br>
<$reveal state="$:/temp/mysearch" type="nomatch" text="">
<$vars pattern={{$:/temp/mysearch}}>
<$count filter=<<makefilter>>/> matches:<br>
<$macrocall $name="list-links" filter=<<makefilter>>/>
</$vars>
</$reveal>
```
*** the [[explanation of the code by Eric Shulman|https://groups.google.com/forum/#!topic/tiddlywiki/Eet6Tol9Tfw]]:
**** The "makefilter()" macro uses a variable named "pattern" that is defined outside the macro itself
**** The $vars widget retrieves the value stored in $:/temp/mysearch and sets the "pattern" variable, which surrounds the call to the list-links macro
**** You can't use a variable reference as a parameter in the `<<list-links ...>>` macro syntax, so we use the underlying `<$macrocall>` widget syntax instead
**** Note: I added a bit of extra output using the `<$count>` widget to show the number of matching results
!! Tip: how to list tiddlers as a table of contents/lost with hyperlinks
* instead of (in TW classic):
```
<<forEachTiddler
where
'tiddler.tags.contains("book-chapter") && tiddler.tags.contains("Happiness is an Inside Job")'
sortBy
'tiddler.title'>>
```
* write (in TW5):
```
<<list-links "[tag[Happiness is an Inside Job]]">>
and using 'and' condition for multiple tags:
<<list-links "[tag[What Technology Wants]tag[book-chapter]]">>
```
!! Added a "Created Timeline" side-bar tab
* Copied the [[timeline]] macro and called the newly copied tiddler [[timelineCreated]]
** tagged it with "$:/tags/Macro"
* Created a new tiddler called [[Created Timeline]] (this is the side bar tiddler), which calls the Macro [[timelineCreated]]
** in the macro call (inside [[Created Timeline]]) the number of tiddler titles to display is defined by the "limit" parameter. The default value (defined inside the macro [[timelineCreated]]) is 100, but the call in the [[Created Timeline]] asks for 20000
** tagged this new tiddler "$:/tags/SideBar" so it shows up as a side bar tab
!! Added the tiddler created date to every tiddler's subtitle
* Did Advanced Search (magnifying glass next to the search input field) on shadow tiddlers, looking for: $:/core/ui/ViewTemplate/subtitle
* modified the tiddler $:/core/ui/ViewTemplate/subtitle by copying the line for the "modified" date, and adding a new line for the "created" date:
```
, Created: <$view field="created" format="date" template={{$:/language/Tiddler/DateFormat}}/>
```
My [[Mom|Sylvia Mark]] used to say: Gam Et Ze Ya-avor ( גם את זה יעבור - "enhanced" Hebrew of: Gam Ze Ya-avor - גם זה יעבור) - This too shall pass.
Her attitude when saying this was one of consolation: it may be bad now, but it's not going to last forever (so it's not too bad).
[[Norman Lear |https://en.wikipedia.org/wiki/Norman_Lear]] (of [[Archie Bunker|https://en.wikipedia.org/wiki/Archie_Bunker]] fame) had put it a bit differently:
> Even This I Get to Experience
and I think that his attitude was one of excitement/gratitude (either sincerely or cynically?): am I not lucky/privileged to get to experience this situation/experience?
[optimism]
From a podcast conversation between [[Stephen Fry]] and [[Jordan Peterson]], titled [[An Atheist in the Realm of Myth|https://www.youtube.com/watch?v=fFFSKedy9f4]]:
On the human ability to marvel (or stand in awe) about existence and our world:
This is the only world we know. When we are born we don't think: of course, there are 70 billion other globes in the universe with much better sunsets than this one. This is the only thing we've ever seen and yet it staggers us. It surprises us. We are surprised by what is "the case", to use the phrase that Wittgenstein loved, you know, "the case" is everything around us. And we don't know another one, and yet, we go "Wow!". Why should we go "Wow!" at something that's absolutely ordinary? There must be, I suspect, a reason why we are astonished by the everyday, by what we see when we look out.
[wonder]
(see what [[Yann Martel]] had to say about [[believability|If you stumble about believability, what are you living for? Love is hard to believe, ask any lover. Life is hard to believe, ask any scientist. God is hard to believe, ask any believer. What is your problem with hard to believe?]])
(also see what [[Terry Pratchett]] had said about [[wondering about the miracle of life|You want fantasy? Here's one... There's this species that lives on a planet a few miles above molten rock and a few miles below a vacuum that'd suck the air right out of them...]])
Saint
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
https://therichwebexperience.com/conference/speaker/thomas_fuchs
<<list-links "[tag{!!title}]">>
English churchman and historian. He is now remembered for his writings, particularly his Worthies of England, published after his death. He was a prolific author, and one of the first English writers able to live by his pen.
Born: 1608
Died: August 16, 1661
<<list-links "[tag{!!title}]">>
an English novelist and poet. A Victorian realist in the tradition of George Eliot, he was influenced both in his novels and in his poetry by Romanticism, especially William Wordsworth. Charles Dickens was another important influence. Like Dickens, he was highly critical of much in Victorian society, though Hardy focused more on a declining rural society.
Two of his novels, Tess of the d'Urbervilles and Far from the Madding Crowd, were listed in the top 50 on the BBC's survey [[The Big Read|https://en.m.wikipedia.org/wiki/The_Big_Read]].
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Writer, poet, and undertaker
https://www.thomaslynch.com/
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
January 31, 1915 – December 10, 1968.
A 20th century Anglo-American Catholic writer and mystic.
<<list-links "[tag{!!title}]">>
In reality, all men are solitary.
It is not that he is solitary while everybody else is social: but that everyone is solitary.
What the solitary renounces is not his union with other men, but rather the deceptive fictions and inadequate symbols which tend to take the place of genuine social unity – to produce a façade of apparent unity without really uniting men on a deep level.
Even though he may be physically alone, the solitary remains united to others and lives in profound solidarity with them, but on a deeper and mystical level.
: -- [[Thomas Merton]] [[on Solitude, Authenticity and Being|https://thedewdrop.org/2020/03/23/thomas-merton-on-solitude-authenticity-and-being/]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Research Biologist at the National Institutes of Health.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Those who believe an argument to be false may much more easily find the fallacies in it than men who consider it to be true and conclusive. … The more the adherents of an opinion turn over their pages, examine the arguments, repeat the observations, and compare the experiences, the more they will be confirmed in that belief.
: -- about/against confirmation bias and the filter bubble of information
Those who believe in the afterlife will never be disappointed. That's because if they're wrong, they'll never know about it.
<<comparequote "Michael Shermer" "There is no afterlife. We just die, and that’s it. Which is why what we do in this life matters so much — and why how we treat others in the here and now is more important than how they might be treated in some hereafter that may or may not exist." "the afterlife">>
<<comparequote "David Darling" "Just as an asymptotic curve comes closer and closer to a line but never actually touches it, so we move ever closer toward death throughout life but never actually reach death in experience (if by death we mean the end of an individual’s consciousness)." "the afterlife">>
<<comparequote "Studs Terkel" "Believers (in the afterlife) cannot prove beyond a reasonable doubt that there is such a place. Neither can I disprove it. I cannot find the bookmaker willing to take my bet on it. How will one who guesses right be able to collect his winnings?" "belief in the afterlife">>
Those who dare give nothing, Are left with less than nothing.
: -- from his poem //On Giving//
Those who wish to think of the devil (although I wish they wouldn't!) might analogously define him as the unfortunate length of time the process takes. In this sense, the devil is necessary; the process simply does take an enormous length of time, and there is absolutely nothing I can do about it. But, I assure you, once the process is more correctly understood, the painful length of time will no longer be regarded as an essential limitation or an evil. It will be seen to be the very essence of the process itself. I know this is not completely consoling to you who are now in the finite sea of suffering, but the amazing thing is that once you grasp this fundamental attitude, your very finite suffering will begin to diminish -- ultimately to the vanishing point.
from his article [[Is God a Taoist?|http://www.mit.edu/people/dpolicar/writing/prose/text/godTaoist.html]]
See [[God said: it is inaccurate to speak of my role in the scheme of things. I am the scheme of things.]]
And also [[The only difference between the so-called saint and the so-called sinner is that the former is vastly older than the latter.]]
Though a good deal is too strange to be believed, nothing is too strange to have happened.
Though no one can go back and make a brand new start, anyone can start from now and make a brand new ending.
which is somewhat similar to how [[Viktor Frankl]] [[expressed it|Between stimulus and response, there is a space. In that space lies our freedom and power to choose our response. In our response lies our growth and freedom.]].
''Thoughts on a station platform''
"""
It ought to be plain
how little you gain
by getting excited
and vexed.
You'll always be late
for the previous train,
and always on time
for the next.
"""
Thousands of candles can be lighted from a single candle, and the life of the candle will not be shortened. Happiness never decreases by being shared.
From the [[notes/analysis|https://johnathanbi.com/book-notes-summaries/the-uses-and-abuses-of-history-for-life]] of [[Friedrich Nietzsche]]'s essay [["On the Use and Abuse of History for Life"|https://la.utexas.edu/users/hcleaver/330T/350kPEENietzscheAbuseTableAll.pdf]] by [[Jonathan Bi(?)|https://johnathanbi.com/]]:
Three key capacities are necessary to subjugate history and, more generally, knowledge under the needs of life: the suprahistoric capacity to synthesize and unify, the unhistoric capacity to forget and repress, and the historic capacity to record and remember.
First, the individual must set a bound or “horizon” upon his sphere of knowledge by finding a balance between the unhistoric and historic, by forgetting and remembering just the right amount. Forget important information, and you are bound to repeat past failures. Remember too much, and you will be paralyzed with information. Nietzsche comes to the surprising conclusion that life, if it is to be lived in its most vivid and vigorous manner, can only burgeon when it is safe from certain pieces of knowledge. It is the unhistoric drive that represents life.
Second, one must synthesize and unify whatever knowledge is in one’s horizon as to make a congruent being. This is done by the suprahistorical capacity under the dictates of the unhistoric, that is to say, under the needs of life.
If a balance is achieved between these capacities, one can adapt and manipulate history for the use of life in three legitimate ways. Monumental history highlights the great figures of the past and invites the presently ambitious to imitate greatness. Antiquarian history emphasizes lineage and helps the currently distraught and lost feel justified in their existence.
Lastly, critical history exposes the injustice of the past and helps the oppressed of today with resources to enact change. None of these historiographies is objective by any stretch of the imagination. They are highly subjective selections, highlights, distortions or even untruths but they are made to serve whatever needs life and society has at the moment. Vergil’s Aeneid comes to mind: it was highly fictionalized but served a clear purpose for making life vigorous.
[...]
There lies a danger in the suprahistorical [perspective, capability]. If synthesis is overdone, if one sees sameness in too much, wisdom turns to nausea through the hubris that one has seen everything under the sun. Pushed to its extreme: “the viewer from this vantage point could no longer feel any temptation to go on living or to take part in history”. Thus, the unhistorical capacity of action must restrain the suprahistorical capacity of synthesis to produce strong plastic powers, just as the unhistorical capacity of forgetting must limit the historical capacity of remembering for an optimal horizon.
"""
When in still air and still in summertime
A leaf has had enough of this, it seems
To make up its mind to go; fine as a sage
Its drifting in detachment down the road.
"""
"""
You want a door you can be
on both sides of at once.
You want to be
on both sides of here
and there, now and then,
together and—(what
did we call the life
we would wish back?
The old life? The before?)
alone. But any open
space may be
a threshold, an arch
of entering and leaving.
Crossing a field, wading
through nothing
but timothy grass,
imagine yourself passing from
and into. Passing through
doorway after
doorway after doorway.
"""
Through no fault of our own, and by dint of no cosmic plan or conscious purpose, we have become, by the grace of a glorious evolutionary accident called intelligence, the stewards of life's continuity on earth.
We have not asked for that role, but we cannot abjure it. We may not be suited to it, but here we are.
Or as [[Rabbi Tarfon]] said: [[It is not for you to finish the task, but nor are you free to desist from it.]]
[responsibility] [accountability]
"""
Thirty spokes share one hub.
Adapt the nothing therein to the purpose in hand,
And you will have the use of the cart.
Knead clay in order to make a vessel.
Adapt the nothing therein to the purpose in hand
And you will have the use of the vessel.
Cut out doors and windows in order to make a room.
Adapt the nothing therein to the purpose in hand,
And you will have the use of the room.
Thus what we gain is Something,
yet it is by virtue of Nothing
that this can be put to use.
"""
: -- Tao Te Ching. Chapter 11.
Or in a different translation:
"""
We join spokes together in a wheel,
but it is the center hole
that makes the wagon move.
We shape clay into a pot,
but it is the emptiness inside
that holds whatever we want.
We hammer wood for a house,
but it is the inner space
that makes it livable.
We work with being,
but non-being is what we use.
"""
(see also [[Ursula K. Le Guin]]'s phrasing: [[The use of the pot is where the pot is not. A poem of the right shape will hold a thousand truths. But it doesn’t say any of them.]]).
https://www.buildingasecondbrain.com/
https://www.buildingasecondbrain.com/#lp-pom-block-19
<<list-links "[tag{!!title}]">>
!Inline Formatting
|!Option|!Syntax|!Output|
|bold font|{{{''bold''}}}|''bold''|
|italic type|{{{//italic//}}}|//italic//|
|underlined text|{{{__underlined__}}}|__underlined__|
|strikethrough text|{{{--strikethrough--}}}|--strikethrough--|
|superscript text|{{{^^super^^script}}}|^^super^^script|
|subscript text|{{{~~sub~~script}}}|~~sub~~script|
|highlighted text|{{{@@highlighted@@}}}|@@highlighted@@|
|preformatted text|<html><code>{{{preformatted}}}</code></html>|{{{preformatted}}}|
!Block Elements
!!Headings
!Heading 1
!!Heading 2
!!!Heading 3
!!!!Heading 4
!!!!!Heading 5
!!Lists
* unordered list, level 1
** unordered list, level 2
*** unordered list, level 3
# ordered list, level 1
## ordered list, level 2
### unordered list, level 3
; definition list, term
: definition list, description
<<<
* unordered list, level 1
** unordered list, level 2
*** unordered list, level 3
# ordered list, level 1
## ordered list, level 2
### unordered list, level 3
; definition list, term
: definition list, description
<<<
!!Blockquotes
{{{
> blockquote, level 1
>> blockquote, level 2
>>> blockquote, level 3
<<<
blockquote
<<<
}}}
<<<
> blockquote, level 1
>> blockquote, level 2
>>> blockquote, level 3
> blockquote
<<<
!!Preformatted Text
(with html tags)
<html><pre>
{{{
preformatted (e.g. code)
}}}
</pre></html>
<<<
(with triple curly braces)
{{{
preformatted (e.g. code)
}}}
<<<
!!Tables
{{{
|CssClass|k
|!heading column 1|!heading column 2|
|row 1, column 1|row 1, column 2|
|row 2, column 1|row 2, column 2|
|>|COLSPAN|
|ROWSPAN| … |
|~| … |
|CssProperty:value;…| … |
|caption|c
}}}
''Annotation:''
* The {{{>}}} marker creates a "colspan", causing the current cell to merge with the one to the right.
* The {{{~}}} marker creates a "rowspan", causing the current cell to merge with the one above.
<<<
|CssClass|k
|!heading column 1|!heading column 2|
|row 1, column 1|row 1, column 2|
|row 2, column 1|row 2, column 2|
|>|COLSPAN|
|ROWSPAN| … |
|~| … |
|CssProperty:value;…| … |
|caption|c
<<<
!!Images /% TODO %/
cf. [[TiddlyWiki.com|http://www.tiddlywiki.com/#EmbeddedImages]]
!Hyperlinks
* ''WikiWord'' are automatically transformed to hyperlinks to the respective tiddler
** the automatic transformation can be suppressed by preceding the respective WikiWord with a tilde ({{{~}}}): {{{~WikiWord}}}
* ''PrettyLinks'' are enclosed in square brackets and contain the desired tiddler name: {{{[[tiddler name]]}}}
** optionally, a custom title or description can be added, separated by a pipe character ({{{|}}}): {{{[[title|target]]}}}<br>''N.B.:'' In this case, the target can also be any website (i.e. URL).
!Custom Styling
* {{{@@CssProperty:value;CssProperty:value;…@@}}}<br>''N.B.:'' CSS color definitions should use lowercase letters to prevent the inadvertent creation of WikiWords.
* <html><code>{{customCssClass{…}}}</code></html>
* raw HTML can be inserted by enclosing the respective code in HTML tags: {{{<html> … </html>}}}
!Special Markers
* {{{<br>}}} forces a manual line break
* {{{----}}} creates a horizontal ruler
* [[HTML entities|http://www.tiddlywiki.com/#HtmlEntities]]
* {{{<<macroName>>}}} calls the respective macro.
* To hide text within a tiddler so that it is not displayed, it can be wrapped in {{{/%}}} and {{{%/}}}.<br/>This can be a useful trick for hiding drafts or annotating complex markup.
* To prevent wiki markup from taking effect for a particular section, that section can be enclosed in three double quotes: e.g. {{{"""WikiWord"""}}}.
https://en.wikipedia.org/wiki/Tikkun_olam
Tikkun olam (Hebrew: תיקון עולם, lit. 'repair of the world') is a concept in Judaism, interpreted in Orthodox Judaism as the prospect of overcoming all forms of idolatry, and by other Jewish denominations as an aspiration to behave and act constructively and beneficially.
* My undertaking is not difficult, essentially. I should only have to be immortal to carry it out. (from [[Jorge Luis Borges Quotes]]).
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
a software programmer and long time Python user who eventually became its most prolific and tenacious core developer.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Time and space are modes by which we think and not conditions in which we live.
:: -- misattributed to Albert Einstein, but which was in actuality thought up by Einstein’s premier biographer, Dimitri Marianoff, in his book //Einstein: An Intimate Study of a Great Man.//
But [[he|Albert Einstein]] did apparently say: [[The distinction between the past, the present, and the future is only an illusion, albeit a persistent one.]]
[[Donald D. Hoffman]] refers to this (in an [[article titled "Do we See Icons or Reality"|https://social-epistemology.com/2019/12/05/do-we-see-icons-or-reality-a-review-of-donald-hoffmans-the-case-against-reality-brian-martin/]]) when he says:
> Spacetime is not an ancient theater erected long before any stirrings of life. It is a data structure that we create now to track and capture fitness payoffs. Physical objects such as pears and planets are not antique stage props in place long before consciousness took the stage. They too are data structures of our making. The shape of a pear is a code that describes fitness payoffs and suggests actions I might take to ingest them. Its distance codes my energy costs to reach it and snatch it.
Time changes everything except something within us which is always surprised by change.
Time exists in order that everything doesn’t happen all at once … and space exists so that it doesn’t all happen to you.
...
But perhaps the beginning of wisdom, and humility, is to acknowledge, and bow one’s head, before the thought, the devastating thought, of the simultaneity of everything, and the incapacity of our moral understanding – which is also the understanding of the novelist – to take this in.
or as Terry Pratchett wrote (in Wyrd Sisters):
>A year went past. The days followed one another patiently. Right back at the beginning of the multiverse they had tried all passing at the same time, and it hadn’t worked.
or as [[Albert Einstein]] said: [[The only reason for time is so that everything doesn't happen all at once.]]
[[Einstein|Albert Einstein]] also said:
> I never think of the future. It comes soon enough.
Time flies when you're having fun, or as [[Kermit the Frog|http://en.wikipedia.org/wiki/Kermit_the_Frog]] would say, time's fun when you're having flies.
Time is a reality confined to the instant and suspended between two voids. Although time will no doubt be reborn, it must first die. It cannot transport its being from one instant to another in order to forge duration. The instant is already solitude… It is solitude in its barest metaphysical value.
(compare to [[]]).
[momentariness]
Time is an illusion. Lunchtime doubly so.
Interpretations:
* If time is an illusion, then any specific time set aside to eat lunch would rely upon the already illusory concept of time, so it is doubly an illusion.
* It's meant to be something that sounds deep, but doesn't really make any sense when you try and analyse it logically. (which isn't to say that it has no allegorical meaning, but that it's so vague as to withstand multiple interpretations).
[[Reader's Digest|https://www.rd.com/]] used to have filler pages full of such quotes.
But, [[Albert Einstein]] apparently seriously believed it (and firmly mathematically established it), when he wrote in a condolence letter to the widow of his longtime friend, the physicist Michele Besso:
>In quitting this strange world he has once again preceded me by just a little. That doesn’t mean anything. For us convinced physicists ''the distinction between the past, the present, and the future is only an illusion, albeit a persistent one.''
Time is now fully recognised to be a precious resource even though we have far more of it today than ever before.
:-- from the book //I am not a Buddhist// by Charity Seraphina Fields, in the "Pointless Preface" to the book, which comes //after// the first chapter, for a very sensical reason:
>>What's the point of a preface that neither precedes the rest of the book nor faces the reader when first upon it? The way I see it, it could save you a lot of time. As I mention in the final chapter, it has become increasingly common these days to give consumers a taste of the actual product before they buy it. Time is now fully recognised to be a precious resource even though we have far more of it today than ever before. Nobody wants to waste a single moment of it. And that is why I decided to give you the first chapter up front: so that you may get a taster of the book and its message even before you hear me spout the meta-message in this preface. Chances are that if you disagree with anything in the first chapter, this is an excellent time to shut the book and put it back on the shelf. You will likely not agree with what I say in the rest of the book.
Time moves in one direction, memory another. We are that strange species that constructs artifacts intended to counter the natural flow of forgetting.
: ― in //Distrust That Particular Flavor//
"""
Time present and time past
Are both perhaps present in time future
And time future contained in time past.
If all time is eternally present
All time is unredeemable.
What might have been is an abstraction
Remaining a perpetual possibility
Only in a world of speculation.
What might have been and what has been
Point to one end, which is always present.
Footfalls echo in the memory
Down the passage which we did not take
Towards the door we never opened
Into the rose-garden.
[...]
"""
:-- from his [[poem "Burnt Norton"|https://www.brainpickings.org/2015/11/18/t-s-eliot-reads-burnt-norton/]]
<<comparequote "Robert Frost" "The Road Not Taken" "roads not taken">>
<<comparequote "Soren Kierkegaard" "The most painful state of being is remembering the future, particularly the one you'll never have." "regrets">>
Time: I know well enough what it is, provided that nobody asks me.
\define timelineCreated-title()
<!-- Override this macro with a global macro
of the same name if you need to change
how titles are displayed on the timeline
-->
<$view field="title"/>
\end
\define timelineCreated(limit:"100",format:"DDth MMM YYYY",subfilter:"",dateField:"created")
<div class="tc-timeline">
<$list filter="[!is[system]$subfilter$has[$dateField$]sort[$dateField$]limit[$limit$]eachday[$dateField$]]">
<div class="tc-menu-list-item">
<$view field="$dateField$" format="date" template="$format$"/>
<$list filter="[sameday:$dateField${!!$dateField$}!is[system]$subfilter$!sort[$dateField$]]">
<div class="tc-menu-list-subitem">
<$link to={{!!title}}>
<<timelineCreated-title>>
</$link>
</div>
</$list>
</div>
</$list>
</div>
\end
To achieve the impossible, it is precisely the unthinkable that must be thought.
"""
To ask the hard question is simple,
The simple act of the confused will.
But the answer
Is hard and hard to remember.
"""
The full poem:
"""
To ask the hard question is simple;
Asking at meeting
With the simple glance of acquaintance
To-what these go
And how these do:
To ask the hard question is simple,
The simple act of the confused will.
But the answer
Is hard and hard to remember:
On steps or on shore
The ears listening
To words at meeting,
The eyes looking
At the hands helping,
Are never sure
Of what they learn
From how these things are done.
And forgetting to listen or see
Makes forgetting easy;
Only remembering the method of remembering,
Remembering only in another way,
Only the strangely exciting lie,
Afraid
To remember what the fish ignored,
How the bird escaped, or if the sheep obeyed.
Till, losing memory,
Bird, fish, and sheep are ghostly,
And ghosts must do again
What gives them pain.
Cowardice cries
For windy skies,
Coldness for water,
Obedience for a master.
Shall memory restore
The steps and the shore,
The face and the meeting place;
Shall the bird live,
Shall the fish dive,
And sheep obey
In a sheep's way;
Can love remember
The question and the answer,
For love recover
What has been dark and rich and warm all over?
"""
: --August 1930
: -- from the poem "[[The Question|https://genius.com/W-h-auden-the-question-annotated]]"
To be an apikores (heretic) is understandable, but to be an am ha’aretz (ignoramus) is unforgivable.
: -- Jews in Eastern Europe
On the importance Jews place on education/learning
[Yiddish]
Epikoros (or Apikoros or Apikores or Epicurus); Hebrew: אפיקורוס
Am ha'aretz; Hebrew: עם הארץ
To be human is to be a miracle of evolution conscious of its own miraculousness — a consciousness beautiful and bittersweet, for we have paid for it with a parallel awareness not only of our fundamental improbability but of our staggering fragility, of how physiologically precarious our survival is and how psychologically vulnerable our sanity.
To make that awareness bearable, we have evolved a singular faculty that might just be the crowning miracle of our consciousness: hope.
: -- from [[her|Maria Popova]]'s blog post [["An Antidote to Helplessness and Disorientation: The Great Humanistic Philosopher and Psychologist Erich Fromm on Our Human Fragility as the Key to Our Survival and Our Sanity"|https://www.brainpickings.org/2020/03/22/erich-fromm-revolution-of-hope/]], reviewing [[Erich Fromm]] book //The Revolution of Hope: Toward a Humanized Technology//
To be surprised, to wonder, is to begin to understand. This is the sport, the luxury, special to the intellectual man. The gesture characteristic of his tribe consists in looking at the world with eyes wide open in wonder. Everything in the world is strange and marvelous to well-open eyes.
To become rational, believing only what we have good grounds for believing, is to transform the self so substantially as to change its very identity. His astounding conclusion: to the extent that we are rational, we, all of us, partake in the same identity.^^1^^ (The rationally reconstructed cannot fail to get along).
To arrive at an identity that is not uniquely one’s own? Isn’t that, in a certain sense, to simply forsake personal identity altogether? Yes, it is, in a certain sense, and in that sense it is what he asks of us. To disinhabit our selves, and thereby save ourselves. It is in that sense that he will even offer us, at the end of The Ethics, a certain form of immortality, the immortality that comes from abandoning one’s own personal identity, giving it up for the infinite web of necessary connections that he identifies as the causa sui, the self-explained, the thing that can be conceived alternatively as God or nature and which he dubs Deus sive natura [god and nature are interchangeable, or that there is no distinction between the creator and the creation].
Immortality, for Spinoza, is impersonal; I survive my necessary death to the extent that I have ceased identifying with that mere thing that I am, and identify with the whole intricate web I have assimilated in the knowing. The first-person point of view that I am is relinquished for the View from Nowhere, which is the same for all of us.
: -- From [[Rebecca Goldstein]]'s book “Betraying Spinoza: The Renegade Jew Who Gave Us Modernity.”
----
^^1^^ - a very Buddhist sentiment. Was Spinoza the first Ju-Bu? (Jewish-Buddhist :)
[[Dogen]], the founder of the Soto school of Zen said, “To carry the self forward and cultivate the 10,000 things is delusion; to let the 10,000 things come forward and cultivate the self is enlightenment.” At first, we try to control the complexity of our existence, but as we begin to see how impossible that is and how it causes unnecessary suffering in our experience, we begin to allow the complexity of existence to unfold as our life. It’s a form of trust.
: -- from [[Christian Dillo]]'s post titled [["Why I Write"|https://thedewdrop.org/2022/09/23/why-i-write-christian-dillo/]]
[self improvement]
''To David, About His Education''
"""
The world is full of mostly invisible things,
And there is no way but putting the mind’s eye,
Or its nose, in a book, to find them out,
Things like the square root of Everest
Or how many times Byron goes into Texas,
Or whether the law of the excluded middle
Applies west of the Rockies. For these
And the like reasons, you have to go to school
And study books and listen to what you are told,
And sometimes try to remember. Though I don’t know
What you will do with the mean annual rainfall
On Plato’s Republic, or the calorie content
Of the Diet of Worms, such things are said to be
Good for you, and you will have to learn them
In order to become one of the grown-ups
Who sees invisible things neither steadily nor whole,
But keeps gravely the grand confusion of the world
Under his hat, which is where it belongs,
And teaches small children to do this in their turn.
"""
Is this a play (more like an elaboration) on [[Isaac Newton]]'s observation?
> [[I do not know what I may appear to the world; but to myself I seem to have been only like a boy playing on the seashore, and diverting myself in now and then finding a smoother pebble or a prettier shell than ordinary, whilst the great ocean of truth lay all undiscovered before me.]]
But [[he|Isaac Newton]] also said:
> [[To explain all nature is too difficult a task for any one man or even for any one age. 'Tis much better to do a little with certainty, and leave the rest for others that come after you, than to explain all things by conjecture without making sure of anything.]]
and also
> [[Truth is ever to be found in the simplicity, and not in the multiplicity and confusion of things.]]
To do nothing is often the best course of action, but I know from personal experience how frustrating it can be. History was not made by those who did nothing.
"""
"""
Compare to Queen Mary's take on "Doing Nothing" (from the [[transcript of the movie "The Crown"|https://www.imdb.com/title/tt5170842/characters/nm0040586]]):
Queen Elizabeth II : It doesn't feel right, as Head of State, to do nothing.
Queen Mary : It is exactly right.
Queen Elizabeth II : Is it? But surely doing nothing is no job at all?
Queen Mary : To do nothing is the hardest job of all. And it will take every ounce of energy that you have. To be impartial is not natural, not human. People will always want you to smile or agree or frown. And the minute you do, you will have declared a position. A point of view. And that is the one thing as sovereign that you are not entitled to do. The less you do, the less you say or agree or smile...
Queen Elizabeth II : Or think? Or feel? Or breathe? Or exist?
Queen Mary : The better.
"""
"""
(compare to [[Terry Pratchett]]'s take [[on doing nothing|Learning how not to do things is as hard as learning how to do them. Harder, maybe.]]).
"""
"""
(Compare to [[Anne Lamott]]'s take [[on helping others|Lighthouses don’t go running all over an island looking for boats to save; they just stand there shining.]]).
To dream of the person you would like to be is to waste the person you are.
To drink is a small matter. To be thirsty is everything.
[[Another water-inspired metaphor/version|When fishing for happiness, catch and release.]]
To err is human (and/but mess-ups can be caused by non-humans too!)
or, alternatively:
To err is human (but computers seem quite good at it, too)
Inspired by [[the original|To err is Human; to Forgive, Divine.]] by [[Alexander Pope]].
From [[phrases.org.uk|https://www.phrases.org.uk/meanings/to-err-is-human.html]]:
"""
Ah ne'er so dire a Thirst of Glory boast,
Nor in the Critick let the Man be lost!
Good-Nature and Good-Sense must ever join;
To err is Humane^^1^^; to Forgive, Divine.
"""
For a while, [[I|Haggai Mark]] used to have an email signature on my smartphone (ha!) inspired by this:
> Sent (said?) by my 'smartphone': To err is human, but to forgive is human, too :)
but also see [[another variation|To err is human (and/but mess-ups can be caused by non-humans too!)]].
----
^^1^^ - 'humane' was the accepted spelling of 'human' in the early 18th century.
[generosity]
Richard Feynman tells about a proverb of the Buddhist religion he had heard on a tourist tour in Hawaii:
“To every man is given the key to the gates of heaven; the same key opens the gates of hell.”
What, then, is the value of the key to heaven? It is true that if we lack clear instructions that determine which is the gate to heaven and which the gate to hell, the key may be a dangerous object to use, but it obviously has value. How can we enter heaven without it?
To explain all nature is too difficult a task for any one man or even for any one age. 'Tis much better to do a little with certainty, and leave the rest for others that come after you, than to explain all things by conjecture without making sure of anything.
Dogen-zenji said, "To give is non-attachment," That is, just not to attach to anything is to give. It does not matter what is given. To give a penny or a piece of leaf is "dana prajna paramita"^^1^^; to give one line, or even one word of teaching is "dana prajna paramita." If given in the spirit of non-attachment, the material offering and the teaching offering have the same value. With the right spirit, all that we do, all that we create is "dana prajna paramita." So Dogen said, "To produce something, to participate in human activity is also "dana prajna paramita." To provide a ferryboat for people, or to make a bridge for people is "dana prajna paramita." Actually, to give one line of the teaching may be to make a ferryboat for someone!
----
^^1^^ As [[Shunryu Suzuki]] explains: "Dana" means to give generously. "Prajna" is wisdom. "Paramita" means to cross over. So, the (6) "prajna paramitas" are the wisdom qualities ("ferryboats") to help you (and others) "cross over" to enlightenment.
And Also (from a blogposst by [[Joan Halifax]] titled [["The First Paramita: Dana, Generosity: Roshi Joan Halifax"|https://www.upaya.org/2014/12/first-paramita-dana-generosity-roshi-joan-halifax/]]):
The Paramitas (there are 6 of them) are the qualities of mind of the Bodhisattva, the enlightened being who helps bring others to the other shore, the shore of liberation. And that is what the word Paramita means: to carry across to the other shore. [...] Dana is a beautiful word, it means generosity, generosity of mind. [...] The teachings, the Dharma, tells us that there are four gifts we can give. We can give material support, such as food and clothing. We can give protection. We can give the Dharma as teachings. And, most importantly and most subtly, we can give the gift of non-fear.
[kindness] [help]
Even though you try to put people under control, it is impossible. You cannot do it. The best way to control people is to encourage them to be mischievous. Then they will be in control in a wider sense. ''To give your sheep or cow a large spacious meadow is the way to control him.''
So it is with people: first let them do what they want, and watch them. This is the best policy. To ignore them is not good. That is the worst policy. The second worst is trying to control them. The best one is to watch them, just to watch them, without trying to control them.
: ― from [[his|Shunryu Suzuki]] book //Zen Mind, Beginner's Mind//^^1^^
This is (I think) echoed in what [[Jonathan Rowson]] [[wrote|The best kinds of freedom involve choosing your constraints wisely and claiming them as your own.]].
----
^^1^^ This reminds me of "Green Behind the Ears - poem by Kay Ryan":
{{Green Behind the Ears - poem by Kay Ryan}}
(see [[Sylvia Mark]]'s take on [[diversity/freedom and God/religion|God's zoo is very big (and diverse).]]).
... the desire for security and the feeling of insecurity are the same thing. To hold your breath is to lose your breath. A society based on the quest for security is nothing but a breath-retention contest in which everyone is as taut as a drum and as purple as a beet.
:-- from Alan Watts' book //The Wisdom of Insecurity: A Message for an Age of Anxiety//
To improve is to change; to be perfect is to change often.
(or in [[Stephen Fry]]'s formulation:
> People who can change and change again are so much more reliable and happier than those who can’t.)
To lament that we shall not be alive a hundred years hence, is the same folly as to be sorry we were not alive a hundred years ago.
To say writing is artificial is not to condemn it but to praise it. Like other artificial creations and indeed more than any other, writing is utterly invaluable and indeed essential for the realization of fuller, interior, human potentials. Technologies are not mere exterior aids but also interior transformations of consciousness, and never more than when they affect the word.
Such transformations of consciousness can be uplifting, at the same time that they are in a sense alienating. By distancing thought, alienating it from its original habitat in sounded words, writing raises consciousness. Alienation from a natural milieu can be good for us and indeed is in many ways essential for fuller human life.
To live and to understand fully, we need not only proximity but also distance. This writing provides for, thereby accelerating the evolution of consciousness as nothing else before it does.
:: -- From an article titled [["Writing is a Technology that Restructures Thought"|http://worrydream.com/refs/Ong%20-%20Writing%20is%20a%20Technology%20that%20Restructures%20Thought.pdf]] by Walter J. Ong
(compare to what [[Christian Dillo]] had said [[about writing|Writing can be so convincing that I forget for a moment that any object or situation or feeling is always more than what can be said about it. In this way, writing both reveals a truth and conceals a deeper truth. All forms of articulation do that, not just writing.]])
[levels of abstraction] [ladder of abstraction] [modeling]
To my children: Never make fun of having to help me with computer stuff. I taught you how to use //a spoon//.
[caring] [helping] [raising children] [parenting]
(and maybe on a grander scale, [[Arthur C. Clarke]] on [[raising children|On our progeny: They will have time enough, in those endless aeons, to attempt all things, and to gather all knowledge … no Gods imagined by our minds have ever possessed the powers they will command … But for all that, they may envy us, basking in the bright afterglow of Creation; for we knew the Universe when it was young.]]).
To open our eyes and our hearts is painful. There is a great deal of pain in seeing life as it truly is. And there is a great deal less suffering.
The suffering happens when we try to turn away, when we attempt to remain ignorant, to pretend that we are not doing what we are doing and not allowing what we are in fact encouraging and supporting.
And the reason there is so much suffering in this turning away is that what we're actually turning away from is our own heart, our own True Nature.
We have to turn away from Wisdom, Love, and Compassion that is our true nature in order not to feel, not to care what happens to others or even, on the deepest level, to ourselves.
:-- from her article //One Less Act of Violence//
In her book //That Which You Are Seeking Is Causing You to Seek// Huber refers to the Compassionate Heart each one of us can use to guide us. I think that this compassionate heart is "That which we are seeking", and if this is true, then I feel that wanting to find it because it is good (for us and others), is "causing us to seek".
or as she puts it elsewhere in the book:
> The one doing the seeking is the one being sought.
Or in other words:
> we are drawn to a practice like this [mindfulness, meditation, compassion] because ego, worn down from having suffered long and hard, quietly acquiesces to the wisdom of the heart. We are looking for something beyond our suffering, from the only place that is beyond suffering: our true nature, our essential being, our oneness, our wholeness.
To oppose something is to maintain it.
They say here “all roads lead to [[Mishnory|http://www.literature-dictionary.org/Hainish-Encyclopedia/Mishnory]].” To be sure, if you turn your back on Mishnory and walk away from it, you are still on the Mishnory road.
To oppose vulgarity is inevitably to be vulgar.
You must go somewhere else; you must have another goal; then you walk a different road.
: -- from her book [[The Left Hand of Darkness|https://en.wikipedia.org/wiki/The_Left_Hand_of_Darkness]]
To put it bluntly, the claim that there’s nothing but physical reality is either false or empty.
If ‘physical reality’ means reality as physics describes it, then the assertion that only physical phenomena exist is false. Why? Because physical science – including biology and computational neuroscience – doesn’t include an account of consciousness. This is not to say that consciousness is something unnatural or supernatural. The point is that physical science doesn’t include an account of experience; but we know that experience exists, so the claim that the only things that exist are what physical science tells us is false.
On the other hand, if ‘physical reality’ means reality according to some future and complete physics, then the claim that there is nothing else but physical reality is empty, because we have no idea what such a future physics will look like, especially in relation to consciousness.
: -- from [["The Blind Spot"|https://aeon.co/essays/the-blind-spot-of-science-is-the-neglect-of-lived-experience]] by
Adam Frank - a professor of astrophysics at the University of Rochester in New York. He is the author of several books, the latest being Light of the Stars: Alien Worlds and the Fate of the Earth (2018).
[[Marcelo Gleiser]] - a theoretical physicist at Dartmouth College in New Hampshire, where he is the Appleton professor of natural philosophy and professor of physics and astronomy, and the director of the Institute for Cross-Disciplinary Engagement (ICE). He is the author of The Island of Knowledge (2014).
Evan Thompson - a professor of philosophy and a scholar at the Peter Wall Institute for Advanced Studies at the University of British Columbia in Vancouver. He is a Fellow of the Royal Society of Canada. His latest book is Waking, Dreaming, Being (2015).
From the poem [[|]] by [[Joseph Morris]]:
"""
If you come to a place that you can’t get through,
Or over or under, the thing to do
Is to find a way round the impassable wall,
Not say you’ll go YOUR way or not at all.
You can always get to the place you’re going,
If you’ll set your sails as the wind is blowing.
If the mountains are high, go round the valley;
If the streets are blocked, go up some alley;
If the parlor-car’s filled, don’t scorn a freight;
If the front door’s closed, go in the side gate.
To reach your goal this advice is sound:
If you can’t go over or under, go round!
"""
[flexibility] [determination] [goal] [grit]
The movement of grace is what changes us, heals us and heals our world. To summon grace, say, "Help," and then buckle up. Grace finds you exactly where you are, but it doesn't leave you where it found you.
And grace won't look like Casper the Friendly Ghost, regrettably. But the phone will ring or the mail will come and then against all odds, you'll get your sense of humor about yourself back. Laughter really is carbonated holiness. It helps us breathe again and again and gives us back to ourselves, and this gives us faith in life and each other. And remember -- grace always bats last.
:-- from [[her TED talk|https://www.ted.com/talks/anne_lamott_12_truths_i_learned_from_life_and_writing?language=en#t-707080]] about [[12 Truths|https://en.tiny.ted.com/talks/anne_lamott_12_truths_i_learned_from_life_and_writing]]
To teach is to learn twice.
To teach is to learn twice.
But on the other hand, as [[Epictetus]] said:
> It is impossible to begin to learn that which one thinks one already knows.
so the things to keep in mind are: humility, curiosity, courage, playfulness.
To those who say that we need weights and measures in order to enforce accountability in education, my response is, yes, of course we do, but only under three conditions that are not being met today. We need to make sure
(1) that we measure things worth measuring in the context of authentic education, where rote learning counts for little;
(2) that we know how to measure what we set out to measure; and
(3) that we attach no more importance to measurable things than we attach to things equally or more important that elude our instruments.
:― from his book //The Courage to Teach: Exploring the Inner Landscape of a Teacher's Life//
To try and fail is at least to learn; to fail to try is to suffer the inestimable loss of what might have been.
[determination] [resolve] [grit] [action] [inaction]
Today is yesterday's pupil.
From the book "Southern Lady Code" by Helen Ellis:
"""
There wasn't a clown in my closet.
A doll did not turn its head to look at me.
A music box did not start playing on its own.
A pair of shoes wasn't sticking out from beneath my drapes.
A man in a hazmat suit didn't knock on my door.
A snake didn't jack-in-the-box out of my toilet.
A hair on my face was not growing out of my face.
No one said: “Keep still, this'll be over before you know it.”
No one asked, “You're not from around these parts, are you?”
No one said, “Bless you!" when I sneezed alone in my home.
No one slapped me across the face and told me to relax.
I didn't yank oxygen tubes out of my nose.
I didn't back out of a room slowly.
I didn't crawl through an airduct.
I didn't chop off and bleach my hair in a gas station restroom.
I didn't carve a pistol out of soap.
I didn’t burn off my own fingerprints.
I didn't make a rope out of bedsheets.
I didn't sit on a suitcase on the shoulder of a highway.
I wasn't abducted by a "weather balloon.”
I didn't fall to my knees and scream, “Noooooo!"
I didn't raise my hands toward the heavens and scream, “Whyyyyyy?”
I didn't ask, “Was none of it true?”
I didn't answer, “What in the world were you thinking?”
I didn't dump my purse over the head of someone texting in a movie theater.
I didn't dump my purse over the head of someone texting in a movie theater again.
I didn't windmill my arms into a fistfight.
I didn't act as my own attorney.
I didn't draw straws in prison.
I didn't pick the lesser of two evil tattoos.
I didn't cut out newspaper articles, tape them to a wall, and connect them with red string.
I didn't reenter society.
I didn't say, “You don't know me!”
I didn't say, “There's someone in here!"
I didn't say, "There is too a ghost!"
I didn't say, “What's the worst that could happen?"
I didn't choke on a cupcake for breakfast.
I didn't bleed out from a Cling Wrap serrated edge.
I didn't reach into a bag of chips and get bit.
I didn't make a deal with the Dirt Devil and get my soul sucked out by a vacuum cleaner.
"""
Some of the images are very evocative.
It reminds me of [[the poem "Possibilities"|Poem - Possibilities - by Wislawa Szymborska]] by [[Wislawa Szymborska]].
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
[[Described|https://www.purdueexponent.org/features/article_4fc73c38-95cf-5f8b-98f4-d657b84bec28.html]] thusly:
Tom Robbins writes like an Attention Deficit Disorder kid who, at some point, managed to focus long enough to read the encyclopedia.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
[[Cartoonist|https://www-washingtonpost-com.pacl.idm.oclc.org/people/tom-toles/]] at the Washington Post.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Nobel Laureate.
<<list-links "[tag{!!title}]">>
Too often we hold fast to the clichés of our forebears. We subject all facts to a prefabricated set of interpretations. We enjoy the comfort of opinion without the discomfort of thought.
[Commencement Address at Yale University, June 11 1962]
Tools do more than extend our bodies: they expand our minds. Technology facilitates ideas that might otherwise be inconceivable.
Compare to [[Man's mind, once stretched by a new idea, never regains its original dimensions.]]
From [[Want to Change Your Life? Start with Stutz’s Tools from Jonah Hill’s Therapist|https://www.netflix.com/tudum/articles/stutz-the-tools]]:
* __The three aspects of life are__: Pain, Uncertainty and Constant Work.
* The Life Force model: there are three levels to what make you, you: The bottom, most primal level is your relationship with your physical body, the second level is your relationship with other people and at the top of the pyramid is your relationship with yourself.
** if you’re lost, depressed or feeling stuck, it’s important to work on your __Life Force__ first — take care of your body, take care of your people, take care of yourself.
** Once you do, figuring out how to move forward becomes much, much easier.
* You always have to deal with __Part X__ - the judgment, adversity and punishing circumstances can trigger a darker side of your psyche to appear. This darkness is like “an invisible force that keeps you from changing.”
* __String of Pearls__ - always be determined to keep putting the next pearl on the string. Each pearls is an action, and you can think of each action having the same value, no matter what it is.But, within each pearl is a dark spot (Stutz calls it a “turd”), which is a reminder that no effort you make will be perfect.
* Honor, respect, and engage __Your Shadow__ - the Shadow is the part of yourself you’re ashamed of — the part of you that you wish didn’t exist.
* There is no such thing as "The Perfect Life/Moment/Experience/Partner - thinking of life in this way ("The Snapshot / The Realm of Illusion") resembles a snapshot, or a frozen moment that has no movement, dynamism or depth. It gets you stuck.
* __The Maze__ is the by-product of Part X’s dirty work. It’s the visualization of a futile quest for fairness and reason that keeps you stuck in the past and puts your life on hold as you cling to anger and resentment. The Maze keeps you lost in the emotional and psychological weeds.
* You should practice the following as The Life-Long Work:
** ''Active Love'' (sending feelings of lovingkindness")
** ''Radical Acceptance'', which is the antidote to judgment — judgment of yourself, of others and of what could potentially happen in the future.
** ''Gratitude'', which gives you the ability to break through any haze of negative thought, and the Grateful Flow is about creating concentrated gratitude in your own mind.
** ''non-attachment'' — you should fearlessly pursue the things you want, but you should also teach yourself to be totally unafraid to let them go.
Tradition means giving votes to the most obscure of all classes, our ancestors. It is the democracy of the dead. Tradition refuses to submit to the small and arrogant oligarchy of those who merely happen to be walking about.
All democrats object to men being disqualified by the accident of birth; tradition objects to their being disqualified by the accident of death. Democracy tells us not to neglect a good man’s opinion, even if he is our groom; tradition asks us not to neglect a good man’s opinion, even if he is our father.
[fairness] [liberalism] [conservatism]
The term agnostic was coined in 1869 by the British scientist T.H. Huxley, best-known as "Darwin’s bulldog."
Huxley summarized the "agnostic faith" in two principles:
1: Follow your reason as far as it will take you.
2: Do not pretend that conclusions are certain when they are not demonstrated or demonstrable.
Agnosticism is often denigrated as a passive worldview, the philosophical equivalent of a shrug. But true agnosticism, [[Stephen Batchelor]] contended, consists of the active cultivation of doubt and uncertainty in the face of the mystery of existence. An agnostic stance "is not based on disinterest. It is founded on a passionate recognition that I do not know." Agnosticism consists of "an intense perplexity that vibrates through the body and leaves the mind that seeks certainty nowhere to rest."
Truly original discoveries in science are often triggered by unpredictable and unforeseen small findings ... Scientists are increasingly required to provide evidence of immediate and tangible applications of their work. (Japanese Nobel Laureate (2016) biologist Yoshinori Ohsumi).
This is head start fervor (the notion that the earlier one starts specializing, the better) come full circle; explorers have to pursue such narrowly specialized goals with such hyperefficiency that they can say what they will find before they look for it.
: -- from his book "Range - Why generalists triumph in a specialized world"
In [[a speech|https://jamesclear.com/great-speeches/the-anatomy-of-trust-by-brene-brown]] at UCLA, [[she|Brene Brown]] described/analyzed what causes us to trust other people, and came up with the acronym BRAVING.
She mentions John Gottman,
> who's been studying relationship for 30 years. He has amazing work on trust and betrayal. And the first thing I read, “Trust is built in the smallest of moments.” And he calls them “Sliding door moments.”
> [...]
> "a sliding door moment [...] is the opportunity to build trust and [it is also] the opportunity to betray.” Because as small as the moments of trust can be, those are the moments of betrayal as well. To choose to not connect when the opportunity is there is a betrayal.
* B - Boundaries - both truster and trusted need to have boundaries and respect boundaries.
* R - Reliability - you do what you say you're going to do over and over and over again. We have to be very clear on our limitations so we don't take on so much that we come up short and don't deliver on our commitments.
* A - Accountability - when either truster or trusted make a mistake, they are willing and allowed to own it, apologize for it, and make amends.
* V - Vault - What I share with you, you will hold in confidence. What you share with me, I will hold in confidence. The Vault also means you respect my story, but you demonstrate/practice respect other people's story.
* I - Integrity - act from a place of integrity and encourage me to do the same.
** It's choosing courage over comfort,
** choosing what's right over what's fun, fast, or easy, and
** practicing your values, not just professing your values
* N - Non-judgement - I can fall apart, ask for help, and be in struggle without being judged by you. And you can fall apart, and be in struggle, and ask for help without being judged by me. If you can't ask for help and they cannot reciprocate that, that is not a trusting relationship. Period. And when we assign value to needing help, when I think less of myself for needing help, whether you're conscious of it or not, when you offer help to someone, you think less of them too.
* G - Generosity - a relationship is a trusting relationship only if you can assume the most generous thing about my words, intentions, and behaviors, and then check in with me.
<<list-links "[tag{!!title}]">>
Truth comes as a conqueror only to those who have lost the art of receiving it as friend.
Truth is ever to be found in the simplicity, and not in the multiplicity and confusion of things.
Truth is like the moon in the sky. Words are like a finger. A finger can point to the moon's location, but it is not the moon. To see the moon, you must look past the finger. To look for the truth in books, is like mistaking the finger for the moon. The moon and the finger are not the same thing.
Truth is to be judged on the basis of its practical consequences, on its ability to negotiate and enrich human experience.
- from the book //American Philosophy// by John Kaag (as [[reviewed in the WSJ|http://www.wsj.com/articles/american-philosophers-can-change-your-life-1475875405]] by Randal Fuller)
- compare to [[Disputes often have nothing to do with what is true and everything to do with what "true" is.]]
From the [[commencement speech of George Saunders at Syracuse|http://6thfloor.blogs.nytimes.com/2013/07/31/george-saunderss-advice-to-graduates/]] in 2013:
What I regret most in my life are failures of kindness.
Those moments when another human being was there, in front of me, suffering, and I responded . . . sensibly. Reservedly. Mildly.
Or, to look at it from the other end of the telescope: Who, in your life, do you remember most fondly, with the most undeniable feelings of warmth?
Those who were kindest to you, I bet.
It’s a little facile, maybe, and certainly hard to implement, but I’d say, as a goal in life, you could do worse than: Try to be kinder.
Or as [[Kurt Vonnegut]] (in //If This Isn't Nice, What Is?: Advice for the Young//) had said:
>There’s only one rule I know of—Goddam it, you’ve got to be kind.
Try to choose carefully when the great choices must be made. When you are young, and you have to choose between the life of being and the life of doing you usually leap at the latter like a trout to a fly. But each deed you do, each act, binds you to itself and to its consequences, and makes you act again and yet again. Then very seldom do you come upon a space and a time, between act and act, when you may stop and simply be. Or wonder who, after all, you are.
: -- Archmage Sparrowhawk to young prince Arren, in [[her|Ursula K. Le Guin]] book //The Farthest Shore// (part 3 of the Earthsea Series)
[growing up advice] [maturing]
"""
I am dead if I have no desire,
I have no desire if I think I possess,
I think I possess when I do not try to give;
Trying to give, I see that I have nothing,
Seeing that I have nothing, I try to give myself,
Trying to give myself, I see that I am nothing,
Seeing that I am nothing, I desire to become,
Desiring to become, I begin living.
"""
(paraphrased/altered)
[the art of living]
Trying to make the best of it is (often) going to be a lot better than just putting up with it.
[optimism] [practicality]
"""
Turn sideways into the light as they say
the old ones did and disappear
into the originality of it all.
"""
:-- from [[the poem TOBAR PHADRAIC|http://vendr.blogspot.com/2011/06/turn-sideways-into-light.html]] (Patrick's Well)
''Two Passivists''
"""
Eradicate the optimist
who takes the easy view
that human values will persist
no matter what we do.
Annihilate the pessimist
whose ineffectual cry
is that the goal's already missed
however hard we try.
"""
Unconditional love is free from judgment, fear, impatience, resentment, self-pity, worry and sadness. Since it comes from the heart, it doesn't have any of these overcares generated by the head that can interfere with a relationship and drain it of its fun, vitality and intimacy. Unconditional love is a great concept, but it has to be worked on and refined.
"""
My apologies to chance for calling it necessity.
My apologies to necessity if I'm mistaken, after all.
Please, don't be angry, happiness, that I take you as my due.
May my dead be patient with the way my memories fade.
My apologies to time for all the world I overlook each second.
My apologies to past loves for thinking that the latest is the first.
Forgive me, distant wars, for bringing flowers home.
Forgive me, open wounds, for pricking my finger.
I apologize for my record of minuets to those who cry from the depths.
I apologize to those who wait in railway stations for being asleep today at five a.m.
Pardon me, hounded hope, for laughing from time to time.
Pardon me, deserts, that I don't rush to you bearing a spoonful of water.
And you, falcon, unchanging year after year, always in the same cage,
your gaze always fixed on the same point in space,
forgive me, even if it turns out you were stuffed.
My apologies to the felled tree for the table's four legs.
My apologies to great questions for small answers.
Truth, please don't pay me much attention.
Dignity, please be magnanimous.
Bear with me, O mystery of existence, as I pluck the occasional thread from your train.
Soul, don't take offense that I've only got you now and then.
My apologies to everything that I can't be everywhere at once.
My apologies to everyone that I can't be each woman and each man.
I know I won't be justified as long as I live,
since I myself stand in my own way.
Don't bear me ill will, speech, that I borrow weighty words,
then labor heavily so that they may seem light.
"""
''We can't learn to see until we realize we are blind.''
The reason is that understanding -- like civilization, happiness, music, science and a host of other great endeavors -- is not a state of being, but a manner of traveling. And the main goal of helping children learn is to find ways to show them that great road which has no final destination^^1^^, and that manner of traveling in which the journey itself is the reward.^^2^^
:: -- from his paper [[Powerful Ideas Need Love Too|http://worrydream.com/refs/Kay%20-%20Powerful%20Ideas%20Need%20Love%20Too.html]]
----
^^1^^ or as [[Matt Haig]] [[advised|Very Human(istic) Advice]] in his book //The Humans//:
> You don't have to be an academic. You don't have to be anything. Don't force it. Feel your way, and don't stop feeling your way until something fits. Maybe nothing will. Maybe you are a road, not a destination. That is fine. Be a road. But make sure it's a road with something to look at out of the window.
^^2^^ - or as [[Donald Knuth]] (another "[[CS Sage|https://en.wikipedia.org/wiki/List_of_computer_scientists]]") wrote:
> The important thing to me is not the destination, but the journey. Philippians 3:16 expresses it well: Meanwhile, let us keep in step with the pace we have set.
Understanding is love’s other name, which means that to love another means to fully understand his or her suffering.
Unfortunately universities spend all their time filling your head with what’s known, but that’s totally trivial. What’s interesting is what we don’t know. That’s what all the courses should be about, so that maybe the students can come up with new ideas before they’ve been brainwashed with the current paradigms. That would be the university I would create, you know, which only would talk about what we don’t know because what we know is really very uninteresting.
As a non-American I was always a bit disturbed by the American date format, so I was relieved to see that finally someone came up with a universal date format that worked for everyone:
yyyy mm dd mm yyyy
:)
Unless you're ashamed of yourself now and then, you're not honest.
Unless you’re writing one, a self-help book is an oxymoron. You read a self-help book so someone who isn’t yourself can help you, that someone being the author.
from [[Mohsin Hamid's website|http://www.mohsinhamid.com/htgexcerpt.html]]
<<list-links "[tag{!!title}]">>
Science Fiction writer.
Ursula K. Le Guin is like the novelist [[Doris Lessing]]; they do not reflect the world; they absorb it.
: -- [[John Clute|https://en.wikipedia.org/wiki/John_Clute]] (Sci-Fi critic)
<<list-links "[tag{!!title}]">>
[[My father|Alfred Mark]] used to say:
>Usually, you know whether you had made the right decision only after the fact/action; but sometimes not even then.
by which I assume he meant that sometimes the situation is so unclear, that even after you make a decision, it's still not clearer, and therefore, you still don't know if it had been a good decision.
But [[my|Haggai Mark]] addition is: ... let alone beforehand.
By which I mean: sometimes, in unclear situations, you should not be dissuaded from making a decision in the first place, i.e. dare.
[[Soren Kierkegaard]] was more pessimistic:
>I see it all perfectly; there are two possible situations — one can either do this or that. My honest opinion and my friendly advice is this: do it or do not do it — you will regret both.
Or as [[Kurt Vonnegut]] put it:
> The truth is, we know so little about life, we don’t really know what the good news is and what the bad news is.
"""
"""
Or put differently:
What is a question but a moment of discontent in pursuit of understanding? What is an answer but a moment of illusion in our flight from ignorance?
::― [[Dee Hock]], in //Autobiography of a Restless Mind: Reflections on the Human Condition//
[it's often/usually/most of the time hard to know for sure]
Václav Havel (born 5 October 1936 in Czechoslovakia) is a Czech playwright, essayist, dissident and politician. He was the tenth and last President of Czechoslovakia (1989–92) and the first President of the Czech Republic (1993–2003).
<<list-links "[tag{!!title}]">>
From his [[website collection|http://chucklorre.com/?p=327]] of Vanity Cards^^1^^:
> I'm writing this vanity card in Israel. I like it here. Not for the geography, or architecture, or even the history. No, I like it because for the first time in my life I'm surrounded with DNA much like my own. Until I got here, until I wandered around Tel Aviv and Jerusalem, I didn't realize how much my double helix yearned to be around similar strands. Now that's not to say that I don't occasionally have that very same genetic experience in Beverly Hills (particularly in Chinese restaurants on Sunday night). But the sheer homogeneity of Israel overwhelms any over-priced kung pao gathering at Mr. Chow's. The cop, the cab driver, the hotel concierge, the pilot, the waiter, the shoe salesman, the beautiful girl looking right through me as if I didn't exist -- all Jewish! If I had to sum it up, I'd say the sensation is like being at a B'nai B'rith summer camp that is surrounded by millions of crazy bastards who hate the sound of kids playing tetherball, and all the poor little camp has going for it is pluckiness and nukes. Anyway, I have to believe my visceral and very pleasant reaction is some sort of evolutionary, tribal thing. Some sort of survival gene that makes human beings want to stay with their birth group. Which raises the question, why have I spent a lifetime moving away from that group? How did Chaim become Chuck? How did Levine become Lorre? The only answer I come up with is this: When I was a little boy in Hebrew school the rabbis regularly told us that we were the chosen people. That we were God's favorites. Which is all well and good except that I went home, observed my family and, despite my tender age, thought to myself, "bull$#*!."^^2^^
----
^^1^^ - ''vanity card'' (noun): A full-screen production company credit that airs for one second at the end of a TV show. So named because the credit is bullshit^^2^^. The actual producer of every network TV show is a large corporation that risks capital in development costs and deficit financing so that, in success, it can steal money from profit participants (i.e., schmucks with vanity cards).
^^2^^ see the article [["On Bullshit"|http://www2.csudh.edu/ccauthen/576f12/frankfurt__harry_-_on_bullshit.pdf]] by the Professor of Philosophy [[Harry Frankfurt|https://philosophy.princeton.edu/people/harry-frankfurt]] from Princeton University.
[Jewish]
the moving lament on the vanity of all human endeavors:
"vanity of vanities, all is vanity." [הֲבֵל הֲבָלִים אָמַר קֹהֶלֶת, הֲבֵל הֲבָלִים הַכֹּל הָבֶל.]
(Hevel Havalim, Hakol Hevel. or Havel Havalim)
and "there is nothing new under the sun." [וְאֵין כָּל-חָדָשׁ, תַּחַת הַשָּׁמֶשׁ] ^^1^^
It comes from the Latin/Vulgate translation of the Bible, and is a part of the sentence "Vanitas vanitatum dixit Ecclesiastes omnia vanitas" which translates as "vanity of vanities says Ecclesiastes, all is vanity." The verse is [[Ecclesiastes 1.2|http://www.mechon-mamre.org/p/pt/pt3101.htm]].
Or as [[Katherine Anne Porter]] had said:
> Each generation must get on the same old merry-go-round, only disguised in a fresh coat of paint.
(also compare to [[Peter De Vries]]'s saying, in his book //The Blood of the Lamb//:
>You believe what you must in order to stave off the conviction that it's all a tale told by an idiot.
)
Or as [[Stanislaw Ulam]] wrote (in his Sci-Fi book "//Solaris//":
> The age-old faith of lovers and poets in the power of love, stronger than death, that finis vitae sed non amoris, is a lie, useless and not even funny. So must one be resigned to being a clock that measures the passage of time, now out of order, now repaired, and whose mechanism generates despair and love as soon as its maker sets it going? Are we to grow used to the idea that every man relives ancient torments, which are all the more profound because they grow comic with repetition? That human existence should repeat itself, well and good, but that it should repeat itself like a hackneyed tune, or a record a drunkard keeps playing as he feeds coins into the jukebox...
----
^^1^^ but it may be wise to keep in mind what [[Octavia E. Butler]] had said:
> [[There's nothing new under the sun, but there are new suns.]]^^2^^
^^2^^ compare to [[Wislawa Szymborska]]'s response in her [[Nobel Prize lecture|http://www.nobelprize.org/nobel_prizes/literature/laureates/1996/szymborska-lecture.html]]
Luc de Clapiers, marquis de Vauvenargues (6 August 1715 – 28 May 1747) was a minor French writer, a moralist. He died at age 31, in broken health, having published the year prior—anonymously—a collection of essays and aphorisms with the encouragement of Voltaire, his friend.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
In the book //The Humans//, author [[Matt Haig]] tells a story about an alien who is sent to Earth to save humanity from itself, by destroying all evidence for the proof of the [[Riemann Hypothesis|http://en.wikipedia.org/wiki/Riemann_hypothesis]] (which in reality implies far-reaching results about the distribution of prime numbers), which, if published and exploited by humans, could cause a lot of harm and damage in the universe.
It sounds like a silly plot, but is actually a heart-warming story, using a clever trick whereby this alien is writing a report (the book which we humans hold in our hands) to his superiors (other aliens) about "The Humans" (we) and "Their Ways" (and oh man, does this alien make some good observations...).
It reminds me a bit of Douglas Adams' //The Hitchhiker's Guide to the Galaxy//, except that it's not a four book trilogy (or maybe it is a single-book trilogy? You can never tell with the Brits ;-)
Anyway (and without giving the plot away ;-), the alien is in a relationship with a woman and her teenage son, and ends up giving the son some (very humanistic) fatherly advice.
Following are the (non-very-book-specific) parts. BTW, the full list has 97 items (which is very appropriate, since 97 is a prime number (Riemann, get it?).
* Don't worry about your abilities. You have the ability to love. That is enough.
* Be nice to other people. At the universal level, they are you.
*Technology won't save humankind. Humans will.
*Laugh. It suits you.
*Be curious. Question everything. A present fact is just a future fiction.^^1^^
*Irony is fine, but not as fine as feeling.
*Sometimes, to be yourself you will have to forget yourself and become something else. Your character is not a fixed thing. You will sometimes have to move to keep up with it.
*History is a branch of mathematics. So is literature. Economics is a branch of religion.
*Sex can damage love but love can't damage sex.
*The news should start with mathematics, then poetry, and move down from there.
*Your life will have 30,000 days in it. Make sure you remember some of them.
*The road to snobbery is the road to misery. And vice versa.
*Tragedy is just comedy that hasn't come to fruition. One day we will laugh at this. We will laugh at everything.
*Read poetry. Especially poetry by Emily Dickinson. It might save you. Anne Sexton knows the mind, Walt Whitman knows grass, but Emily Dickinson knows everything.
*There is only one genre in fiction. The genre is called "book".
*You are not the most intelligent creature in the universe. You are not even the most intelligent creature on your planet. The tonal language in the song of a humpback whale displays more complexity than the entire works of Shakespeare. It is not a competition. Well, it is. But don't worry about it.
*David Bowie's "Space Oddity" tells you nothing about space, but its musical patterns are very pleasing to the ears.
*One day humans will live on Mars. But nothing there will be more exciting than a single overcast morning on Earth.
*Don't always try to be cool. The whole universe is cool. It's the warm bits that matter.
*Walt Whitman was right about at least one thing. You will contradict yourself. You are large. You contain multitudes.
*Everyone is a comedy. If people are laughing at you, they just don't quite understand the joke that is themselves.
*In a thousand years, if humans survive that long, everything you know will have been disproved. And replaced by even bigger myths.
*A paradox: The things you don't need to live—books, art, cinema, wine, and so on—are the things you need to //live//.
*A cow is a cow even if you call it beef.
*No two moralities match. Accept different shapes, so long as they aren't sharp enough to hurt.
*At some point, bad things are going to happen. Have someone to hold on to.
*If you are laughing, check that you don't really want to cry. And vice versa.
*Don't ever be afraid of telling someone you love them. There are things wrong with your world, but an excess of love is not one.
*It is not the length of life that matters. It's the depth. But while burrowing, keep the sun above you.
*Numbers are pretty. Prime numbers are beautiful. Understand that.
*One day, if you get into a position of power, tell people this: Just because you can, it doesn't mean you should. There is a power and a beauty in unproved conjectures, unkissed lips, and unpicked flowers.
*Be alive. That is your supreme duty to the world.
*Don't think you know. Know you think.
*War is the answer. To the wrong question.
*Physical attraction is, primarily, glandular.
*A quark is not the smallest thing. The smallest thing is the regret you will feel on your deathbed for not having worked more.
*Politeness is often fear. Kindness is always courage. But caring is what makes you human. Care more, become more human.
*You get up. You put on your clothes. And then you put on your personality. Choose wisely.
*Leonardo da Vinci was not one of you. He was one of us.
*You can't find happiness looking for the meaning of life. Meaning is only the third most important thing. It comes after loving and being.
*If you think something is ugly, look harder. Ugliness is just a failure of seeing.
*A watched pot never boils. That is all you need to know about quantum physics.
*Dark matter is needed to hold galaxies together. Your mind is a galaxy. More dark than light. But the light makes it worthwhile.
*At the subatomic level, everything is complex. But you do not live at the subatomic level. You have the right to simplify. If you don't, you will go insane.
*But know this. Men are not from Mars. Women are not from Venus. Do not fall for categories. Everyone is everything. Every ingredient inside a star is inside you, and every personality that ever existed competes in the theater of your mind for the main role.
*You don't have to be an academic. You don't have to be anything. Don't force it. Feel your way, and don't stop feeling your way until something fits. Maybe nothing will. Maybe you are a road, not a destination^^2^^. That is fine. Be a road. But make sure it's a road with something to look at out of the window. (good "career advice")
----
^^1^^ This is echoed in [[Bret Stephens]]'s [[book review on history|Above all, historians should make us understand the ways in which the past was distinct. This shouldn’t prevent us from making moral judgments about it. But we can make better judgments, informed by the knowledge that our forebears rarely acted with the benefit (or burden) of our assumptions, expectations, experiences and values. There’s a lesson in humility in that, as well as a reminder that we are only actors in time whose most cherished ideas may eventually seem strange, and sometimes abhorrent, to our descendants.]].
^^2^^ (compare to [[Alan Kay]]'s [[advice on learning and understanding|Understanding — like civilization, happiness, music, science and a host of other great endeavors — is not a state of being, but a manner of traveling.]]).
Victor-Marie Hugo (26 February 1802 – 22 May 1885) was a French poet, playwright, novelist, essayist, visual artist, statesman, human rights activist and exponent of the Romantic movement in France.
[[Victor Hugo|http://en.wikipedia.org/wiki/Victor_Hugo]]
<<list-links "[tag{!!title}]">>
https://www.vidyamala-burch.com/
<<list-links "[tag{!!title}]">>
''View with a grain of sand'' by Wislawa Szymborska
Translated by Magnus Stanislaw Baranczak and Clare Cavanagh
"""
We call it a grain of sand,
but it calls itself neither grain nor sand.
It does just fine without a name,
whether general, particular,
permanent, passing, incorrect, or apt.
Our glance, our touch mean nothing to it.
It doesn’t feel itself seen and touched.
And that it fell on the windowsill
is only our experience, not its.
For it, it is no different from falling on anything else
with no assurance that it has finished falling
or that it is falling still.
The window has a wonderful view of a lake,
but the view doesn’t view itself.
It exists in this world
colorless, shapeless,
soundless, odorless, and painless.
The lake’s floor exits floorlessly,
and its shore exists shorelessly.
Its water feels itself neither wet nor dry
and its waves to themselves are neither singular or plural.
They splash deaf to their own noise
on pebbles neither large nor small.
And all this beneath a sky by nature skyless
in which the sun sets without setting at all
and hides without hiding behind an unminding cloud.
The wind ruffles it, its only reason being
that it blows.
A second passes.
A second second.
A third.
But they’re three seconds only for us.
Time has passed like a courier with urgent news.
But that’s just our simile.
The character is invented, his haste is make-believe,
his news inhuman.
"""
This interestingly echoes the wonder and awe expressed by [[Richard Feynman]] who said^^1^^:
I stand at the seashore, alone, and start to think. There are the rushing waves… mountains of molecules, each stupidly minding its own business… trillions apart… yet forming white surf in unison.
Ages on ages… before any eyes could see… year after year… thunderously pounding the shore as now. For whom, for what?… on a dead planet, with no life to entertain.
Never at rest… tortured by energy… wasted prodigiously by the sun… poured into space. A mite makes the sea roar.
Deep in the sea, all molecules repeat the patterns of one another till complex new ones are formed. They make others like themselves… and a new dance starts.
Growing in size and complexity… living things, masses of atoms, DNA, protein… dancing a pattern ever more intricate.
Out of the cradle onto the dry land… here it is standing… atoms with consciousness… matter with curiosity.
Stands at the sea… wonders at wondering… I… a universe of atoms… an atom in the universe.
----
^^1^^ from [[Atoms with Consciousness: Yo-Yo Ma Performs Richard Feynman’s Ode to the Wonder of Life, Animated|https://www.themarginalian.org/2022/04/22/richard-feynman-yo-yo-ma/]]
<<list-links "[tag{!!title}]">>
Holocaust survivor.
Author of the book "Man's searching for meaning".
<<list-links "[tag{!!title}]">>
Virgil (70-19 BC) - a Roman Poet
Publius Vergilius Maro
His most important works include:
[[Bucolica (Bucolics or Eclogues)|http://www.intratext.com/IXT/LAT0531/_IDX003.HTM]]
[[Georgics|http://www.intratext.com/IXT/LAT0531/_IDX002.HTM]]
[[Aeneis (Aeneid)|http://www.intratext.com/IXT/LAT0531/_P1.HTM]]
<<list-links "[tag{!!title}]">>
[[see more quotes|Virgil Quotes]]
* Sed nos immensum spatiis confecimus aequor, et iam tempus equum fumantia solvere colla - But now I have traveled a very long way, and now the time has come to unyoke my steaming horses. - Georgics II - (Time to rest after a great effort)
* Mens agitat molem - The mind moves matter
* Paulo maiora canamus - Let us sing of somewhat greater things
* His lacrimis vitam damus - We give life to tears
* Omnia fert aetas, animum quoque. - Time bears away all things, even our minds. (Eclogues (37 BC), Book IX, line 51)
* Alitur vitium, vivitque tegendo - Vice thrives and lives by concealment. (Georgics (29 BC), Book III, line 454)
<<list-links "[tag{!!title}]">>
Vision is not enough. It must be combined with venture. It is not enough to stare up the steps, we must step up the stairs.
This reminds me of the saying/sentiment in [[Kohelet/Ecclesiastes 11:4|https://www.sefaria.org/Ecclesiastes.11.1?lang=bi]]
שֹׁמֵ֥ר ר֖וּחַ לֹ֣א יִזְרָ֑ע וְרֹאֶ֥ה בֶעָבִ֖ים לֹ֥א יִקְצֽוֹר
(Shomer ruach lo yizrah ve-roeh be-avim lo yiktzor)
The watcher of wind will never sow; and the observer of clouds will never reap.
(Compare to what [[Mark Twain]] had said [[about success|The secret of getting ahead is getting started.]]).
Friend/lover of [[Virginia Woolf]]
<<list-links "[tag{!!title}]">>
François-Marie Arouet (21 November 1694 – 30 May 1778), better known by the pen name Voltaire, was a French Enlightenment writer, historian and philosopher famous for his wit and for his advocacy of civil liberties, including freedom of religion and free trade.
[[A joke about Voltaire]]
[[Voltaire|http://en.wikipedia.org/wiki/Voltaire]]
<<list-links "[tag{!!title}]">>
In relationship, as in spiritual practice, commitment is crucial. In both Zen and marriage there’s the practice of vowing, intentionally taking on a path, even if we know we won’t get to the destination.
''Vowing is liberation from whim and weakness. It creates possibilities that would not occur otherwise, because when you are willing to stick to something, come what may, even if from time to time you don’t feel like sticking to it, a magic arises, and you find yourself feeling and doing noble things you did not know you were capable of.''
: -- From [[his|Norman Fischer]] book "//When You Greet Me I Bow//"
[marriage]
''Vulnerability''
Vulnerability is not a weakness, a passing indisposition, or something we can arrange to do without, vulnerability is not a choice, vulnerability is the underlying, ever present and abiding undercurrent of our natural state. To run from vulnerability is to run from the essence of our nature, the attempt to be invulnerable is the vain attempt to become something we are not and most especially, to close off our understanding of the grief of others. More seriously, in refusing our vulnerability we refuse the help needed at every turn of our existence and immobilize the essential, tidal and conversational foundations of our identity.
To have a temporary, isolated sense of power over all events and circumstances, is a lovely illusionary privilege and perhaps the prime and most beautifully constructed conceit of being human and especially of being youthfully human, but it is a privilege that must be surrendered with that same youth, with ill health, with accident, with the loss of loved ones who do not share our untouchable powers; powers eventually and most emphatically given up, as we approach our last breath.
The only choice we have as we mature is how we inhabit our vulnerability, how we inhabit our vulnerability, how we become larger and more courageous and more compassionate through our intimacy with disappearance, our choice is to inhabit vulnerability as generous citizens of loss, robustly and fully, or conversely, as misers and complainers, reluctant, and fearful, always at the gates of existence, but never bravely and completely attempting to enter, never wanting to risk ourselves, never walking fully through the door.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Emerging in the 15th century as a reaction to the prevailing aesthetic of lavishness, ornamentation, and rich materials, wabi-sabi is the art of finding beauty in imperfection and profundity in earthiness, of revering authenticity above all. In Japan, the concept is now so deeply ingrained that it’s difficult to explain to Westerners; no direct translation exists.
Broadly, wabi-sabi is everything that today’s sleek, mass-produced, technology-saturated culture isn’t. It’s flea markets, not shopping malls; aged wood, not swank floor coverings; one single morning glory, not a dozen red roses. Wabi-sabi understands the tender, raw beauty of a gray December landscape and the aching elegance of an abandoned building or shed. It celebrates cracks and crevices and rot and all the other marks that time and weather and use leave behind. To discover wabi-sabi is to see the singular beauty in something that may first look decrepit and ugly.
Wabi-sabi reminds us that we are all transient beings on this planet–that our bodies, as well as the material world around us, are in the process of returning to dust. Nature’s cycles of growth, decay, and erosion are embodied in frayed edges, rust, liver spots. Through wabi-sabi, we learn to embrace both the glory and the melancholy found in these marks of passing time.
Bringing wabi-sabi into your life doesn’t require money, training, or special skills. It takes a mind quiet enough to appreciate muted beauty, courage not to fear bareness, willingness to accept things as they are–without ornamentation. It depends on the ability to slow down, to shift the balance from doing to being, to appreciating rather than perfecting.
: -- from the [[article "Wabi-Sabi: The Art Of Imperfection"|https://www.utne.com/mind-and-body/wabi-sabi/]] by Robyn Griggs Lawrence
"""
Wait, for now.
Distrust everything, if you have to.
But trust the hours. Haven’t they
carried you everywhere, up to now?
"""
[...]
"""
Wait.
Don’t go too early.
You’re tired. But everyone’s tired.
But no one is tired enough.
Only wait a while and listen.
"""
:-- from his [[poem "Wait"|https://www.brainpickings.org/2016/05/16/wait-galway-kinnell/]]
[grief] [grieving] [suicide]
''Waiting for the Barbarians''
```
What are we waiting for, assembled in the forum?
The barbarians are due here today.
Why isn't anything happening in the senate?
Why do the senators sit there without legislating?
Because the barbarians are coming today.
What laws can the senators make now?
Once the barbarians are here, they'll do the legislating.
Why did our emperor get up so early,
and why is he sitting at the city's main gate
on his throne, in state, wearing the crown?
Because the barbarians are coming today
and the emperor is waiting to receive their leader.
He has even prepared a scroll to give him,
replete with titles, with imposing names.
Why have our two consuls and praetors come out today
wearing their embroidered, their scarlet togas?
Why have they put on bracelets with so many amethysts,
and rings sparkling with magnificent emeralds?
Why are they carrying elegant canes
beautifully worked in silver and gold?
Because the barbarians are coming today
and things like that dazzle the barbarians.
Why don't our distinguished orators come forward as usual
to make their speeches, say what they have to say?
Because the barbarians are coming today
and they're bored by rhetoric and public speaking.
Why this sudden restlessness, this confusion?
(How serious people's faces have become.)
Why are the streets and squares emptying so rapidly,
everyone going home so lost in thought?
Because night has fallen and the barbarians have not come.
And some who have just returned from the border say
there are no barbarians any longer.
And now, what's going to happen to us without barbarians?
They were, those people, a kind of solution.
```
[government] [leadership] [politicians] [culture]
(see also the [[poem interpretation in The New Yorker|https://www.newyorker.com/books/page-turner/waiting-for-the-barbarians-and-the-government-shutdown]] By Daniel Mendelsohn)
''Waiting To Go On''
"""
I lay a handful of walnuts
to dry by the fire,
pile six new apples in a bowl
and wiping the cutting boards
to a woody gleam, clear off
the fine needles and nubby stalks
that fell from mushrooms
I found in the morning,
walking the woods…
I drop potatoes into
soft, simmering water then
lower the oven to a thicking heat
and turning to the beautiful stark
inviting coldness of the hearth,
set down
in the fireplace torn paper
and pine cones,
kindling and logs
and kneeling coax small flames
to life,
sweeping the hearth
of dust
and ash,
and still kneeling
next to the fire
just beginning
to snap,
I listen behind me
to the slow tick
of the oven expanding,
to a different time,
another measure,
its black heated interior
braising lamb I saw raised
in the fields that spread below
my upstairs window.
Beneath that window, resting
on paper
in the shadows of my desk,
in the laptop’s subdued
pulsing glow,
half-finished poems
wait at the frontier between
being written and being done.
Beside them
a gleaming violin
sits cradled in it stand,
the music book
opened
to an ancient,
rhythmic, hard to get,
tune.
All this continual practice,
this sharpening
and attentive presence,
all
this daily fetching and gathering
this constant maturing
and getting ready,
all this slowly
being heated through,
brought to a simmer,
being educated, knowledgeable,
learning through experience,
all this work to have
one complete day
lived just as it should be
and
all this constant testing
by the world
to see if we are done,
ready, cooked through,
ripe enough to fall,
to be lifted, bitten right into
and consumed ourselves
and then, for everyone
all the
hours of daily
practice just learning to hit
the note,
the conversational note,
the musical note
just right,
wanting it live
with all the other notes.
It must be we are waiting
for the perfect moment.
It must be
under the struggle
we want to go on.
It must be, deep
down,
we are creatures
getting ready
for when we are needed.
It must be that waiting
for the listening ear
of the appreciative word,
for the right
woman or the right man
or the right moment
just to ourselves.
we are getting ready
just to be ready
and nothing else.
Like this moment
just before the guests arrive
working
alone in the kitchen
sensing a deep
down symmetry
in every blessed thing.
The way
that everything
unbeknownst
to us
is preparing to meet us too.
Just on the other
side of the door
someone
is about to
knock
and our life
is just
about to change.
and finally
after all these
years rehearsing,
behind
the curtain,
we might
just be
ready
to go on.
"""
: -- From ‘Waiting to Go On’: in ‘River Flow: New and Selected Poems’
Creator/cartoonist of the //"Pogo"// daily comic strip syndicated to American newspapers from 1948 until 1975.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Author of //The Queen's Gambit// (which was made into an excellent Netflix Series).
Also author of //Mockingbird//.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
War does not determine who is right; it determines who is left.
[struggle] [conflict] [fighting]
[George] Washington’s idea of leadership was that first you listen, then you learn, then you help, and only then do you lead. It is a somewhat boring progression, but it’s useful.
:-- from an [[interview with Jeffrey Goldberg in The Atlantic|https://www.theatlantic.com/magazine/archive/2019/10/james-mattis-trump/596665/]]
<<list-links "[tag{!!title}]">>
Watching a peaceful death of a human being reminds us of a falling star; one of a million lights in a vast sky that flares up for a brief moment only to disappear into the endless night forever.
[metaphor] [transience]
Canadian former professional ice hockey player and former head coach.
<<list-links "[tag{!!title}]">>
We all — in the end — die in medias res. In the middle of a story. Of many stories.
from the Eulogy of Mona Simpson for her brother, Steve Jobs, after he died October 2011.
She is a novelist and a professor of English at the University of California, Los Angeles.
in medias res (Latin) - In the middle of things
In his book "The Most Human Human" (about experiencing the [[Turing Test|http://www.psych.utoronto.ca/users/reingold/courses/ai/turing.html]]), Brian Christian describes the evolution of chess-playing computers and the historic battle between IBM's Deep Blue and Grandmaster [[Garry Kasparov]].
He makes some observations which have some parallels to life and living well, but also to the less grand pursuit of programming, using design patterns, and creativity.
Obviously, all chess games begin from the same exact opening position. There are only so many legal moves which can be made, so it naturally takes some time for a particular game to become unique.
A huge amount of opening game sequences have been analyzed and documented in what is part of //The Book//.
At the other side of the game -- the end game -- once there are only a few pieces left on the board, there are also specific sequences, or "lines", which will lead to a win. Here too, many, many end-games have been analyzed and documented, creating the other part of //The Book//.
>The middle game -- where the pieces have moved around enough so that the uniform starting position is a distant memory, but there's enough firepower on the board so that the end game is still far off -- is where games are most different, most unique.
In automating chess game playing, the strategy is to shrink that middle part (the "gap") until it disappears so that the opening and end games connect. If this is done, then the computer definitely has the advantage/firepower.
Grandmaster games are said to //begin// with a //novelty//, which is the first move of the game that "exits the book" (i.e., is not played "by the book"). It could be the fifth, it could be the thirty-fifth move. We think that a game of chess starts with move one and ends with a checkmate (or draw), but this is not the case. The game begins when it gets out of book, and it ends when it goes into book (for the end game part). Like electricity, it only sparks in the gaps.
The Book is massive. A game may end before you get out, but it doesn't begin until you do! Said differently, you may not get out alive; on the other hand, you're not alive until you get out!
Now isn't this last part also a significant "life lesson"! :)
Or as Christian wraps up: ''we all start off the same and we all end up the same, with a brief moment of difference in between. Fertilization to fertilizer. Ashes to ashes. And we spark across the gap.''
"""
"""
See how [[David Hochman]] describes [[this brief opportunity we are given|Live the dash. Between the date you’re born and the date you die, you’d better make your time worthwhile.]]
"""
"""
Compare to [[Mohsin Hamid's take|Writers and readers seek a solution to the problem that time passes, that those who have gone are gone and those who will go, will go. For there was a moment where anything was possible. And there will be a moment when nothing is possible. But in between we can create.]].
"""
"""
(see also [[Henri Poincare]]'s take on [[the brief and "Glorious Accident" called 'our life'|Geologic history shows us that life is only a short episode between two eternities of death, and that, even in this episode, conscious thought has lasted and will last only a moment. Thought is only a gleam in the midst of a long night. But it is this gleam which is everything.]]).
There is a saying: At Georgia Tech (or the Technion :)
> we are building tomorrow the night before.
This sounds like a "bad thing" or maybe "an impossibility", but...
> this is the kind of idea that says: "give me something impossible to do and I'll do it in a couple of days because that's what i just spent the last four or five or six years preparing for."
So it's not a paradox or impossibility; it may actually indicate solid, rigorous education :)
And/but [[he|Charles Isbell]] also said:
> there's nothing wrong with waiting until the last minute the secret is knowing when the last minute is.
: -- [[Charles Isbell]] in an interview with [[Lex Fridman|https://lexfridman.com/]] titled [["Charles Isbell and Michael Littman: Machine Learning and Education"|https://www.youtube.com/watch?v=yzMVEbs8Zz0]].
[time management] [procrastination] [planning] [just in time]
I like to think about how we are completely held by the atmosphere in a literal way. The air that surrounds each of our bodies, that flows in and out of our lungs, is not nothing. It's thick with molecules, and it fills up all the gaps and cracks between us and the other bodies and objects around us: the furniture, the walls of the room, the trees outside, the buildings. There's no empty space. The air is fluid, making room for us, so that each of us inhabits a nook that is exactly our size and shape. The air kindly moves with us when we move.
[...]
We are all connected, molecule to molecule. I'm held by everything that's not me.
: -- from her book [["This is getting old"|https://www.lionsroar.com/this-is-getting-old-september-2010/]], in the chapter titled "This Vast Life"
"""
"""
This reminds me of [[The Light of Interiors - poem by Kay Ryan]].
[[Susan Moon]]'s feeling and sentiment are beautifully reflected in [[Sky - poem by Maggie Smith]].
Compare to [[David Foster Wallace]]'s take on [[being aware of your environment|What the hell is water?]].
>There is, just as Wilfred Sellars hoped, a way to accommodate much of the manifest image within a larger vision that gives space to the scientific image of persons. Some things look different, but much looks as it always did. We are conscious beings on a quest, a quest that achieves its aims when we use our minds to flourish and to be good. These are our most noble aims. They involve striving to become better, individually and collectively, than we are. Insofar as we aim to realize ideals that are possible but not yet real, the quest can be legitimately described as spiritual.
>
>This quest suits the human animal well. It is becoming, worthy, and noble. It is the most we can aim for given the kind of creature we are, and happily it is enough. If you think this is not so, if you want more, if you wish that your life had prospects for transcendent meaning, for more than the personal satisfaction and contentment you can achieve while you are alive, and more than what you will have contributed to the well-being of this world after you die, then you are still in the grip of illusions.
>
>Trust me, you can't get more. But what you can get, if you live well, is enough. Don't be greedy. Enough is enough.
:: -- from his book //The Problem of the Soul//
We are dealing here with a fundamental and almost paradoxical difficulty. Stated briefly, it is that learning is sequential but knowledge is not. A branch of mathematics [. . . ] consists of an intricate network of interrelated facts, each of which contributes to the understanding of those around it. When confronted with this network for the first time, we are forced to follow a particular path,which involves a somewhat arbitrary ordering of the facts.
We are here essentially to risk ourselves in the world. We are a form of invitation to others and to otherness, we are meant to hazard ourselves for the right thing, for the right woman or the right man, for a son or a daughter, for the right work or for a gift given against all the odds. And in all this continual risking the most profound courage may be found in the greatest risk and the greatest vulnerability of all, the simple willingness to allow ourselves to be happy along the way…
: - From ‘LONGING’ In CONSOLATIONS: The Solace, Nourishment and Underlying Meaning of Everyday Words.
We are here to bring to consciousness the beauty and power that are around us and to praise the people who are here with us. We witness our generation and our times. We watch the weather. Otherwise, creation would be playing to an empty house.
The human mind is not capable of grasping the Universe. We are like a little child entering a huge library. The walls are covered to the ceilings with books in many different tongues. The child knows that someone must have written these books. It does not know who or how. It does not understand the languages in which they are written. But the child notes a definite plan in the arrangement of the books -- a mysterious order which it does not comprehend, but only dimly suspects.
We are masters of the unsaid words, but slaves of those we let slip out.
(compare to what [[Stanislaus Lec]] [[had to say about ideas|In a war of ideas it is people who get killed.]]).
An interesting example of a "bricolage" (melding, cobbling) of several ideas:
:{{imgquote}} An observation due to [[Arthur C. Clarke]] offers a way to understand this second trajectory: any sufficiently advanced technology is indistinguishable from magic. The networked world evolves so rapidly through innovation, it seems like a frontier of endless magic.
:{{imgblank}}
: Clarke’s observation has inspired a number of snowclones that shed further light on where we might be headed. The first, due to [[Bruce Sterling (the Sci-Fi writer)|https://en.wikipedia.org/wiki/Bruce_Sterling]], is that any sufficiently advanced civilization is indistinguishable from its own garbage. The second, due to futurist [[(and Sci-Fi author) Karl Schroeder|https://en.wikipedia.org/wiki/Karl_Schroeder]]^^1^^, is that any sufficiently advanced civilization is indistinguishable from nature.
:{{imgblank}}
: To these we can add one from social media theorist [[Seb Paquet|https://about.me/sebpaquet]], which captures the moral we drew from [[our Tale of Two Computers|https://breakingsmart.com/en/season-1/a-tale-of-two-computers/]]: any sufficiently advanced kind of work is indistinguishable from play.
:{{imgblank}}
: Putting these ideas together, we are messily slouching towards a non-pastoral utopia on an asymptotic trajectory where reality gradually blurs into magic, waste into wealth, technology into nature and work into play.
:{{imgblank}}
:: -- from his [[online series Breaking Smart|https://breakingsmart.com/en/season-1/]]
----
^^1^^ who has an interesting [[theory about Enrico Fermi's Paradox|http://www.kschroeder.com/weblog/archive/2011/11/30/the-deepening-paradox]] ("Where are they (the intelligent aliens)?"^^2^^)
^^2^^ - a "good response" to the Fermi Paradox per Calvin ([[Bill Watterson|https://calvinandhobbes.fandom.com/wiki/Bill_Watterson]] the creator of Calvin & Hobbes)
> Sometimes I think the surest sign that intelligent life exists elsewhere in our universe is that none of it has tried to contact us.
We are more often frightened than hurt; and we suffer more in imagination than in reality.
in the same vein, Mark Twain made the observation:
> I've lived through some terrible things in my life, some of which actually happened.
And also in the same spirit, by [[Seneca]] :
> We suffer more from imagination than from reality.
We are never more than one grateful thought away from peace of heart.
We are no longer happy as soon as we wish to be happier.
We are not captives of our tongues, but we are citizens of our languages.
Adam Gopnik in “Word Magic: How Much Really Gets Lost in Translation?” in [[The New Yorker (May 26, 2014)|https://www.newyorker.com/magazine/2014/05/26/word-magic]]
It is not that we have a short time to live, but that we waste a lot of it. Life is long enough, and a sufficiently generous amount has been given to us for the highest achievements if it were all well invested.
But when it is wasted in heedless luxury and spent on no good activity, we are forced at last by death’s final constraint to realize that it has passed away before we knew it was passing.
So it is: we are not given a short life but we make it short, and we are not ill-supplied but wasteful of it... Life is long if you know how to use it.
"""
"""
(compare to [[Arnold Bennett]]:
> We shall never have more time. We have, and have always had, all the time there is.
)
We are not nouns, we are verbs. I am not a thing - an actor, a writer - I am a person who does things - I write, I act - and I never know what I'm going to do next. I think you can be imprisoned if you think of yourself as a noun.
We are not primarily put on this earth to see through one another, but to see one another through.
<<comparequote "Ram Dass" "When all is said and done, we're really just all walking each other home." compassion>>
We are only at the beginning of the development of the human race; of the development of the human mind, of intelligent life — we have years and years in the future. It is our responsibility not to give the answer today as to what it is all about, to drive everybody down in that direction and to say: ‘This is a solution to it all.’
Because we will be chained then to the limits of our present imagination. We will only be able to do those things that we think today are the things to do. Whereas, if we leave always some room for doubt, some room for discussion, and proceed in a way analogous to the sciences, then this difficulty will not arise.
[[Donald D. Hoffman]] says:
> We believe that experience accurately depicts the thing-in-itself. The Fitness Beats Truth (FBT) theorem, says that natural selection shapes perception for the purpose of fitness, not replicating objective reality.
>
>Fitness enables an organism to survive and reproduce, but evolutionary theory says nothing about whether the development of perceptual capacities necessarily tailors them to register reality.
[[Steven Pinker]] sums up the argument well:
> We are organisms, not angels, and our minds are organs, not pipelines to the truth. Our minds evolved by natural selection to solve problems that were life-and-death matters to our ancestors, not to commune with correctness.
: ― from [[Donald D. Hoffman]]'s book "//The Case Against Reality: Why Evolution Hid the Truth from Our Eyes"//
Or as [[Albert Einstein]] put it:
> [[Time and space are modes by which we think and not conditions in which we live.]]
We are such stuff as dreams are made on, and our little life is rounded with a sleep.
: -- Prospero, in [[The Tempest, Act 4, Scene 1|https://www.opensourceshakespeare.org/views/plays/play_view.php?WorkID=tempest&Act=4&Scene=1&Scope=scene]]
We are well advised to keep on nodding terms with the people we used to be, whether we find them attractive company or not.
[acceptance]
We are what we repeatedly do. Excellence then, is not an act, but a habit.
(see also [[Q: complete the sentence: "Practice makes p____t."]])
And also [[The thought manifests as the word. The word manifests as the deed. The deed develops into a habit, and the habit hardens into character. So watch the thought and its ways with care, And let it spring from love, Out of respect for all beings.]]
To see all knowledge as conjectural and fallible is really the most extreme form of philosophical relativism. But Popper is surely right to believe that we can have knowledge, and scientific knowledge, that is nothing but conjecture. What constitutes the very existence of science is its status as an ongoing activity. It is ultimately a pattern of thought and behaviour, a style of going about things which has its characteristic norms and values. It does not need any ultimate metaphysical sanction to support it or make it possible.
There need be no such thing as Truth, other than conjectural, relative truth, any more than there need be absolute moral standards rather than locally accepted ones. If we can live with moral relativism we can live with cognitive relativism. Science may be able to work without absolute truth, but, such a thing might still exist. This residual feeling surely rests on a confusion between truth and the material world. It is the external, material world that really seems to be in mind when it is insisted that there must be some permanent truth.
This instinct seems unassailable. But to believe in a material world does not justify the conclusion that there is any final or privileged state of adaptation to it which constitutes absolute knowledge or truth. As Kuhn has argued with great clarity scientific progress — which is real enough — is like Darwinian evolution. There is no goal for adaptation. No meaning can be given to the idea of perfect or final adaptation. We have reached the present position in the progress and evolution of our knowledge, as we have in the evolution of our species, with no beacon to guide us, nor any goal.
The idea that historical accounts of evolution are all we have may strike the nonbiologist, or even some biologists, as a bit threatening. Science is meant to be about laws of nature, about prediction. Surely the history of life is more than a good story, a gripping narrative that might have had a different ending, or even an alternative plot?
Part of the problem is that people have the wrong idea about contingency: in the vernacular it means random, chaotic, unexplained, meaningless. But the point (of the statement that [[If one could rewind the tape of life and let events play out again, the results would almost certainly differ dramatically.]]) is not that we should replace determinism by randomness, nor to argue that species evolve and disappear for no reason. However, we could never have predicted what would happen by extrapolating from ‘timeless laws of nature’. We can interpret what has happened, offer explanations. We can do history, in other words. The boundaries between the sciences and humanities are artificial.
Why do people deny this, and look to evolution for a justification of our existence? Maybe our deep-seated belief in evolution as progress comes from a simple want for comfort and solace from science. Geology’s discovery of deep time – that we occupy the last microsecond of cosmic time – has been a crushing blow to the human ego. If we can’t deny the fact, the only way out is to see everything that went before as predictive and preparative to us.
But, we should abandon this bit of cosmic arrogance and face up to the fact that we’re jolly lucky to be here. The history of life is not a source of comfort or moral value. We ought to be strongly suspicious of ideas that are enormously comforting.
:: -- from [[an interview in the New Scientist|https://www.newscientist.com/article/mg12517055-800-forum-if-only-things-had-been-different-gail-vines-talks-to-stephen-jay-gould-about-the-role-of-contingency-in-evolution]]
Seneca puts it this way:
We can often insert attention and will and monitor “impulsive impressions” and the quick bodily responses that follow — nip them in the bud — before we yield to them in irrational ways. Sure, he acknowledges, we are wired by nature to respond to life threats; that’s what it is to live “in accord with nature.”
But he also teaches that we are not always good judges of estimating those threats. Fear and anger too often “outleap reason.” We need to learn how and when to press the pause button. We need to mobilize attention, he says, to lessen the impact of near-automatic responses that are subject to distortion and error.
: -- from her essay [["If You’re Reading Stoicism for Life Hacks, You’re Missing the Point"|https://www.nytimes.com/2021/05/14/opinion/stoics-self-help.html]] in the NYT.
We can overcome gravity, but sometimes the paperwork is overwhelming.
[bureaucracy]
We can’t guarantee success, but we can do something better. We can deserve it.
We confuse performance—the ability of a machine to replicate or surpass the results of a human—with method, how those results are achieved. This fallacy has proved irresistible in the domain of higher intelligence that is unique to Homo sapiens. [ha!]
There are actually two separate but related versions of the fallacy. The first is “the only way a machine will ever be able to do X is if it reaches a level of general intelligence close to a human’s.” The second, “if we can make a machine that can do X as well as a human, we will have figured out something very profound about the nature of intelligence.”
This romanticizing and anthropomorphizing of machine intelligence is natural. It’s logical to look at available models when building something, and what better model for intelligence than the human mind? But time and again, attempts to make machines that think like humans have failed, while machines that prioritize results over method have succeeded.
: -- From his book “Deep Thinking”.
(see also [[Leslie Valiant]]'s take on [[Intelligent Machines|There may be some good news for humans in the fact that one can be intelligent in many different ways. It gives us hope that we may endow robots with intelligence superior to ours but only in directions that are useful and not threatening to us. Also, it makes it clear that there is no good reason to want to make robots that are exactly like humans.]]).
Word-work is sublime … because it is generative; it makes meaning that secures our difference, our human difference — the way in which we are like no other life.
We die. That may be the meaning of life. But we do language. That may be the measure of our lives.
-- [[quoted in BrainPickings|https://www.brainpickings.org/2016/12/07/toni-morrison-nobel-prize-speech/]]
We do not experience death. Our life has no end in just the way in which our visual field has no limit.
In German:
>Der Tod ist kein Ereignis des Lebens. Den Tod erlebt man nicht. Wenn man unter Ewigkeit nicht unendliche Zeitdauer, sondern Unzeitlichkeit versteht, dann lebt der ewig, der in der Gegenwart lebt. Unser Leben ist ebenso endlos, wie unser Gesichtsfeld grenzenlos ist.
The larger context of this quote:
>Death is not an event in life: we do not live to experience death. If we take eternity to mean not infinite temporal duration but timelessness, then eternal life belongs to those who live in the present. Our life has no end in just the way in which our visual field has no limits.
To use a mathematical analogy, just as an asymptotic curve comes closer and closer to a line but never actually touches it, so we move ever closer toward death throughout life but never actually reach death in experience (if by death we mean the end of an individual’s consciousness).
:: -- David Darling in his book //Zen Physics//
(And as Epicurus had said: [[Where death is I am not; where I am death is not, so we never meet.]])
We do not experience time flowing, or passing. What we experience are differences between our present perceptions and our present memories of past perceptions. We interpret those differences, correctly, as evidence that the universe changes with time. We also interpret them, incorrectly, as evidence that our consciousness, or the present, or something, moves through time.
: — from [[his|David Deutsch]] book "//The Fabric of Reality: The Science of Parallel Universes--and Its Implications//"
We do not grow old no matter how long we live. What I mean is that we never cease to stand like curious children before the great Mystery into which we were born.
We do not inherit the earth from our ancestors; we borrow it from our children.
and on the same topic of conservation and caring, [[Ursual K. LeGuin wrote in Late in the Day|https://www.brainpickings.org/2018/04/10/ursula-k-le-guin-late-in-the-day-science-poetry/]]:
>To use the world well, to be able to stop wasting it and our time in it, we need to relearn our being in it.
We do things all the time...But few of us practice. The key difference between doing and practicing is this: when you are practicing an action, you aren't merely repeating by rote but rather striving to improve or to refine whatever you are doing.
The remarkable thing is that we really love our neighbor as ourselves: we do unto others as we do unto ourselves. We hate others when we hate ourselves. We are tolerant toward others when we tolerate ourselves. We forgive others when we forgive ourselves. We are prone to sacrifice others when we are ready to sacrifice ourselves.
It is not love of self but hatred of self which is at the root of the troubles that afflict our world.
We don't have to be sages or philosophers to understand that what makes us happy is less what we have than what we are.
And what we are is protean: changeable, constantly shifting, empty and magnificent as a tall tree or a column of water -- if we will allow it.
We dream nonstop until we come to the sleep at the end.
or as [[William Shakespeare]] put it:
[[We are such stuff as dreams are made on, and our little life is rounded with a sleep.]]
We encourage children to read for enjoyment, yet we never encourage them to “math” for enjoyment. We teach kids that math is done fast, done only one way and if you don’t get
the answer right, there’s something wrong with you. You would never teach reading this way.
- from “Math? No Problem”
We enter into each moment holding hands with a future composed of infinite possibilities and a past composed of infinite realities.
(compare to [[Time is a reality confined to the instant and suspended between two voids. Although time will no doubt be reborn, it must first die. It cannot transport its being from one instant to another in order to forge duration. The instant is already solitude… It is solitude in its barest metaphysical value.]]).
And we extend our concept of number as in spinning a thread we twist fibre on fibre. And the strength of the thread does not reside in the fact that some one fibre runs through its whole length, but in the overlapping of many fibres.
But if someone wished to say: "There is something common to all these constructions -- namely the disjunction of all their common properties" -- I should reply: Now you are only playing with words. One might as well say: "Something runs through the whole thread -- namely the continuous overlapping of those fibres".
In [[an interview|https://www.brainpickings.org/2017/02/01/we-are-all-stardust-steven-weinberg-interview/]], [[Nobel Laureate Steven Weinberg|https://www.nobelprize.org/prizes/physics/1979/weinberg/biographical/]] (Physics, 1979) talked about his sense of awe in he face of scientific discoveries (and/or life in general :), and comments:
:{{imgquote}} The more the universe seems comprehensible, the more it also seems pointless.
But as [[Maria Popova]] [[mentions|https://www.brainpickings.org/2017/02/01/we-are-all-stardust-steven-weinberg-interview/]]:
:{{imgquote}} A lazy literalist might miss the point, for this is more Zen koan of science than nihilistic defeatism. Just as acknowledging the illusoriness of free will — a tremendously difficult feat for a thinking, feeling human being — can liberate us rather than take away our freedom, acknowledging the impersonal and disinterested laws of nature governing the universe places on us the power and responsibility to synthesize our own sense of meaning. The “pointlessness” thus becomes the very wellspring of existential significance.
And, indeed, this is what [[Steven Weinberg]] had to say:
:{{imgquote}} We find nothing that gives our lives an objective meaning. There’s nothing in the laws of nature to suggest that we have a particular place in the universe. That doesn’t mean I find my life pointless. We can love each other and try to understand the world. But we have to give our lives that meaning ourselves.
(Compare to [[Henry Miller]]'s [[similar conclusion|Life has to be given a meaning because of the obvious fact that it has no meaning.]] (without being a scientist :).
[[Steven Weinberg]] also said:
> "The more we comprehend the universe, the more pointless it seems."
To which [[Stuart A. Kauffman]] responded:
>I profoundly believe that Weinberg is wrong. I also happen to think that Weinberg is utterly brilliant. He's one of the best defenders of the pure reductionist stance. But once you've got agency, you've got meaning. This is the beginning of a change in our scientific worldview. Agency is real, so meaning is real in the universe. Value is real, at least in the biosphere. And these things can't be talked about by physicists.
We have an odd relationship with words. We learn a few when we are small, throughout our lives we collect others through education, conversation, our contact with books, and yet, in comparison, there are only a tiny number about whose meaning, sense, and denotation we would have absolutely no doubts, if one day, we were to ask ourselves seriously what they meant. Thus we affirm and deny, thus we convince and are convinced, thus we argue, deduce, and conclude, wandering fearlessly over the surface of concepts about which we only have the vaguest of ideas, and, despite the false air of confidence that we generally affect as we feel our way along the road in verbal darkness, we manage, more or less, to understand each other and even, sometimes, to find each other.
> We die only once, and for such a long time.
(this could be interpreted as simply pointing out that once we die, it is forever)
or
> We have but one death, and it lasts so long!
(this could mean that our entire life could be viewed as one long-drawn-out process of dying)
: ― Molière [Moliere] (Jean-Baptiste Poquelin) in //"Lovers' Quarrels"//
We have every right to live in gratitude for all the stages of life that brought us here, for all the memories that give us great joy, the people who helped us get this far, the accomplishments we carved on our hearts along the way. These experiences of life cry out to be celebrated. They're no more past than we are. They live in us forever.
: -- she is a Benedictine nun; from her book about aging entitled //The Gift of Years//
Through how many dimensions and how many media will life have to pass? Down how many roads among the stars must man propel himself in search of the final secret? The journey is difficult, immense, at times impossible, yet that will not deter some of us from attempting it. We cannot know all that has happened in the past, or the reason for all of these events, any more than we can with surety discern what lies ahead. We have joined the caravan, you might say, at a certain point; we will travel as far as we can, but we cannot in one lifetime see all that we would like to see or learn all that we hunger to know.
:: from his book of essays //The Immense Journey//
We have long known that how things seem in the world can be misleading, and this is no less true of the mind itself. And yet many people have found that through sustained introspection, how things seem can be brought into closer register with how they are.
Compare to [[what Koheleth/Ecclesiastes had said|Things are not always what they seem; the first appearance deceives many; the intelligence of few perceives what has been carefully hidden in the recesses of the mind.]]
We have no idea, now, of who or what the inhabitants of our future might be. In that sense, we have no future. Not in the sense that our grandparents had a future, or thought they did. Fully imagined cultural futures were the luxury of another day, one in which 'now' was of some greater duration. For us, of course, things can change so abruptly, so violently, so profoundly, that futures like our grandparents' have insufficient 'now' to stand on. We have no future because our present is too volatile. ... We have only risk management. The spinning of the given moment's scenarios. Pattern recognition.
: ― in //Pattern Recognition//
One version:
> We have no need of other worlds. We need mirrors. We don't know what to do with other worlds. A single world, our own, suffices us; but we can't accept it for what it is.
Or, differently, and digging deeper:
>We take off into the cosmos, ready for anything: for solitude, for hardship, for exhaustion, death. Modesty forbids us to say so, but there are times when we think pretty well of ourselves. And yet, if we examine it more closely, our enthusiasm turns out to be all a sham. We don't want to conquer the cosmos, we simply want to extend the boundaries of Earth to the frontiers of the cosmos.^^1^^
>For us, such and such a planet is as arid as the Sahara, another as frozen as the North Pole, yet another as lush as the Amazon basin. We are humanitarian and chivalrous; we don't want to enslave other races, we simply want to bequeath them our values and take over their heritage in exchange. We think of ourselves as the Knights of the Holy Contact. This is another lie. We are only seeking Man.
>We have no need of other worlds. A single world, our own, suffices us; but we can't accept it for what it is. We are searching for an ideal image of our own world: we go in quest of a planet, a civilization superior to our own but developed on the basis of a prototype of our primeval past.
>At the same time, there is something inside us which we don't like to face up to, from which we try to protect ourselves, but which nevertheless remains, since we don't leave Earth in a state of primal innocence. We arrive here as we are in reality, and when the page is turned and that reality is revealed to us - that part of our reality which we would prefer to pass over in silence - then we don't like it anymore.
and also
>Man has gone out to explore other worlds and other civilizations without having explored his own labyrinth of dark passages and secret chambers, and without finding what lies behind doorways that he himself has sealed.
:: ― from [[his|Stanislaw Lem]] book "//Solaris//"
[reflection] [observation] [human nature]
----
^^1^^ is he writing about billionaires like Elon Musk, Jeff Bezos, and Richard Branson and their [[recent flights to space|https://www.geekwire.com/2021/bezos-vs-branson-vs-musk-reality-check-billionaire-space-race-space-station-sci-fi/]]? :-|
We have not even to risk the adventure alone, for the heroes of all time have gone before us; the labyrinth is thoroughly known; we have only to follow the thread of the hero-path.
And where we had thought to find an abomination, we shall find a God;
where we had thought to slay another, we shall slay ourselves;
where we had thought to travel outward, we shall come to the center of our own existence;
where we had thought to be alone, we shall be with all the world.
This echoes many sentiments found in Buddhism (journey/path, introspection/mindfulness, compassion, not-self, being one with everything, and so on).
We have so much to learn if we are ready to look stupid.
Or as [[Epictetus]] had written:
> If you want to improve, be content to be thought foolish and stupid.
: -- from an interesting [[talk (45 min. video)|https://mediax.stanford.edu/page/john-seely-brown-mediaX2017]] given at #mediaX2017 Conference at Stanford, by John Seely Brown (former Chief Scientist of Xerox Corporation and former director of the Xerox Palo Alto Research Center (PARC)) talked ([[slides|http://johnseelybrown.com/sensemaking.pdf]]) about what it means (and how the meaning changed) to make sense and learn in the new environment we are in.
We have the ability to experience ourselves as separate from life. We can imagine that life could be or should be different from the way it is. These are illusions, but we experience them as very REAL illusions. None of these beliefs is a problem except that, to the degree we believe them to be true, we suffer.
We have to continually be jumping off cliffs and developing our wings on the way down.
We have to learn how to live with our frailties. The best people I know are inadequate and unashamed.
We hear only those questions for which we are in a position to find answers.
This, I think, echoes what [[Hannah Arendt]] meant by:
[[the questions raised by thinking and which it is in reason’s very nature to raise — questions of meaning — are all unanswerable by common sense and the refinement of it we call science. The quest for meaning is “meaningless” to common sense and common-sense reasoning because it is the sixth sense’s function to fit us into the world of appearances and make us at home in the world given by our five senses; there we are and no questions asked.]]
We humans are both miracles and catastrophes. We must acknowledge both death and joy, horror and awe. It is an astonishment to be alive, and life calls on you to be astonished; but lifelong astonishment will take iron-willed discipline.
[awe] [awesomeness] [willpower]
: -- from a NYT article titled [["What John Donne Knew About Death Can Teach Us a Lot About Life"|https://www.nytimes.com/2022/09/10/opinion/john-donne-death.html]] by Katherine Rundell
We humans, as the philosopher Karl Popper said, can let our ideas die in our place. And that means that we can go through a sequence of ideas that aren't viable, on the way from one viable idea to the next. We don't have to die when they're wrong.
(whereas in biology (and relating to "bio knowledge") every single generation must be viable as an animal, because the DNA strands have to be able to just replicate in every single generation. And if one of them fails, if one of them doesn't work, then the species will go extinct).
: -- from his conversation with Chris Anderson (of TED fame) titled [["On the infinite reach of knowledge"|https://www.ted.com/talks/the_ted_interview_david_deutsch_on_the_infinite_reach_of_knowledge/transcript]]
[survival]
We evolved from humans who lived in societies where not much ever changed -- and where any change that did occur was liable to be very significant, and perhaps life threatening. From this background, we have inherited a cognitive frailty as regards novelty:
we immediately suppose that the new must also be the important. It isn't always. Sanity in a news-dominated age requires us to see that the categories of novelty and importance are overlapping -- yet crucially distinct.
-- from his book //The News: A User's Manual//
(also see what [[Amanda Ripley]] had to say about [[How to Write Better News]]).
We all live lives that are complicated and that at times, with infinite variation, feel overwhelming. But we know people in our immediate world who step beyond themselves, into care. If you know them up close, you know they are not saints or heroes — take note of that, and take comfort. Feel how when you extend a kindness, however simple, you are energized and not depleted.
Scientists … are proving that acts of kindness and generosity are literally infectious, passing from stranger to stranger to stranger. Kindness is an everyday byproduct of all the great virtues, love most especially.
It is good that the completion of our scientific work is an unattainable ideal. Striving toward it is attracting many of us, and gives much pleasure and satisfaction…
If science were completed, the satisfaction which research, the furthering of human knowledge, had provided, would disappear. Also, even more men would strive for power and domination….
We know that there are facts and insights which we cannot communicate to animals — no animal is familiar, for instance, with the associative law of multiplication… Is it not possible that our understanding of nature also has limitations?…
I hope that, even if this should be true, we will be able to continue the extension of our knowledge indefinitely, … even if the limit thereof will always remain widely separated from the complete knowledge and understanding of nature.
([[Donald Knuth]] quotes [[Wigner|Eugene Wigner]] in his book [[Things a Computer Scientist Rarely Talks About|https://en.wikipedia.org/wiki/Things_a_Computer_Scientist_Rarely_Talks_About]] )
We know the past but cannot control it. We control the future but cannot know it.
[information]
We live and learn. Or, at any rate, we live.
: -- in the Hitchhiker's Guide to the Galaxy.
Or [[my|Haggai Mark]] (somewhat more :) optimistic version:
> We live (until we don't), and we (sometimes) learn.
or as [[Terry Pratchett]] writes (in his book [[Snuff|http://www.chrisjoneswriting.com/snuff.html]]):
> Well, we live and learn, [[Vimes|https://discworld.fandom.com/wiki/Samuel_Vimes]] thought, or perhaps more importantly, we learn and live.
We live in an age of exponential growth in knowledge, and it is increasingly futile to teach only polished theorems and proofs. We must abandon the guided tour through the art gallery of mathematics, and instead teach how to create the mathematics we need. In my opinion, there is no long-term practical alternative.
We live in time - it holds us and molds us - but I never felt I understood it very well. And I'm not referring to theories about how it bends and doubles back, or may exist elsewhere in parallel versions. No, I mean ordinary, everyday time, which clocks and watches assure us passes regularly: tick-tock, click-clock. Is there anything more plausible than a second hand? And yet it takes only the smallest pleasure or pain to teach us time's malleability. Some emotions speed it up, others slow it down; occasionally, it seems to go missing - until the eventual point when it really does go missing, never to return.
: ― in //The Sense of an Ending//
We live with such easy assumptions, don't we? For instance, that memory equals events plus time. But it's all much odder than this. Who was it said that memory is what we thought we'd forgotten? And it ought to be obvious to us that time doesn't act as a fixative, rather as a solvent. But it's not convenient--- it's not useful--- to believe this; it doesn't help us get on with our lives; so we ignore it.
: ― in //The Sense of an Ending//
We make a living by what we get; we make a life by what we give.
We make ourselves no promises, but we cherish the hope that the unobstructed pursuit of useless knowledge will prove to have consequences in the future as in the past.
: -- from [[The Usefulness of Useless Knowledge|https://www.ias.edu/sites/default/files/library/UsefulnessHarpers.pdf]], 1939. About the [[Institute for Advanced Studies (Princeton)|https://www.ias.edu/]]
[intellectual pursuits] [curiosity] [academic work]
We make, not just to have, but to know.
We may have all come on different ships, but we’re in the same boat now.
[teamwork] [collaboration]
We move between two darknesses. The two entities who might enlighten us, the baby and the corpse, cannot do so.
(compare to [[Ursula K. Le Guin]]'s [[take on the gift of life|I see life as a shared gift, received from others and passed on to others, and living and dying as one process, in which lies both our suffering and our reward...]].)
we must all hang together, or ... we shall all hang separately.
(A good definition for the Prisoners' Dilemma "winning strategy")
By signing the Declaration of Independence, the delegates were putting their lives on the line. If they were to lose the war for independence, then the British government would execute them in a very painful and nasty way.
We must be free not because we claim freedom, but because we practice it.
We must believe in free will, we have no choice.
We must love them both, those whose opinions we share and those whose opinions we reject, for both [hopefully/may] have labored in the search for truth, and both [hopefully/may] have helped us in finding it.
We need not come to the end of the path to experience the benefits of walking it.
::-- From [[his|Sam Harris]] book //Waking Up//
on which [[Soren Kierkegaard]] observed:
> Above all, do not lose your desire to walk. Everyday, I walk myself into a state of well-being & walk away from every illness. I have walked myself into my best thoughts, and I know of no thought so burdensome that one cannot walk away from it. But by sitting still, & the more one sits still, the closer one comes to feeling ill. Thus if one just keeps on walking, everything will be all right.
We need to make a distinction between the claim that the world is out there and the claim that the truth is out there. To say that the world is out there, that it is not our creation, is to say, with common sense, that most things in space and time are the effects of causes that do not include human mental states. To say that truth is not out there is simply to say that where there are no sentences there is no truth, that sentences are elements of human languages, and that human languages are human creations.
Truth cannot be out there—cannot exist independently of the human mind—because sentences cannot so exist, or be out there. The world is out there, but descriptions of the world are not. Only descriptions of the world can be true or false. The world on its own—unaided by these describing activities of human beings—cannot.
The suggestion that truth, as well as the world, is out there is a legacy of an age in which the world was seen as the creation of a being who had a language of his own. If we cease to attempt to make sense of the idea of such a nonhuman language, we shall not be tempted to confuse the platitude that the world may cause us to be justified in believing a sentence true with the claim that the world splits itself up, on its own initiative, into sentence-shaped chunks.
: -- from [[his|Richard Rorty]] book //Contingency, Irony, and Solidarity// (1989)
And an interesting connection (in an [[article titled "Do we See Icons or Reality"|https://social-epistemology.com/2019/12/05/do-we-see-icons-or-reality-a-review-of-donald-hoffmans-the-case-against-reality-brian-martin/]]) to neuroscience:
[[Donald D. Hoffman]]’s picture seems to have an affinity with the philosophical position of pragmatism (e.g., [[Richard Rorty]] 1979), which in essence replaces truth with usefulness. Pragmatism is at the level of knowledge, so according to Interface Theory of Perception (ITP) it is at the level of the interface rather than reality. Nevertheless, there are strong parallels. The Fitness Beats Truth (FBT) theorem is the basis for the conclusion that what we perceive is a product of an evolutionary process that selects for fitness.
"I believe the intellectual life of the whole of western society is increasingly being split into two polar groups...." So wrote the British physicist and novelist C. P. Snow in his famous The Two Cultures Rede Lecture delivered at Cambridge University in 1959.^^1 ^^
Although Snow was mostly concerned with the divisions he felt in his own personal and professional experience between the "literary intellectuals" and "physical scientists," the two-culture split has come to symbolize a wider and ever- growing gulf in academia between the sciences and the humanities.
[...]
Such polarizations are deeply simplistic and are growing less relevant every day. Current developments in the physical, biological, and neurosciences deem such narrow-minded antagonism and mutual exclusion as problematic and downright corrosive. It limits progress and inhibits creativity. Many of the key issues of our times, an illustrative sample being the questions explored in this volume, call for a constructive engagement between the two cultures. It is our contention that the split between the sciences and the humanities is largely illusory and unnecessary, in need of a new integrative approach. ''We need to reach beyond traditional disciplinary boundaries to create truly cross-disciplinary ways of thinking. It is no longer enough to read Homer and Einstein or Milton and Newton as disjoint efforts to explore the complexities of the world and of human nature. The new mindset proposes that the complexities of the world are an intrinsic aspect of human nature as we experience reality. We cannot separate ourselves from a world that we are a part of. Any description or representation, any feeling or interpretation, is a manifestation of this embedding. Who we are and what we are form an irreducible whole.''
The questions that call for an engagement between the sciences and the humanities are not restricted to academia. Consider the future of humanity in an ailing planet as we move toward a more thorough hybridization with machines. We currently extend our physical existence in space and time through our cell phones, while many scientists and humanists consider futuristic scenarios where we will transcend the body, becoming part human and part machine, with some even speculating that a singularity point will be reached when machines will become smarter than we are-although they are rather vague on the meaning of smarter. Such technological advances call into question the wisdom of our scientific advances, raising issues related to machine control, the ethics of manipulating humans and other lifeforms, the impact of robotization and artificial intelligence in the job market and in society, and our predatory relationship with our home planet. There is a new culture emerging, inspired by questions old and new that reside at the very core of our pursuit of knowledge. The choices we make now, as we shape our curricula and create academic departments and institutes and engage in discussions with the general public, will shape generations and the nature of intellectual cooperation for decades to come.
----
^^1^^- C. P. Snow, The Two Cultures and the Scientific Revolution, (Cambridge: Cambridge University Press, 1959).
From Verlyn Klinkenborg's article [["The Forest’s Eye View"|https://www.nybooks.com/articles/2022/07/21/the-forests-eye-view-ever-green-the-treeline/]]:
* Ben Rawlence leaves us almost exactly where Alexander von Humboldt found himself in 1800—but feeling just the opposite. The thought of nature without humans was “strange and sad” to Humboldt. To Rawlence, the thought that the “evolutionary journey” will continue without our species has its own beauty: “The way out of the depression and grief and guilt of the carbon cul-de-sac we have driven down is to contemplate the world without us,” to accept that life—in the broad sense—is a continuum.
* I’ve had thoughts very much like Rawlence’s—finding consolation in the long view of evolution and, in my case, even in thinking about the geodynamics at work below this planet’s biological skin. More and more, though, I think about humans and symbiosis—our “living together” with biological organisms of different species. Symbiosis sounds at first like a metaphorical extension of what Wordsworth and Coleridge were working on in their early poetry—the thought that the mind and the world somehow shape each other. ''The connection they were exploring was metaphysical and emotional, not biological. And there’s always a problem with metaphors. No matter what they touch, they have a way of turning everything human.''
* But symbiosis isn’t a metaphor. ''The symbiotic connection between us and the world around us is biological, literal. Surely, instead of thinking of ourselves as Humboldtian observers, alone and separate in the “ancient inheritance” of the natural world,
we need to begin thinking of ourselves in connection to the organisms and systems and networks we are biologically symbiotic with, in whose presence we have coevolved.'' Climate binds us all together. Life binds us all together. We need to think of ourselves as symbionts—intrinsically linked with all other lives, of every species. That connection—inscribed within us genetically—confers a profound responsibility upon us, a responsibility that looks more and more like simple self-restraint.
[co-dependence] [integration] [one with everything]
We never consider that the things dogs know about us are things of which we have not the faintest notion.
(compare to [[Richard Hamming]]'s take on [[the limitations of knowledge|Perhaps there are thoughts we cannot think]].)
We often speak and treat one another as though each of us is the sum of all our past beliefs and actions, nothing added, subtracted or transformed.
Perhaps some of the problem is the passion for categorical thinking or rather for categories as an alternative to thinking. Some people evolve and change as dramatically as caterpillars turning into butterflies. Some might as well be carved from granite, carrying whatever beliefs and values they were launched with throughout their life. Some get better, some worse, some stay the same. Some shift as a result of societal changes, some for individual reasons and through individual effort. Recognizing this means having to think about each case and also means recognizing that sometimes we don’t know enough to render judgment. Sometimes we do.
People can change, some have, some insincerely profess to have done so, some won’t or can’t or will relapse. Asserting that someone has not changed may be as untrue, but perhaps it feels more like certainty and it certainly requires less trust.
But beyond the individual cases comes the need for something broader: a recognition that people change, and that most of us have and will, and that much of that is because in this transformative era, we are all being carried along on a river of change.
: -- from [[her|Rebecca Solnit]] essay [[How We Stopped Believing That People Can Change|https://www.nytimes.com/2022/04/22/opinion/forgiveness-redemption.html]]
We pass through this world but once, so do now any good you can do, and show now any kindness you can show, for we shall not pass this way again.
[generosity]
We see a friend’s eye as one and indivisible. A stranger’s eye we take in part by part: the white, the iris, and the pupil.
We seem to either mock (Henry David Thoreau) or idolize (Thomas Merton) those who seek and enjoy solitude, perhaps because perceiving them as ordinary folks might require us to question the cocoon of noise and artificial light with which we surround ourselves and that constitutes contemporary life.
: -- from his book //At the Center of All Beauty//
[reflection] [meditation]
Many voices remind us of the dangers of speed. Some are inside our heads. Walk, do not run. Relax. Simplify. Let the phone ring. We wonder whether our accelerating heartbeats and racing brains are leading us toward catastrophe. We wonder whether there isn't a limit, after all, to the pace a sensible human can sustain. Short attention spans and information overload are quintessentially modern pathologies, after all. We seem to remember a gentler, slower, more sensible time.
But we make our own choices. We catch the fever. And we seem to choose mania over boredom every time. ''The historical record shows that humans have never, ever opted for slower,'' the historian Stephen Kern points out. We fool ourselves with false nostalgia -- a nostalgia for what never was. Whenever we speed up the present, we slow down the past.
''If a man travels to work on a horse for 20 years,'' Kern says, ''and then an automobile is invented and he travels in it, the effect is both an acceleration and a slowing.'' Until Filippo Marinetti, the Futurist, began talking about speeding up rivers, ''the Danube had never seemed so deliciously slow.'' Peering back through history, we see scenes in a kind of slow motion that did not exist then. We have invented it.
: -- from [[his|James Gleick]] [[article in the NYT "Seeing Faster"|https://www.nytimes.com/1999/09/19/magazine/seeing-faster.html]]
We shall never have more time. We have, and have always had, all the time there is.
: -- from his book //How to Live on 24 Hours a Day//
(compare to
> "You can have a 25-hour-day. Just go to sleep at your usual time, but wake up one hour earlier than usual."
)
The blog entry on [[How to Live on 24 Hours a Day|https://fs.blog/2017/05/arnold-bennett-living-meaningful-life/]] at Farnam Street quotes more of Bennett:
>Newspapers are full of articles explaining how to live on such-and-such a sum…but I have never seen an essay ‘how to live on 24 hours a day.’ Yet it has been said that time is money. That proverb understates the case. Time is a great deal more than money. If you have time, you can obtain money-usually. But…you cannot buy yourself a minute more time.
"""
"""
(compare to [[Seneca]]:
> We are not given a short life but we make it short, and we are not ill-supplied but wasteful of it... Life is long if you know how to use it.
)
We live at the Earth’s scale, which makes us forget what a mote it is by the standards even of its own galaxy. Evening and morning, seedtime and harvest, it shapes time for us, and the days and the years can seem long enough, though in the life of the universe they are nothing. We should feel awe at the power of this little world to somehow remake time and scale so that we can wander and work and learn and finally grow old, and feel that the dimensions of our lives have been wide indeed.
[...]
Earth is the only planet strung with light. Which is among our costly excesses. Still, it is adorned. Its cities shine so brilliantly they might seem to allude to the starry regions and to claim some bond with them. Little Earth, alone in an indifferent universe, flaunting its jewels.
(compare to [[Carl Sagan - A Pale Blue Dot]])
[Cosmos] [humanity] [uniqueness] [astronomy]
Neil Gaiman points out that at the end of Fahrenheit 451, Ray Bradbury defines a book by saying "that we should not judge our books by their covers, and that some books exist between covers that are perfectly people-shaped.
We should remember that the idea of the world as composed of weightless atoms is striking just because we know the weight of things so well. So, too, we would be unable to appreciate the lightness of language if we could not appreciate language that has some weight to it.
Lightness for me goes with precision and determination, not with vagueness and the haphazard. Paul Valéry said: “Il faut être léger comme l’oiseau, et non comme la plume”
> (One should be light like a bird, and not like a feather).
I have relied on Cavalcanti for examples of lightness in at least three different senses. First there is a lightening of language whereby meaning is conveyed through a verbal texture that seems weightless, until the meaning itself takes on the same rarefied consistency. I leave it to you to find other examples of this sort. [[Emily Dickinson]], for instance, can supply as many as we might wish ([[A sepal, petal, and a thorn - poem by Emily Dickinson]]):
{{A sepal, petal, and a thorn - poem by Emily Dickinson}}
As melancholy is sadness that has taken on lightness, so humor is comedy that has lost its bodily weight.
[...]
Jacques in As You Like It (IV.i.15-18), defines melancholy in these terms: “but it is a melancholy of mine own, compounded of many simples, extracted from many objects, and indeed the sundry contemplation of my travels, which, by often rumination, wraps me in a most humorous sadness.” It is therefore not a dense, opaque melancholy, but a veil of minute particles of humours and sensations, a fine dust of atoms, like everything else that goes to make up the ultimate substance of the multiplicity of things.
:-- from his lecture [["Lightness"|https://zerogravity.empac.rpi.edu/lightness/]].
In light of the (seemingly) astonishing advances in AI (see [[GPT-x|https://openai.com/api/]]), we should resist the temptation to fall into the trap that [[Arthur C. Clarke]] warned us (I think; in one sense; in certain contexts) about, namely: any sufficiently advanced technology is indistinguishable from magic^^1^^.
We should however (I hope) strive to achieve the state where every sufficiently advanced form of work is indistinguishable from play^^2^^.
----
^^1^^ from [[his|Arthur C. Clarke]] [["Three Laws"|https://en.wikipedia.org/wiki/Clarke%27s_three_laws]]
^^2^^ from a tweet by [[Seb Paquet]]
We should teach children Computer Science for the same reason we teach them to read and write. Not in order for them to find a job, but in order to raise the level of enlightenment.
But Kay emphasizes that Computer Science is not about programming in a particular language. Yes, you need to learn how to read and write code in a language, but the main goal is to be able to think of, express, and describe Big Ideas so that computers can execute them.
We should tell ourselves “You may not wake up tomorrow,” when going to bed and “You may not sleep again,” when waking up.
[ [[memento mori|https://dailystoic.com/memento-mori/]] ]
We should use our opinions to start discussions, not to end them.
We snatch our freeze-frame of life from the simultaneity of existence by holding on to illusions of permanence, congruence, and linearity; of static selves and lives that unfold in sensical narratives.
compare to [[You can't take a picture of reality because it's a movie, or a cartoon, depending on your sensibility.]]
We take fortuitous resemblances among us to be actual likeness, because those around us have fallen heir to the same customs, trade in the same coin, acknowledge, more or less, the same notions of decency and sanity. But all that really just allows us to coexist with the inviolable, untraversable, and utterly vast spaces between us.
: -- from [[Robinson|Marilynne Robinson]]'s book //Gilead//.
We take our bearings, daily, from others. To be sane is, to a great extent, to be sociable.
When I ask you about something that you believe in, as soon as I raise the question why, you have answers. Reasons come to your mind. But the reasons may have very little to do with the real causes of your beliefs.
The real causes are rooted in your personal history. And this has very little to do with the reasons that come to your mind, why your position is correct. And we take the reasons that people give for their actions and beliefs, and our own reasons for our actions and beliefs, much too seriously.
And it’s a game because even if you did destroy the arguments that people raise for their beliefs, it wouldn’t change their beliefs. They would just find other arguments.
That’s a perspective which is saddening in some ways. But it’s about what happens in the world of ideas and in the world of politics, that we have a lot of illusions about the role of reasons in our beliefs and decisions. It’s smaller than we think.
: -- snippets from [[an interview|https://onbeing.org/programs/daniel-kahneman-why-we-contradict-ourselves-and-confound-each-other-jan2019/]] with [[Krista Tippett]]
We teach math and literature and we don't necessarily expect students to become mathematicians or writers or poets. We should teach computer science without necessarily expecting students to become programmers or computer scientists. But, the moment students decide to take no more computing-related courses they should listen carefully. They might be able to hear the sound of closing doors.
-- Haggai Mark (paraphrasing James Caballero)
We tend to overestimate the effect of a technology in the short run and underestimate the effect in the long run.
: -- AKA Amara's Law
(There is actually a lot wrapped up in these 21 words which can easily fit into a tweet ... An optimist can read it one way, and a pessimist can read it another. It should make the optimist somewhat pessimistic, and the pessimist somewhat optimistic, for a while at least, before each reverting to their norm.)
[prediction]
Most people in the world would say that their lives are insignificant, historically speaking, but it might be prudent to consider whether the relative blamelessness that is assumed to come with insignificance can be relied upon. We are not competent to decide how much we matter in the long term. One of my Puritans—the seventeenth-century divine John Flavel—said that ''we will be judged twice, once when we die and once when everything we have said or done has had its final effect.'' Whisper a cruel rumor—who knows what force it will acquire if it lives.
: -- from her article [["A Theology of the Present Moment"|https://www.nybooks.com/articles/2022/12/22/a-theology-of-the-present-moment-marilynne-robinson/]]
(see also [[Irvin Yalom]]'s take on the [[rippling effect|The idea that we can leave something of ourselves, even beyond our knowing, offers a potent answer to those who claim that meaninglessness inevitably flows from one's finiteness and transiency.]])
We will never have our flames extinguished by knowledge. The purpose [and effect] of science is not to cure us of our sense of mystery and wonder, but to constantly reinvent and reinvigorate it.
Echoing [[Richard Feynman]]'s observation:
> The purpose of knowledge is to appreciate wonders even more. A scientist is never certain.
and
> we should teach people about wonders and that the purpose of knowledge is to appreciate wonders even more. And that the knowledge is just to put into correct framework the wonder that nature is.
Or as [[J. B. S. Haldane]] observed about the strangeness/imagination of life:
> [[My own suspicion is that the universe is not only queerer than we suppose, but queerer than we can suppose... I suspect that there are more things in heaven and earth that are dreamed of, or can be dreamed of, in any philosophy.]]
[awe] [wonder] [beauty]
We're all in the same boat on the sea of suffering.
compare to [[The more personal you are willing to be and the more intimate you are willing to be about the details of your own life, the more universal you are.]]
compare to [[Life is like stepping onto a boat that is about to sail out to sea and sink.]]
(This echoes [[Jorge Luis Borges]]'s [[The vociferous catastrophes of a general order — fires, wars, epidemics — are one single pain, illusorily multiplied in many mirrors... and yet ... Our destiny… is not frightful by being unreal; it is frightful because it is irreversible and iron-clad.]])
We're better at stuff because we've figured out how to become better. Talent is not a thing; it's a process.
- David Shenk in his book "The genius in all of us"
We’ve been shaped to have perceptions that keep us alive, so we have to take them seriously. I’ve evolved these symbols to keep me alive, so I have to take them seriously. But it’s a logical flaw to think that if we have to take it seriously, we also have to take it literally.
There’s a metaphor that’s only been available to us in the past 30 or 40 years, and that’s the desktop interface. Suppose there’s a blue rectangular icon on the lower right corner of your computer’s desktop — does that mean that the file itself is blue and rectangular and lives in the lower right corner of your computer? Of course not. But those are the only things that can be asserted about anything on the desktop — it has color, position and shape. Those are the only categories available to you, and yet none of them are true about the file itself or anything in the computer. They couldn’t possibly be true. That’s an interesting thing. You could not form a true description of the innards of the computer if your entire view of reality was confined to the desktop. And yet the desktop is useful. That blue rectangular icon guides my behavior, and it hides a complex reality that I don’t need to know. That’s the key idea. Evolution has shaped us with perceptions that allow us to survive. They guide adaptive behaviors. But part of that involves hiding from us the stuff we don’t need to know. And that’s pretty much all of reality, whatever reality might be.
We encounter a startling “Fitness-Beats-Truth” (FBT) theorem, which states that evolution by natural selection does not favor true perceptions—it routinely drives them to extinction. Instead, natural selection favors perceptions that hide the truth and guide useful action.
The world presented to us by our perceptions is nothing like reality. What’s more, we have evolution itself to thank for this magnificent illusion, as it maximizes evolutionary fitness by driving truth to extinction.
: -- from [[his|Donald D. Hoffman]] interview in Quanta Magazine titled [["The evolutionary argument against reality"|https://www.quantamagazine.org/the-evolutionary-argument-against-reality-20160421/]]
As [[Albert Einstein]] put it:
> [[Time and space are modes by which we think and not conditions in which we live.]]
On which [[Yann Martel]] commented in his book //"Life of Pi "//:
> The world isn't just the way it is. It is how we understand it, no? And in understanding something, we bring something to it, no? Doesn't that make life a story? (or a user interface? :)
(compare to [[Thomas Nagel]]'s [[(differently/less (?)) radical point of view|In speaking of the move from subjective to objective characterization, I wish to remain noncommittal about the existence of an end point, the completely objective intrinsic nature of the thing, which one might or might not be able to reach. It may be more accurate to think of objectivity as a direction in which the understanding can travel. And in understanding a phenomenon like lightning, or rainbows, or clouds, it is legitimate to go as far away as one can from a strictly human viewpoint.]]).
Well, there's one thing to be said for money. It can make you rich.
Compare to Woody Allen's [[Money is better than poverty, if only for financial reasons.]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Wernher Magnus Maximilian Freiherr von Braun (March 23, 1912 – June 16, 1977) was a German rocket scientist, engineer, space architect, and one of the leading figures in the development of rocket technology in Nazi Germany and the United States during and after World War II.
<<list-links "[tag{!!title}]">>
http://www.wesnisker.com/
<<list-links "[tag{!!title}]">>
In the Tractatus Logico-Philosophicus (1921) of Wittgenstein (in German):
‘Was sich überhaupt sagen läßt, läßt sich klar sagen; und wovon man nicht reden kann, darüber muß man schweigen’.
(What can be said at all can be said clearly; and about that of which one cannot speak, one must stay silent.)
From the book [[A Song for Molly|https://inference-review.com/article/songlines]] by Jeremy Bernstein:
> [[Ludwig Wittgenstein]] in his formidable Tractatus Logico-Philosophicus, writes in its opening and closing paragraphs, respectively,
>>“The world is all that is the case,” and “Whereof one cannot speak, thereof one must be silent.”
>Of this, someone (a woman :) remarks that only a man would write “a whole book about something that he says he cannot write about.”
(compare to [[Cormac McCarthy]]'s [[take on the unconscious|The fact that the unconscious prefers avoiding verbal instructions pretty much altogether—even where they would appear to be quite useful—suggests rather strongly that it doesn't much like language and even that it doesn't trust it.]])
What don't die can't live. What don't live can't change. What don't change can't learn.
What gets us into trouble is not what we don’t know, it’s what we know for sure that just ain’t so.
Or as [[Stephen Hawking]] had observed:
> the greatest enemy of knowledge is not ignorance, but the illusion of knowledge.
What goes around may come around, but it never ends up exactly the same place, you ever notice? Like a record on a turntable, all it takes is one groove's difference and the universe can be on into a whole 'nother song.
Which echoes (ha!) something attributed to [[Mark Twain]]:
>History doesn't repeat itself, but it does often rhyme.
Or in a more oblique way said by [[Stanislaw Lem]]:
> When smashing monuments, save the pedestals. They always come in handy.
And is (more optimistically?) reflected by what [[John Steinbeck]] wrote:
> All the goodness and the heroisms will rise up again, then be cut down again and rise up,. It isn’t that the evil thing wins — it never will — but that it doesn’t die.
(compare to [[the poem "The End and the Beginning"|The End and the Beginning - poem by Wisława Szymborska]] by [[Wislawa Szymborska]]).
What I believe in, what I value most, is transitoriness.
But is not transitoriness — the perishableness of life — something very sad?
No! It is the very soul of existence. It imparts value, dignity, interest to life. Transitoriness creates time — and “time is the essence.” Potentially at least, time is the supreme, most useful gift.
: -- from [[BrainPickings|https://www.brainpickings.org/2015/04/24/this-i-believe-thomas-mann-time/]]
What I found is that wisdom can be found in many places.
And I say it with respect :)
But Winston Churchill expressed it a bit cynically, I think, when he said: The greatest lesson in life is to know that even fools are right sometimes.
What I have basically been doing about the rain is ignoring it, to tell the truth.
How I do that is by walking in it.
I did not fail to notice that those last two sentences must certainly look like a contradiction, by the way.
Even if they are no such thing.
One can very agreeably ignore a rain by walking in it.
In fact it is when one allows a rain to prevent one from walking in it that one is failing to ignore it.
: -- from [[his|David Markson]] book //Wittgenstein's Mistress//
What I here propound is true; therefore it cannot die; or if by any means it be now trodden down so that it die, it will "rise again to the Life Everlasting."
-- from his [[Prose Poem "Eureka"|http://xroads.virginia.edu/~hyper/poe/eureka.html]]
There is nothing frightening about an eternal dreamless sleep. Surely it is better than eternal torment in Hell and eternal boredom in Heaven. And what if I’m mistaken? The question was asked of Bertrand Russell, the famous mathematician, philosopher, and outspoken atheist. “What if you died,” he was asked, “and found yourself face to face with God? What then?”
And the doughty [brave and persistent] old champion said, “I would say, ‘Lord, you should have given us more evidence.'”
But on the other hand: {{Coincidence is God's way of remaining anonymous.}}
Other people had different "[[Burning Questions for God|If I die – God forbid – I would like to go to heaven to ask somebody in charge up there, ‘Hey, what was the good news and what was the bad news?’]]".
The poet [[Eavan Boland|https://en.wikipedia.org/wiki/Eavan_Boland]] had written:
> I want a poem I can grow old in. I want a poem I can die in.
On which [[Shawna Lemay]] comments:
> That a poem could hold the weight of a life, that it could sustain us through a life, that we can grow in its presence, measure ourselves against it, and that we could find it again at the end of our life – I find this to be inspiring rather than morbid. And it’s asking a lot of a poem. As we should. Because, the poem is us. The poem is larger than us.
: -- from [[her|Shawna Lemay]] blog post [[What Can a Poem Be?|http://transactionswithbeauty.com/home/zwbwe26ng26p5kpntgmjj3g433acrf]]
What is memory, for a time traveler? A conundrum. We say that memory “takes us back.” [[Virginia Woolf]] called memory [[a seamstress “and a capricious one at that.”|Memory is the seamstress (and a capricious one at that), who threads our lives together.]] …
“I can’t remember things before they happen,” says [ [[Lewis Carroll]]'s ] Alice, and the Queen retorts, “It’s a poor sort of memory that only works backwards.”
Memory both is and is not our past. It is not recorded, as we sometimes imagine; it is made, and continually remade. If the time traveler meets herself, who remembers what, and when?
What is mind? No matter. What is matter? Never mind.
What is most complete cannot be seen in its entirety, hence it seems deficient. What is fullest cannot be seen in its totality, hence it seems empty.
:-- Interpreting the [[Tao Te Ching, chapter 14|http://northfieldmeditation.org/wp-content/uploads/2015/09/Tao-Te-Ching-DWeis-2015.pdf]] (and [[multiple other translations|http://www.taoteching.org.uk/index.php?c=14&a=Gia-fu+Feng+and+J+English]]):
"""
Looking but not seeing,
we call it elusive.
Listening but not hearing,
we call it faint.
Reaching but not grasping,
we call it formless.
[...]
Facing it, we perceive no beginning.
Following it, we perceive no end.
"""
(maybe echoing [[David Foster Wallace]]'s [[allegory about the fish|What the hell is water?]] ?).
What is past is prologue.
:: -- inscription in a Washington D.C. museum
the epigraph in Zadie Smith's book //White Teeth//
What is the difference between an applied mathematician and a pure mathematician? An applied mathematician has a solution for every problem, while a pure mathematician has a problem for every solution.
From [["The fallacy of obviousness - A new interpretation of a classic psychology experiment will change your view of perception, judgment – even human nature"|https://aeon.co/essays/are-humans-really-blind-to-the-gorilla-on-the-basketball-court]] by [[Teppo Felin]]:
what people are looking for – rather than what people are merely looking at – determines what is obvious. Obviousness is not self-evident.
...
obviousness depends on what is deemed to be relevant for a particular question or task at hand. Rather than passively accounting for or recording everything directly in front of us, humans – and other organisms for that matter – instead actively look for things. The implication (contrary to psychophysics) is that mind-to-world processes drive perception rather than world-to-mind processes.
...
The biologist Jakob von Uexküll (1864-1944) argued that all species, humans included, have a unique ‘Suchbild’ – German for a seek- or search-image – of what they are looking for. In the case of humans, this search-image includes the questions, expectations, problems, hunches or theories that we have in mind, which in turn structure and direct our awareness and attention. The important point is that humans do not observe scenes passively or neutrally.^^1^^
...
computers and algorithms – even the most sophisticated ones – cannot address the fallacy of obviousness. Put differently, they can never know what might be relevant. Some of the early proponents of AI recognised this limitation (for example, the computer scientists John McCarthy and Patrick Hayes in their 1969 paper, which discusses ‘representation’ and the frame problem). But this problem has been forgotten amid the present euphoria with large-scale information- and data-processing.
...
as Albert Einstein put it in 1926:
> ‘Whether you can observe a thing or not depends on the theory which you use. It is the theory which decides what can be observed.’
...
we need to recognise and investigate the remarkable human capacities for generating questions and theories that direct our awareness and observations in the first place.
...
my central concern is that the current obsession with human blindness and bias – endemic to behavioural economics and much of the cognitive, psychological and computational sciences – has caused scientists themselves to be blind to the more generative and creative aspects of human nature and the mind. Yes, humans do indeed miss many ‘obvious’ things, appearing to be blind, as Kahneman and others argue. But not everything that is obvious is relevant and meaningful. Thus human blindness could be seen as a feature, not a bug.^^2^^
...
Humans do a remarkable job of generating questions, expectations, hypotheses and theories that direct their awareness and attention toward what is relevant, useful and novel. And it is these – generative and creative – qualities of the human mind that deserve further attention. After all, these and related aspects of mind are surely responsible for the significant creativity, technological advances, innovation and large-scale flourishing that we readily observe around us.
----
^^1^^ This echoes what [[Cheri Huber]] had said: [[When we look at the world, we do not see the world as it is, we see the world as we are. The only thing we ever experience is ourselves. (This is called projection).]]
^^2^^ An article (by Larissa MacFarquhar) in the New Yorker titled [["The Mind-Expanding Ideas of Andy Clark"|https://www.newyorker.com/magazine/2018/04/02/the-mind-expanding-ideas-of-andy-clark]] covering the work of philosopher [[Andy Clark]] notes:
> One major difficulty with perception, Clark realized, was that there was far too much sensory signal continuously coming in to assimilate it all. The mind had to choose. And it was not in the business of gathering data for its own sake: the original point of perceiving the world was to help a creature survive in it. For the purpose of survival, what was needed was not a complete picture of the world but a useful one—one that guided action. A brain needed to know whether something was normal or strange, helpful or dangerous. The brain had to infer all that, and it had to do it very quickly, or its body would die—fall into a hole, walk into a fire, be eaten.
What sets expert practitioners apart is the quality and quantity of their mental representations.
[performance] [skills acquisition]
David Foster Wallace made an (obvious but deep (ha!)) point at the [[commencement speech at Kenyon College (for the graduating class of 2005)|http://bulletin-archive.kenyon.edu/x4280.html]].
>There are these two young fish swimming along and they happen to meet an older fish swimming the other way, who nods at them and says "Morning, boys. How's the water?"
>And the two young fish swim on for a bit, and then eventually one of them looks over at the other and goes "What the hell is water?"
And Foster Wallace clarifies:
>I am not the wise old fish. The point of the fish story is merely that the most obvious, important realities are often the ones that are hardest to see and talk about. Stated as an English sentence, of course, this is just a banal platitude, but the fact is that in the day to day trenches of adult existence, banal platitudes can have a life or death importance, or so I wish to suggest to you on this dry and lovely morning.
"""
"""
(see also [[Marshall McLuhan]]'s [[I don't know who discovered water, but it wasn't a fish.]]).
Compare to [[Susan Moon]]'s take on [[connectedness and co-dependence |We are completely held by the atmosphere in a literal way...We are all connected, molecule to molecule. I'm held by everything that's not me.]].
But sometimes we are also restricted by the belief that [[Myths are things that never happened, but always are.]]
One of the questions that vexed Saint Augustine was: "What was God doing before He created the world?" (Subtext: What was he waiting for? Wouldn't it have been better to start sooner?)
Saint Augustine gave two answers.
First answer: Before God created the world, He was preparing Hell for people who ask stupid questions.
Second answer: Until God creates the world, no "past" exists. So the question doesn't make sense.
His first answer is funnier, but the second, spelled out at length in Chapter 10 of Augustine's Confessions, is more interesting. Augustine's basic argument is that the past no longer exists and the future does not yet exist; properly speaking, there is only the present. But the past has a sort of existence within minds, as present memory (as does of course the future, as present expectations). Thus the existence of a past depends on the existence of minds, and there can be no "before" in the absence of minds. Before minds were created, there was no before!
Frank Wilczek, in his book //The Lightness of Being: Mass, Ether, and the Unification of Forces//
(Compare to Alan Watts' [[You can not compare this moment with any other, for there are no others. Memories of the past and anticipation of the future are not other moments, but parts of this one.]])
We need news organizations to help our curiosity by signaling how their stories fit into the larger themes on which a sincere capacity for interest depends. To grow interested in any piece of information, we need somewhere to ‘put’ it, which means some way of connecting it to an issue we already know how to care about. A section of the human brain might be pictured as a library in which information is shelved under certain fundamental categories. Most of what we hear about day to day easily signals where in the stacks it should go and gets immediately and unconsciously filed ...
''What we colloquially call ‘feeling bored’ is just the mind, acting out of a self-preserving reflex, ejecting information it has despaired of knowing where to place (in the 'library of the mind').''
: -- from his thought-provoking book [[The News: A User's Manual|https://www.youtube.com/watch?v=A4aAJrJB6h0]]
A conversation between the father and son on the road"
Are we going to die?
Sometime. Not now.
And we’re still going south.
Yes.
So we’ll be warm.
Yes.
Okay.
Okay what?
Nothing. Just okay.
Go to sleep.
Okay.
I’m going to blow out the lamp, is that okay?
Yes. That’s okay.
And then later in the darkness:
Can I ask you something?
Yes. Of course you can.
What would you do if I died?
If you died I would want to die too.
So you could be with me?
Yes. So I could be with you.
Okay.
: -- from [[his|Cormac McCarthy]] book //"The Road"//
[father] [son]
What you call complications are simply another name for life itself. Worry is life, and life is worry. And the absence of worry is death.
What you do speaks so loud that I cannot hear what you say.
So speak to me with your actions, not your words. Speak to me with your doings, not your mouth. Speak to me with your hands, not your voice.
What you end up remembering isn't always the same as what you have witnessed.
[[He|Julian Barnes]] also said (in //The Sense of an Ending//):
> That's one of the central problems of history, isn't it, sir? The question of subjective versus objective interpretation, the fact that we need to know the history of the historian in order to understand the version that is being put in front of us.
(compare to what [[he|Julian Barnes]] also said: [[History is that certainty produced at the point where the imperfections of memory meet the inadequacies of documentation.]]).
(compare to a saying [[attributed|https://quoteinvestigator.com/2013/10/04/never-happened/]] to [[Mark Twain]] and others:
> I am an old man and have known a great many troubles, but most of them never happened.
)
On Quality:
"""
I would like not to cut any new channels of consciousness but simply dig deeper into old ones that have become silted in with the debris of thoughts grown stale and platitudes too often repeated.
"What's new?" is an interesting and broadening eternal question, but one which, if pursued exclusively, results only in an endless parade of trivia and fashion, the silt of tomorrow.
I would like, instead, to be concerned with the question "What is best?," a question which cuts deeply rather than broadly, a question whose answers tend to move the silt downstream.
There are eras of human history in which the channels of thought have been too deeply cut and no change was possible, and nothing new ever happened, and "best" was a matter of dogma, but that is not the situation now.
Now the stream of our common consciousness seems to be obliterating its own banks, losing its central direction and purpose, flooding the lowlands, disconnecting and isolating the highlands and to no particular purpose other than the wasteful fulfillment of its own internal momentum. Some channel deepening seems called for.
"""
My [[father|Alfred Mark]] used to tell this, demonstrating the nuances of Yiddish:
Q: What's the difference between a schlimazl and a schlumiel?
A: A schlumiel is the person who spills hot soup in your lap. You are the schlimazl.
Alternative spellings: shlimazel, schlimazel, shlumiel
----
In the same vein:
>The difference between a misfortune and a calamity? If [[ [William Ewart ] Gladstone|https://en.wikipedia.org/wiki/William_Ewart_Gladstone]] fell into the Thames, it would be a misfortune. But if someone dragged him out again, it would be a calamity.
: ― [[Benjamin Disraeli]]
A smart [clever] person can figure out how to get out of a tough situation, which a wise person would never even get into.
Hebrew? (wise vs. smart/clever) חכם לעומת פיקח
Or as [[Mark Twain]] observed:
> It is easier to stay out than get out.
<<comparequote "Lao Tzu" "If you understand others you are smart. If you understand yourself you are wise. If you overcome others you are powerful. If you overcome yourself you have strength. If you know how to be satisfied you are rich. If you can act with vigor, you have a will. If you don't lose your objectives you can be long-lasting. If you die without regret, you are eternal." "smartness vs. wisdom">>
From [[his|Jasper Fforde]] book //Lost in a Good Book//:
"""
"What's the opposite of deja vu, when you see something that hasn't happened yet?"
"I don't know--avant verrais^^1^^?"
"That's it."
"""
[illusion]
----
^^1^^ avant verrais [Fr. "seen first/before"] - https://context.reverso.net/translation/french-english/Je+te+verrais+avant
And the following [[thread/interpretations|https://wordsmith.org/board/ubbthreads.php?ubb=showflat&Number=135961]]:
* If deja vu is a feeling that you've already seen something that you've never seen before, then what would be the opposite? The normal answer seems to be the feeling that something you should be familiar with is totally unfamiliar. This might be interpreted as seeing something you don't expect or as not seeing something you do expect (so, maybe //premonition//, or //amnesia// :). How you'd say either of those in French is beyond me. Maybe to complete the oppositity you should say it in German.
* or maybe: jamais vu [Fr. "never seen"] the sensation that familiar surroundings are strangely unfamiliar; the illusion that one has never seen anything like that before.
* Once Robin Williams said that he was experiencing vu jade: the strange feeling that none of this has ever happened before.
* And then there is vu incroyable - the feeling that this can't be happening at all.
Whatever is begun in anger ends in shame.
> וְדַע, שֶׁהָאָדָם צָרִיך לַעֲבר עַל גֶּשֶׁר צַר מְאֹד מְאֹד ,וְהַכְּלָל וְהָעִקָּר שֶׁלּא יִתְפַּחֵד כְּלָל
(ודע, שהאדם צריך לעבור על גשר צר מאד מאד, והכלל והעיקר שלא יתפחד כלל)
(from [[Likutei Moharan, Part II, Torah 48:2:7|https://www.sefaria.org/Likutei_Moharan%2C_Part_II.48.2.7?lang=bi]])
she-ha-adam tsarich la-avor gesher tsar me'od me'od, ha-k’lal ve’ha-ikar shelo yit-pached k’lal.
it's crucial to correctly translate the word "yit-pached", which means to frighten oneself:
>“When a person must cross an exceedingly narrow bridge, the general principle and the essential thing is to not __frighten oneself__ at all.”^^1^^
and not, as it's [[often translated|https://www.musixmatch.com/lyrics/%D7%A2%D7%A4%D7%A8%D7%94-%D7%97%D7%96%D7%94-3/%D7%9B%D7%9C-%D7%94%D7%A2%D7%95%D7%9C%D7%9D-%D7%9B%D7%95%D7%9C%D7%95-%D7%92%D7%A9%D7%A8-%D7%A6%D7%A8-%D7%9E%D7%90%D7%95%D7%93/translation/english]]: to be afraid:
> "... most importantly, don't be afraid at all"
And a concrete and simple example of the significance of the difference in focus, attitude, and locus of control:
If someone marked on the ground a path between two lines 1 yard apart and asked you to walk that path, you would have no trouble (and no fear) of walking this path.
But, if then, someone would lift this path to a height of 100 yards in the air, you'd be reckless if you were as casual about walking this path up there.
Nothing substantial has changed about the path itself, but one tends to amplify fears, in a given context.^^2^^
----
^^1^^ you need a strong presence of mind (not to freighten yourself), a lot of confidence, and/or strong conviction/faith, (and/or a [[solid proof)|There is no permanent place in the world for ugly mathematics. (But,) the ugly proofs have their role.]].
^^2^^ and as [[Mark Twain]] observed: context and [[imagination|I have known a great many troubles in my life, some of which actually happened.]] may play a big role in how we perceive things and feel about them.
From a conversation with [[Ian McEwan]] [[on Edge.org|https://www.edge.org/conversation/ian_mcewan-machines-like-me]]:
[[George Dyson]]: When [[Alan Turing]] was asked when he would say that a machine was conscious, which so many people have written books about, his answer was very simple. It wasn’t any Turing test kind of thing. He would say a machine is conscious when he would be punished for saying otherwise. That was his only statement.
[the "Ultimate Turing Test" per [[Alan Turing]] :)
When all is said and done, we're really just all walking each other home.
Or as the journalist [[Norman Cousins|https://en.wikipedia.org/wiki/Norman_Cousins]] wrote:
> Life is an adventure in forgiveness.
[[similarly, by Philo of Alexandria|Be kind, for everyone you meet is fighting a great battle.]]
And also [[Jack Kornfield's take|Life is so hard, how can we be anything but kind?]]
<<comparequote "Peter De Vries" "We are not primarily put on this earth to see through one another, but to see one another through." "compassion>>
When does one ever know a human being? Perhaps only after one has realized the impossibility of knowledge and renounced the desire for it and finally ceased to feel even the need of it. But then what one achieves is no longer knowledge, it is simply a kind of co-existence; and this too is one of the guises of love.
: —Iris Murdoch "Under the Net”
:: -- From [[David Whyte]]'s “Crossing the unknown sea : work as a pilgrimage of identity.”
From the book "The Happiness Pursuit" by Shimon Edelman:
Quite satisfyingly, it emerges that the framers of the Declaration of Independence presaged the findings of the scientific inquiry into happiness: the dynamics of the self and of happiness is such that the pursuit itself - the journey rather than the destination - is what really matters (hence the title of the book).
...
The seeker after happiness returns home , only to grow restless and eventually succumb to the lure of a new journey.
[[Another water-inspired metaphor/version|To drink is a small matter. To be thirsty is everything.]]
When I was young, I admired clever people. Now that I’m old, I admire //kind// people.
which is different from:
When I was young, I admired clever people. Now that I’m old, I admire //wise// people.
[kindness] [wisdom]
(compare to [[From my experience: if you are not a capitalist/egoist when you are younger, then you don't have a brain; if you are not a socialist when you are older, then you don't have a heart.]] )
When ideas fail, words come in very handy.
(compare to [[Samuel Johnson]]'s: You raise your voice when you should reinforce your argument.).
And [[Carl Sandburg]] said:
> If the facts are against you, argue the law. If the law is against you, argue the facts. If the law and the facts are against you, pound the table and yell like hell.
And as [[John Andrew Holmes]] had said:
[[Speech is conveniently located midway between thought and action, where it often substitutes for both.]]
[arguing] [argumentation] [opinion] [convincing] [conviction] [justice]
When interviewing [someone], keep yourself from breaking useful silences by scribbling in your notebook "SU" - for Shut Up.
When one door of happiness closes, another opens; but often we look so long at the closed door that we do not see the one which has been opened for us.
(Compare to what [[Victor Hugo]] said about [[opening doors|He who opens a school door, closes a prison.]]).
"""
"""
On the other hand, sometimes (especially with certain upbringing :-| it feels like [[Jose Saramago]] describes it:
> There are such moments in life, when, in order for heaven to open, it is necessary for a door to close.
When one is considering the universe, it is important, sensible even, to try and find some balance between laughter and uncontrollable weeping.
[awesomeness] [wonder]
If you pour a handful of salt into a cup of water, the water becomes undrinkable. But if you pour the salt into a river, people can continue to draw the water to cook, wash, and drink.
The river is immense, and it has the capacity to receive, embrace, and transform.
When our hearts are small, our understanding and compassion are limited, and we suffer. We can’t accept or tolerate others and their shortcomings, and we demand that they change.
''But when our hearts expand, these same things don’t make us suffer anymore. We have a lot of understanding and compassion and can embrace others. We accept others as they are, and then they have a chance to transform.''
[ext[The Relativity of Wrong|resources/The Relativity of Wrong.pdf]]
by [[Isaac Asimov]]
I RECEIVED a letter the other day. It was handwritten in crabbed penmanship so that it was very difficult to read. Nevertheless, I tried to make it out just in case it might prove to be important. In the first sentence, the writer told me he was majoring in English literature, but felt he needed to teach me science. (I sighed a bit, for I knew very few English Lit majors who are equipped to teach me science, but I am very aware of the vast state of my ignorance and I am prepared to learn as much as I can from anyone, so I read on.)
It seemed that in one of my innumerable essays, I had expressed a certain gladness at living in a century in which we finally got the basis of the universe straight.
I didn't go into detail in the matter, but what I meant was that we now know the basic rules governing the universe, together with the gravitational interrelationships of its gross components, as shown in the theory of relativity worked out between 1905 and 1916. We also know the basic rules governing the subatomic particles and their interrelationships, since these are very neatly described by the quantum theory worked out between 1900 and 1930. What's more, we have found that the galaxies and clusters of galaxies are the basic units of the physical universe, as discovered between 1920 and 1930.
These are all twentieth-century discoveries, you see.
The young specialist in English Lit, having quoted me, went on to lecture me severely on the fact that in every century people have thought they understood the universe at last, and in every century they were proved to be wrong. It follows that the one thing we can say about our modern "knowledge" is that it is wrong. The young man then quoted with approval what Socrates had said on learning that the Delphic oracle had proclaimed him the wisest man in Greece. "If I am the wisest man," said Socrates, "it is because I alone know that I know nothing." the implication was that I was very foolish because I was under the impression I knew a great deal.
My answer to him was, "John, ''when people thought the earth was flat, they were wrong. When people thought the earth was spherical, they were wrong [it's elliptical, or actually an "oblate (flattened at the poles) spheroid"]. But if you think that thinking the earth is spherical is just as wrong as thinking the earth is flat, then your view is wronger than both of them put together.'' "
The basic trouble, you see, is that people think that "right" and "wrong" are absolute; that everything that isn't perfectly and completely right is totally and equally wrong.
However, I don't think that's so. It seems to me that right and wrong are fuzzy concepts, and I will devote [ext[this essay|resources/The Relativity of Wrong.pdf]] to an explanation of why I think so.
When someone loves you, it means that they want to help you become the best version of yourself.
: -- [[Peter Wang]] quoting [[Alain de Botton]] in an interview with [[Lex Fridman|https://lexfridman.com/]] titled [["Peter Wang: Python and the Source Code of Humans, Computers, and Reality"|https://www.youtube.com/watch?v=X0-SXS6zdEQ]].
[relationship] [marriage]
When the experience of constant correction in scientific research is generalized, it leads into the curious “better and better,” “truer and truer,” that is, into the boundlessness of progress with its inherent admission that the good and the true are unattainable. If they were ever attained, the thirst for knowledge would be quenched and the search for cognition would come to an end.
When the heart is full, the eyes overflow.
When the past is always with you, it may as well be present; and if it is present, it will be future as well.
: ― in //Neuromancer//
When things "all hang together," you have either gotten the joke, solved the puzzle, argued in a circle, focused your chain of logic so narrowly that you will be blindsided—or discovered a hidden pattern in nature.
When thinking changes your mind, that's philosophy. When facts change your mind, that's science.
"""
"""
Compare to what is usually attributed to the protean ["shapeshifter", from the Greek mythological character [[Proteus|https://en.wikipedia.org/wiki/Proteus]] ] economist [[John Maynard Keynes|https://en.wikipedia.org/wiki/John_Maynard_Keynes]], who presumably had said:
> When my information changes, I alter my conclusions. What do you do, sir?
From an article titled [["The 10 most important things I’ve learned about trust over my 100 years"|https://www-washingtonpost-com.pacl.idm.oclc.org/opinions/2020/12/11/10-most-important-things-ive-learned-about-trust-over-my-100-years/]] in the Washington Post, on his birthday:
Dec. 13 marks my turning 100 years young. I’ve learned much over that time, but looking back, I’m struck that there is one lesson I learned early and then relearned over and over: Trust is the coin of the realm. When trust was in the room, whatever room that was — the family room, the schoolroom, the locker room, the office room, the government room or the military room — good things happened. When trust was not in the room, good things did not happen. Everything else is details.
When we are no longer able to change a situation - we are challenged to change ourselves.
From a conversation between Archmage Sparrowhawk and young prince Arren in [[her|Ursula K. Le Guin]] book //The Farthest Shore// (part 3 of the Earthsea Series):
''Sparrowhawk'': Bad things happen “By an unmeasured desire for life.”
''Arren'': “For life? But it isn’t wrong to want to live?”
''Sparrowhawk'': “No. But when we crave power over life—endless wealth, unassailable safety, immortality—then desire becomes greed. And if knowledge allies itself to that greed, then comes evil. Then the balance of the world is swayed, and ruin weighs heavy in the scale.
[and then, sometime later]
''Sparrowhawk'': Only one thing in the world can resist an evil-hearted man. And that is another man. In our shame is our glory. Only our spirit, which is capable of evil, is capable of overcoming it.
When we look at the world, we do not see the world as it is, we see the world as we are. The only thing we ever experience is ourselves. (This is called projection).
When we pray we see that exactly because we have made our best effort and spent ourselves in doing so, we have become sacred. He or she is sacred who come wandering in weariness in these waters, to swim, float, or sink.
From the book "Sailing home : using the wisdom of Homer's Odyssey to navigate life's perils and pitfalls" by Norman Fischer.
Compare to what [[Soren Kierkegaard had to say about prayer|The function of prayer is not to influence God, but rather to change the nature of the one who prays.]], which I believe is similar in spirit.
<<comparequote "Mason Cooley" "A sense of blessedness comes from a change of heart, not from more blessings." "gratitude">>
When we read or study seriously, not to compete for status or to distract ourselves, we encounter the object of our attention in all of its messy, unpredictable reality. Such reading and thinking involves discipline to undertake, and a willingness to surrender to whatever one may find. We may not know in advance how entering a fictional world or considering a philosophical theorem might change us. Learning requires abandonment, the fear of which has to be overcome at the outset.
: -- from [[her|Zena Hitz]] essay [["In defence of bookworms"|https://zenahitz.files.wordpress.com/2020/07/20.07.11.pdf]]
[[Ursula K. Le Guin]] had similar [[observations/feelings about trusting an author|On deep reading and looking for Redeeming Value]]
When we sit in the cross-legged posture, we resume our fundamental activity of creation. There are perhaps three kinds of creation. The first is to be aware of ourselves after we finish zazen. When we sit we are nothing, we do not even realize what we are; we just sit.
But when we stand up, we are there! That is the first step in creation. When you are there, everything else is there; everything is created all at once. When we emerge from nothing, when everything emerges from nothing, we see it all as a fresh new creation. This is non-attachment.
The second kind of creation is when you act, or produce or prepare something like food or tea.
The third kind is to create something within yourself, such as education, or culture, or art, or some system for our society. So there are three kinds of creation. But if you forget the first, the most important one, the other two will be like children who have lost their parents; their creation will mean nothing.
When we talk about decision-making, we usually focus just on the immediate payoff of a single decision—and if you treat every decision as if it were your last, then indeed only exploitation^^1^^ makes sense. But over a lifetime, you’re going to make a lot of decisions. And it’s actually rational to emphasize exploration—the new rather than the best, the exciting rather than the safe, the random rather than the considered—for many of those choices, particularly earlier in life.
:― from [[his|Brian Christian]] book //Algorithms to Live By: The Computer Science of Human Decisions//
----
^^1^^ about what exploitation is (Explore/Exploit - The Latest vs. the Greatest):
> It’s fairly intuitive that never exploring is no way to live. But it’s also worth mentioning that never exploiting can be every bit as bad. In the computer science definition, exploitation actually comes to characterize many of what we consider to be life’s best moments. A family gathering together on the holidays is exploitation. So is a bookworm settling into a reading chair with a hot cup of coffee and a beloved favorite, or a band playing their greatest hits to a crowd of adoring fans, or a couple that has stood the test of time dancing to “their song.”
In spiritual practice it's good to be disturbed. We want to be disturbed as long as we can be disturbed.
''When you are not disturbed, it's only because you are not disturbed, not because nothing is disturbing.''
''It is true that nothing is intrinsically disturbing, but as long as you can be disturbed [i.e., things get to you], you can't know that [i.e., that nothing is intrinsically disturbing].''
So if we want to wake up, if we want to see how we create disturbances and suffering within ourselves, we will want to continue to be disturbed and to pay very close attention to being disturbed for as long as we are disturbed.
:-- from her book //That Which You Are Seeking Is Causing You To Seek//
"""
"""
(see also [[It's good not to be lulled into a false sense of security and stability. We like things to be consistent and predictable, so that our sleep won't be disturbed.]])
(see also [[If you are not radically amazed, you are not paying attention.]])
[concerned] [bothered] [worried]
When you enter this church it may possibly be able to "hear the call of God".
However, it is unlikely that He will call you on your mobile device.
So thank you for turning off your phone.
If you want to talk to God, you may enter, choose a quiet place and talk to Him.
And if you want to see Him, send Him a text while driving.
: -- seen in a church in France
(compare to [[Charles Fernyhough]]'s [[observation about talking to God|If you talk to God, it's called prayer; if God has the courtesy to reply, it's called schizophrenia.]]).
When you grow old, the coat of winter (wintercoat?) feels heavy.
My mother used to say it in Romanian, when she was in her late 70's.
Compare to [[I have seen the eternal Footman hold my coat]]
Also compare to [[The last shirt has no pockets.]]
When you have mastered numbers, you will in fact no longer be reading numbers, any more than you read words when reading books. You will be reading meanings.
When you have trouble making up your mind about something, tell yourself you’ll settle it by flipping a coin. But don’t go by how the coin flips; go by your emotional reaction to the coin flip. Are you happy or sad it came up heads or tails? That is your deepest self telling you what it wants.
: -- from his [[commencement speech at Rice University (2011)|https://www.graduationwisdom.com/speeches/0088-brooks.htm]]
When you know a man's religious complexion, you know what sort of religious books he reads when he wants some more light, and what sort of books he avoids, lest by accident he get more light than he wants.
- from the [[Information Philosopher's Encyclopedia|http://www.informationphilosopher.com/solutions/philosophers/twain/#IV]]
- compared to [[reading newspapers|If you don’t read the newspaper, you’re uninformed. If you read the newspaper, you're misinformed.]]
When you light a candle, you also cast a shadow.
[and [[Haggai Mark]]'s addition: True, but if you don't light one, //everything// is in the dark.]
The full context (from her book [[A Wizard of Earthsea|https://en.wikipedia.org/wiki/A_Wizard_of_Earthsea]]):
:{{imgquote}} You must not change one thing, one pebble, one grain of sand, until you know what good and evil will follow on that act. The world is in balance, in Equilibrium. A wizard's power of Changing and Summoning can shake the balance of the world. It is dangerous, that power. It is most perilous. It must follow knowledge, and serve need. To light a candle is to cast a shadow.
When you live life connected to purpose, you don't have to chase opportunities, they come to you.
(this may be a version of "self-fulfilling wishes"! :)
[serendipity] [luck]
When you love your work very much, and you have a bad day, the only way to get out of trouble is to go deeper in.
:― from his book //The Courage to Teach: Exploring the Inner Landscape of a Teacher's Life//
When you're young - when I was young - you want your emotions to be like the ones you read about in books. You want them to overturn your life, create and define a new reality. Later, I think, you want them to do something milder, something more practical: you want them to support your life as it is and has become. You want them to tell you that things are OK. And is there anything wrong with that?
: ― in //The Sense of an Ending//
Whenever the essential nature of things is analysed by the intellect, it must seem absurd or paradoxical. This has always been recognized by the mystics, but has become a problem in science only very recently.
:-- from his book "The Tao of Physics: An Exploration of the Parallels Between Modern Physics and Eastern Mysticism"
Whenever you find yourself on the side of the majority, it is time to reform (or pause and reflect).
Where death is I am not; where I am death is not, so we never meet.
(but as Woody Allen had said: [[You will meet a tall dark stranger.]])
Where people stand is perhaps not as important as which way they face.
: ― from [[his|Terry Pratchett]] Collected Non-Fiction "A Slip of the Keyboard"
[opinion] [stance] [point of view]
(compare to [[Alan Kay]]'s opinion (ha!) that [[A good point of view is worth many IQ points.]])
The following dialog from [[the transcript of the film "The Crown"|https://www.imdb.com/title/tt5170842/characters/nm0040586]] is funnily illuminating.
Queen Mary is old and sick (but as sharp as a knife; she says: don't ask me how I am. It's all anyone ever does. Forget death by lung disease, it's death by bad conversation. :), and being taken care of by a nurse:
Nurse : The Queen is here, Your Majesty.
Queen Mary : Could you be more specific?
Nurse : Ma'am?
Queen Mary : Which queen?
Nurse : Queen Elizabeth, ma'am.
Queen Mary : Which one? There are two.
Nurse : The young one.
Queen Mary : Oh, *the* Queen.
Nurse : I thought you was all queens. They gave me a sheet.
Queen Mary : We are. I was the queen so long as my husband the king was alive, but since he died, I am no longer *the* queen, I am simply "Queen Mary." My late son's widow was also the queen, but upon the death of her husband, she became "Queen Elizabeth, the Queen Mother." Her daughter, "Queen Elizabeth," is now queen, so she is *The* Queen.
Nurse : Bravo. Nurses and nuns have the same problem. We're all called "Sister."
Queen Mary : So you are.
Nurse : Well, she's outside. The Queen.
Queen Mary : Then let her in - sister.
From Alice in Wonderland, [[the scene with the Cheshire cat]]:
"""
“'Cheshire Puss,' [Alice] began, rather timidly, as she did not at all know whether it would like the name: however, it only grinned a little wider. 'Come, it’s pleased so far,' thought Alice, and she went on. 'Would you tell me, please, which way I ought to go from here?'
'That depends a good deal on where you want to get to,' said the Cat.
'I don’t much care where–' said Alice.
'Then it doesn’t matter which way you go,' said the Cat.^^1^^
'–so long as I get SOMEWHERE,' Alice added as an explanation.
'Oh, you’re sure to do that,' said the Cat, 'if you only walk long enough.'” ^^2^^
“But I don’t want to go among mad people,' Alice remarked.
'Oh, you can’t help that,' said the Cat: 'we’re all mad here. I’m mad. You’re mad.'
'How do you know I’m mad?' said Alice.
'You must be,' said the Cat, 'or you wouldn’t have come here.'
Alice didn’t think that proved it at all; however, she went on 'And how do you know that you’re mad?'
'To begin with,' said the Cat, 'a dog’s not mad. You grant that?'
'I suppose so,' said Alice.
'Well, then,' the Cat went on, 'you see, a dog growls when it’s angry, and wags its tail when it’s pleased. Now I growl when I’m pleased, and wag my tail when I’m angry. Therefore I’m mad.'”
"""
----
^^1^^ or as [[Seneca]] observed:
> If a man knows not which port he sails, no wind is favorable.
^^2^^ [[Terry Pratchett]] had [[a different take on this|The road, one felt, had to go somewhere. This geographical fiction has been the death of many people. Roads don’t necessarily have to go anywhere, they just have to have somewhere to start.]].
While you can learn much by listening carefully to what people say, a great deal more is revealed by what they do not say. Listen as carefully to silence as to sound.
See also what [[he|Dee Hock]] said about [[listening to critics|Active critics are a great asset. Without the slightest expenditure of time or effort, we have our weakness and error made apparent and alternatives proposed. We need only listen carefully, dismiss that which arises from ignorance, ignore that which arises from envy or malice, and embrace that which has merit.]].
The special genius of Zen practice is its technique of working with phrases [and koans]. This practice consists of living with, being with, and sitting with phrases, until they become very large and very strange, and reveal themselves to us. That is to say, through them we are revealed to ourselves.
For example:
"""
Guishan asked Daowu, “Where are you coming from?”
Daowu said, “I’ve come from tending the sick.”
Shan said “How many people were sick?”
Wu said, “There were the sick and the not sick.”
“Isn’t the one not sick you?” Guishan said.
Daowu said, “Being sick and not being sick have nothing to do with the True Person. Speak quickly! Speak quickly!”
Guishan said. “Even if I could say anything, it wouldn’t relate.”
Later Tiantong commented on this, saying, “Say something anyway!”
"""
It seems as though Daowu had the practice of visiting the sick, one of the greatest of all spiritual practices. I recommend this. It is a practice I do and have done, but regretfully I don’t do it nearly as much as I would like to. I seem to have many others things to do, but actually I would like to do nothing else but visit the sick, like Walt Whitman did during the Civil War.
It is also possible that Daowu was not visiting the sick. “Where are you coming from?” is a Zen question meant to evoke a more profound response than the mundane facts. When Daowu said he had come from tending the sick, he could have meant anything or everything by it. This is an answer we could give on any occasion: ''What are you doing? I am tending the sick. What else are we ever doing? This is the first noble truth of Buddhism: sentient beings are by their nature sick. To be alive is to have a terminal illness. The whole world is a hospital ward.''
But then Daowu says, “There are the sick and the not sick.”
Who are the sick? The ones who have forgotten the stories of suffering and pain, who think that they themselves are not sick. These are the sick ones; these are the ones who suffer a lot.
Who are the ones not sick? These are the ones who know the stories, who know that they are sick, that we all are sick, and who have sympathy. They know the world is a hospital ward and we are doing nothing but tending the sick, ourselves included. Knowing this from inside, in the guts, the breath, the thoughts, perceptions, and deeds, we are not sick.
In the end, though, as Daowu tells us, the True Person is beyond sick and not sick. The True Person simply “is,” and in this “is” is living and dying both, sickness and health both. So there’s no point, really, in speaking of life or death, or sickness or health.
In the face of this, Daowu asks Guishan to speak, and he does. Guishan was a great Zen master and he understood Daowu perfectly. Saying something won’t explain anything, he says in so many words. Which is surely true. It’s like asking someone, “Please explain your life to me, I would like to understand it.” It’s not possible to explain even a moment of life. But, as Tiantong chimes in, “That may be true, but still you have to say something.” That’s true too. ''Not saying anything is not an option. We have to tell our story of pain and the impulse, coming out of that pain, to do good.''
I know that some stories seem not to be like this. They seem to involve pain, and the reflex of fear and anger, that causes someone to do much harm. This is very common. Sad though it may be, this is the world. But when you hear the stories through, and see their multi-generational vectors, you see that when we suffer pain we always find—however long it takes—the impulse to do good, and we finally act on that impulse. This is the point of practice—to confront the first truth, the truth of suffering, and to find our way to the fourth truth, the truth of the path, of doing good with a heart of love to benefit others.
[...]
This is the most common thing in the world: to repeat old stories that we already know perfectly well. We do it in religion, in national cultures, and in families too; we tell the old stories over and over again. That way we have them in our minds and they will appear spontaneously and unbidden, as our own experience, in response to things that happen to us. Something will happen that allows us to see personally “the one who’s not busy,” or to know that everything before us is nothing other than love. We hear the stories over and over again, and over time we understand them better, and differently, and eventually we become them. We know them from the inside, because they happened to us. This is true of all the old stories and phrases of all spiritual traditions—and of families, cultures, and clans too. Where we would we be without a story?
: -- from [[Norman Fischer]]'s [["Phrases and Spaces"|https://www.lionsroar.com/phrases-and-spaces/]]
[tenderness] [telling stories]
''Who Does She Think She Is...''
"""
I asked the Zebra:
Are you black with white stripes?
Or white with black stripes?
And the zebra asked me:
Are you good with bad habits?
Or are you bad with good habits?
Are you noisy with quiet times?
Or are you quiet with noisy times?
Are you happy with some sad days?
Or are you sad with some happy days?
Are you neat with some sloppy ways?
Or are you sloppy with some neat ways?
And on and on and on and on
And on and on he went.
I’ll never ask a zebra
About stripes
Again
"""
[diversity] [identity] [true nature of things]
Who in the rainbow can draw the line where the violet tint ends and the orange tint begins? Distinctly we see the difference of the colors, but where exactly does the one first blendingly enter into the other? So with sanity and insanity.
: -- from his book //Billy Budd, Sailor//
On the question Why are we here?
Why collect quotes/anecdotes?
When I came across (ha!) what [[Oliver Sacks]] had to say about why he is [[writing notes|https://www.brainpickings.org/2017/03/07/oliver-sacks-notebooks/]],
I was delighted by the recognizable [["logic"|Language always has this double use: not just for communication, but also for organizing your thoughts.]].
He is writing things down and/but doesn't necessarily feel the need to read them. I collect and not very often go back to read these (see [[Sarah Manguso]] about (the impossibility of) living and [["writing everything down"|The trouble was that I failed to record so much. I’d write about a few moments, but the surrounding time — there was so much of it! So much apparent nothing I ignored, that I treated as empty time between the memorable moments.]]).
But then I was intrigued. Why am I collecting these pieces?
And I realized that I sometimes think back about/to one or more of these (gems?), and I also once in a while, or as the occasion arises, go back and look for an "appropriate one" to reflect on or to share on a "relevant occasion".
And it seems to me that just the idea of collecting these "sparkles" creates (at least in my imagination) all sorts of constellations in the "sky of my life/experience". And as is sometimes the case, adding a new "sparkle" often creates new connections and possibly new constellations. (didn't the ancients do the same: see/imagine the Zodiac signs and a bunch of other collections?)
But sometimes, finding a quote and "placing it in a certain context" feels more like placing a new "stepping stone" among other, already existing ones, done either to begin or establish a new route (or strengthen an existing one) through "the lake of my life/experience" or maybe create a new vintage point from which to stand and view the scenery (and as [[Alan Kay]] observed: [[a good point of view is worth many (emotional and/or intellectual) IQ points)|A good point of view is worth many IQ points.]].
Why do we need time travel, when we already travel through space so far and fast? For history. For mystery. For nostalgia. For hope. To examine our potential and explore our memories. To counter regret for the life we lived, the only life, one dimension, beginning to end.
[science-fiction] [imagination]
From an article titled "[[ Why Is 137 the Most Magical Number?|https://science.howstuffworks.com/dictionary/physics-terms/why-is-137-most-magical-number.htm]]":
What's the key to unlocking the mysteries of the universe? If you're expecting an incantation in some ancient language, uttered by a holy man sitting cross-legged on a mountaintop, this answer may disappoint you.
It might just be the number 137.
[[Arthur Eddington]] sought a new mysticism which would emerge from the natural sciences. Perhaps, he thought, the clue lay in numbers, particularly the number 137.
The fine-structure constant [1/137] characterizes the strength with which matter couples to light, e.g. the probability that an excited atom will decay in a certain time.
The fine-structure constant determines the distance between an atom's spectral lines, which are the atom's DNA. And so it is one of those numbers that is at the root of the universe. If it were any other value then the structure of matter would be very different, and so would we/humans be, too.
Austrian-born quantum physics pioneer Wolfgang Pauli became fascinated with the number as well, since it figured in the mysterious intersection of relativity and quantum theory that he explored with the help of his friend, psychoanalyst [[Carl Gustav Jung]]. The scientific fixation on the fine-structure constant was such that in 1936, Nature published an article titled "The Mysterious Number 137."
But as Pauli learned in the 1950s from a religious scholar, 137 had another significance. It was the number associated with the Kabbalah, an esoteric form of Jewish mysticism – an extraordinary link between mysticism and physics.
As the article "[[The Magic of 137|http://kabbalahstudent.com/the-magic-of-137/]]" by Billy Phillips details, the number 137 also appears frequently in the Torah. It's the lifespan in years of figures such as Ishmael and Levi, for example, as well the age of Abraham when he bound his son Isaac to an altar in preparation to sacrifice him. And as Phillips explains, if the number of letters in the Torah — 304,805 — is split into the numerical pairs and reversed, the result is the numbers 50, 84 and 03. Add those together, and you get 137.
Beyond that, the relationship of the fine-structure constant to light in physics parallels the Kabbalists' concept of connecting with light, or becoming enlightened by shedding the ego.
And to all of this I say: here you have it :)
But [[wait! There is more...|Correctly interpreted, pi conveys the entire history of the human race.]] :)
Why is it that when you transport something by car, it's called a shipment, but when you transport it by ship, it's called cargo?
Why is there so much month left at the end of the money?
Why should I believe in other people's revelations? I have enough trouble believing my own.
-- from Smullyan's book [[5000 B.C. and Other Philosophical Fantasies|https://philoonbooks.wordpress.com/2017/03/28/5000-b-c-and-other-philosophical-fantasies-by-raymond-smullyan/]]
Why should I worry about dying? It's not going to happen in my lifetime!
in his book //This Book Needs No Title// (1986)
Why shouldn’t truth be stranger than fiction? Fiction, after all, has to make sense.
or
The difference between reality and fiction? Fiction has to make sense.
Alfred Hitchcock said, relatedly:
> in a fiction movie the director is god. In a documentary movie god is the director.
And mathematically speaking, [[G. H. Hardy]] once commented in the same spirit:
> They [formulae 1.10 - 1.12 of Ramanujan] must be true because, if they were not true, no one would have had the imagination to invent them.
[imagination] [incredulity] [story telling]
My [[father|Alfred Mark]] used to say something they used to say in Czernowitz when he was growing up (in Austro-Hungarian (Eastern Europe) German):
wie gut ist es nichts zu tun und dann ein bisschen auszuruhen
(how good is it to do nothing, and then rest a bit from doing it)
(see also other [[German quotes|https://www.studienscheiss.de/zitate-ausruhen-faulenzen-pause/]]).
Or differently:
It is awfully hard work doing nothing. However, I don't mind hard work where there is no definite object of any kind. -Algernon
: -- [[Oscar Wilde]] in //"The Importance of Being Earnest"//
And also
To do nothing at all is the most difficult thing in the world, the most difficult and the most intellectual.
: -- The Writings of [[Oscar Wilde]] (ed. 1907)
[[Wilferd Arlan Peterson|https://en.wikipedia.org/wiki/Wilferd_Arlan_Peterson]]
<<list-links "[tag{!!title}]">>
From his article in Wired Magazine [[Will AI Achieve Consciousness? Wrong Question|https://www.wired.com/story/will-ai-achieve-consciousness-wrong-question/]] (and also [[on GD|https://docs.google.com/document/d/149X4si8slSi2S97VW8kNul49fAl5kXoqTmdA8S5uJMA/edit?usp=sharing]]):
''We should not be creating conscious, humanoid agents but an entirely new sort of entity, rather like oracles, with no conscience, no fear of death, no distracting loves and hates.''
[...]
''we’re making tools, not colleagues, and the great danger is not appreciating the difference, which we should strive to accentuate, marking and defending it with political and legal innovations.''
[...]
AI systems are very powerful tools—so powerful that even experts will have good reason not to trust their own judgment over the “judgments” delivered by their tools. But then, if these tool users are going to benefit, financially or otherwise, from driving these tools through terra incognita, they need to make sure they know how to do this responsibly, with maximum control and justification.
Licensing and bonding the operators of these systems, just as we license pharmacists, crane operators, and other specialists whose errors and misjudgments can have dire consequences, could, with pressure from insurance companies and other underwriters, oblige creators of AI systems to go to extraordinary lengths to search for and reveal weaknesses and gaps in their products, and to train those entitled to operate them to watch out for them.
[...]
''We don’t need artificial conscious agents. There is a surfeit [the desire for more of something as a result of having consumed or done it to excess] of natural conscious agents, enough to handle whatever tasks should be reserved for such special and privileged entities. We need intelligent tools.'' Tools do not have rights and should not have feelings that could be hurt or be able to respond with resentment to “abuses” rained on them by inept users.
[...]
what we are creating are not—should not be—conscious, humanoid agents but an entirely new sort of entity, rather like oracles, with no conscience, no fear of death, no distracting loves and hates, no personality (but all sorts of foibles and quirks that would no doubt be identified as the “personality” of the system): boxes of truths (if we’re lucky) almost certainly contaminated with a scattering of falsehoods.
It will be hard enough learning to live with them without distracting ourselves with fantasies about the Singularity in which these AIs will enslave us, literally. The human use of human beings will soon be changed—once again—forever, but we can take the tiller and steer between some of the hazards if we take responsibility for our trajectory.
: -- From John Brockman's book “Possible Minds - 25 Ways of Looking at AI”.
[Artificial Intelligence]
William Penn Adair Rogers (better known as "Will" Rogers) (November 4, 1879 – August 15, 1935) was an American cowboy, comedian, humorist, social commentator, vaudeville performer and actor and one of the best-known celebrities in the 1920s and 1930s.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
https://plato.stanford.edu/entries/quine/
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
From [[his|William Butler Yeats]] poem //“Under Ben Bulben”// (a [[rock formation|https://en.wikipedia.org/wiki/Benbulbin]] in County Sligo, Ireland):
"""
Under bare Ben Bulben's head
In Drumcliff churchyard Yeats is laid,
An ancestor was rector there
Long years ago; a church stands near,
By the road an ancient Cross.
No marble, no conventional phrase,
On limestone quarried near the spot
By his command these words are cut:
Cast a cold eye
On life, on death.
Horseman, pass by!
"""
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Science Fiction (sci-fi)
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Theoretical Neurobiologist; Affiliate Professor Emeritus, University of Washington; Author, Global Fever
<<list-links "[tag{!!title}]">>
William James (1842-1910) was a leading philosopher and psychologist.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
[[The Bard of Avon|https://biography.yourdictionary.com/articles/why-is-shakespeare-called-the-bard.html]]
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
an American playwright, raconteur, and entrepreneur.
<<list-links "[tag{!!title}]">>
[img[wine barrel planks|resources/wined-up.jpg]]
from a store in [[Sonoma County, CA|http://www.wineroad.com/]]
(on the other hand, as [[Samuel Johnson]] had written: This is one of the disadvantages of wine, it makes a man mistake words for thoughts.).
Sir Winston Leonard Spencer Churchill, (30 November 1874 – 24 January 1965) was a British politician and statesman known for his leadership of the United Kingdom during the Second World War (WWII).
[[Winston Churchill|http://en.wikipedia.org/wiki/Winston_Churchill]]
A friend described him as a man who jaywalked through life.
He was definitely "a package", and as Oliver Goldsmith had observed:
> There are some faults so nearly allied to excellence that we can scarce weed out the vice without eradicating the virtue.
<<list-links "[tag{!!title}]">>
''Winter Syntax''
"""
A sentence starts out like a lone traveler
heading into a blizzard at midnight,
tilting into the wind, one arm shielding his face,
the tails of his thin coat flapping behind him.
There are easier ways of making sense,
the connoisseurship of gesture, for example.
You hold a girl's face in your hands like a vase.
You lift a gun from the glove compartment
and toss it out the window into the desert heat.
These cool moments are blazing with silence.
The full moon makes sense. When a cloud crosses it
it becomes as eloquent as a bicycle leaning
outside a drugstore or a dog who sleeps all afternoon
in a corner of the couch.
Bare branches in winter are a form of writing.
The unclothed body is autobiography.
Every lake is a vowel, every island a noun.
But the traveler persists in his misery,
struggling all night through the deepening snow,
leaving a faint alphabet of bootprints
on the white hills and the white floors of valleys,
a message for field mice and passing crows.
At dawn he will spot the vine of smoke
rising from your chimney, and when he stands
before you shivering, draped in sparkling frost,
a smile will appear in the beard of icicles,
and the man will express a complete thought.
"""
[vivid imagery] [writing process]
<<list-links "[tag{!!title}]">>
Wisdom acquisition is a moral duty. It's not something you do just to advance in life... you are hooked for lifetime learning.
Wisdom inclines towards the good, but is not attached to it. It shies away from what is not good, but has no aversion to it. Wisdom recognizes the difference between skillful and unskillful, and it clearly sees the undesirability of the unskillful.
Wisdom is hereditary - You get it from your children.
Compare it to: [[The value of marriage is not that adults produce children but that children produce adults.]]
See [[My Heart Leaps Up - poem by William Wordsworth]].
Or compare it to: [[The secret to a long life is simple: choose the right parents.|The secret to a long life is simple: choose the right parents.]]
And also compare to: [[I would gladly go back and travel the road not taken, if I knew at the end of it, I'd find the same set of grandkids (or children, for that matter).]]
Wisdom is knowing what path to take next. ... Integrity is taking it.
Wisdom remembers. Happiness forgets.
<<comparequote "Brian Tracy" "Always give without remembering and always receive without forgetting." "remembering and forgetting">>
Polish poet, winner of the Nobel Prize for literature (1996)
- [[her Nobel Lecture|http://www.nobelprize.org/nobel_prizes/literature/laureates/1996/szymborska-lecture.html]].
<<list-links "[tag{!!title}]">>
Ich geh doch immer auf Dich zu, mit meinem ganzen Gehen. Denn wer bin ich und wer bist du, wenn wir uns nicht verstehn?
With every step I do, I go towards you. Because who am I and who are you if we don’t understand one another?
: -- quoted by [[David Steindl-Rast]] in his conversation with [[Krista Tippett]] titled [["How to Be Grateful in Every Moment (But Not for Everything)"|https://onbeing.org/programs/david-steindl-rast-how-to-be-grateful-in-every-moment/#transcript]].
Without error-correction all information processing, and hence all knowledge-creation, is necessarily bounded. Error-correction is the beginning of infinity. [or at least infinite knowledge :) ^^1^^].
: — from [[his|David Deutsch]] book "//The Beginning of Infinity: Explanations That Transform the World"//
----
^^1^^ but since it seems that Deutsch thinks that "Any real process is physically possible to perform provided the knowledge to do so has been acquired.", knowledge translates to creation and therefore infinite knowledge translates to infinity.
Without It, man cannot live. But he who lives with It alone is not a man.
: -- in his book //"I and Thou"//^^1^^
[compassion] [relationship]
(see also [[Hillel the Elder]]'s [[saying|If I am not for me, who will be for me? And when I am for myself alone, what am I? And if not now, then when?]])
----
^^1^^ //"I and Thou"// argues that within this elementally networked reality there are two basic modes of existence: the I-It, and the I-Thou. These two stances make up our basic ‘twofold attitude’. In the I-It mode, an ‘Ego’ approaches another as an object separate from itself. This type of engagement is driven by a sort of instrumentalism; the object is engaged primarily as something to be known or used, and its nature is always mediated through the subject’s own self-regard. From the I-It stance, we don’t engage with things in their entirety. Instead, we engage with a web of distinct and isolated qualities notable for how they are useful to us. Buber regarded this kind of self-centred outlook – typified, in his view, by proto-existentialists such as Kierkegaard and Nietzsche – as a grave error.
By contrast, in the I-Thou relationship, rather than simply experiencing another, we encounter them. A subject encounters a fellow subject’s whole being, and that being is not filtered through our mediated consciousness, with its litter of preconceptions and projections. ‘No purpose intervenes,’ as Buber put it. The I-Thou stance has a purity and an intimacy, and is inherently reciprocal. In relation to others, he argued, we can step into an intersubjective space where two people coexist in (and co-contribute to) what he called the Between. In this Between lurks the vital, nourishing experience of human life, the real sacred stuff of existence. As he put it: ‘All real living is meeting.’
: -- : -- from [[his|M M Owen]] article [[I and Thou|https://aeon.co/essays/all-real-living-is-meeting-the-sacred-love-of-martin-buber]]
Without music life would be a mistake.
:: -- from a [[blog entry about artists on music|https://www.brainpickings.org/2016/03/15/writers-on-music/]] at BrainPickings.
Here we have the definition of suffering: to want life to be other than it is. Suffering has two factors: pain and resistance. In my own teaching, I now formulate it this way:
Suffering = Experiential Intensity x Reactivity.
Reactivity is our tendency to want our experience to be other than it is. Usually, that takes the form of resisting unpleasant intensities and grasping onto pleasant intensities, but actually, it can take any form. We can also crave pain and deny ourselves pleasure.
Whatever our preferences are, intensities come and go. We can never fully control these intensities, but we can learn to let go of our reactivity.
As the formula points out, when reactivity = 0, we don’t suffer.
''Without resistance or grasping, moments of pain, pleasure or neutral feeling are all just temporary expressions of our aliveness. When this becomes an embodied insight, it’s quite a revelation. It can really turn your life around.''
The essence of Buddhism is to transform our desire for something other than what our experience is right now into fundamental acceptance.
And here is where another major misunderstanding lurks. Whenever I speak of acceptance, there usually is an immediate objection. Does acceptance mean that we’re supposed to give up all of our desires for problem-solving and improvement?
Not necessarily—it all depends on the order in which we approach this. Do we seek to make things different and better as a prerequisite for finding satisfaction? That can become a never-ending and sometimes desperate pursuit—suffering on top of suffering.
Alternatively, we could learn to unconditionally enjoy our basic aliveness and then use this liberated and generally positive energy to work on the things that could use some improvement. This way, acceptance becomes the basis for engagement.
: -- from [[his|Christian Dillo]] post titled [["Why I Write"|https://thedewdrop.org/2022/09/23/why-i-write-christian-dillo/]]
<<list-links "[tag{!!title}]">>
Wonder is the heaviest element in the periodic table of the heart. Even a tiny piece of it can stop time.
[curiosity]
Wonder. Go on and wonder.
[advice]
<<list-links "[tag{!!title}]">>
Words (or bits), by themselves, aren't a good medium for honest signals because they aren't differentially expensive. False and/or low-quality sentences are just as easy to produce as true, high-quality sentences. To gauge honesty and/or quality, we have to look outside the words — to the economics of the process that produces them.
:-- from his essay titled [["Honesty and the Human Body"|https://meltingasphalt.com/honesty-and-the-human-body/]]
Words are events, they do things, change things. They transform both speaker and hearer; they feed energy back and forth and amplify it. They feed understanding or emotion back and forth and amplify it.
(compare to what [[Stanislaus Lec]] [[had to say about ideas|In a war of ideas it is people who get killed.]]).
"""
What does reading do?
You can learn almost everything from reading.
But I read too.
So you must know something.
Now I'm not so sure.
You'll have to read differently then.
How?
The same method doesn't work for everyone, each person has to invent his or her own, whichever suits them best,
some people spend their entire lives reading but never get beyond reading the words on the page,
they don't understand that the words are merely stepping stones placed across a fast-flowing river, and the reason they're there is so that we can reach the farther shore, it's the other side that matters, Unless,
Unless what?
Unless those rivers don't have just two shores but many, unless each reader is his or her own shore, and that shore is the only shore worth reaching.
"""
We are a wordy species. ''Words are the wings both intellect and imagination fly on.'' Music, dance, visual arts, crafts of all kinds, all are central to human development and well-being, and no art or skill is ever useless learning; but to train the mind to take off from immediate reality and return to it with new understanding and new strength, nothing quite equals poem and story.
Words must surely be counted among the most powerful drugs man ever invented.
(compare to what [[Stanislaus Lec]] [[had to say about ideas|In a war of ideas it is people who get killed.]]).
Words that seem inspired usually come about the way anything of value comes about: because somebody put in the time and did the work.
"""
Work is love made visible.
And if you cannot work with love but only with distaste, it is better that
you should leave your work and sit at the gate of the temple and take
alms of those who work with joy.
For if you bake bread with indifference, you bake a bitter bread that feeds but half man's hunger.
"""
:: -- from his poem [[On Work|On Work - poem by Kahlil Gibran]]
At times, many of us find ourselves hovering over precipitous heights, wondering if we should end it all—literally, or metaphorically,— by leaving our present work and its seeming entrapment. No matter, work in one form or another awaits us, whatever step we take, and probably, by its everlasting presence, even after death. Work, after all, at its best, is one of the great human gateways to the eternal and the timeless.
: - from: “Crossing the unknown sea: work as a pilgrimage of identity.”
''Working Together''
"""
We shape our self
to fit this world
and by the world
are shaped again.
The visible
and the invisible
working together
in common cause,
to produce
the miraculous.
I am thinking of the way
the intangible air
passed at speed
round a shaped wing
easily
holds our weight.
So may we, in this life
trust
to those elements
we have yet to see
or imagine,
and look for the true
shape of our own self,
by forming it well
to the great
intangibles about us.
"""
Worry does not empty tomorrow of its sorrow; it empties today of its strength.
Applies to any ideal, or worthwhile goal:
:{{imgquote}} The [Christian] ideal has not been tried and found wanting; it has been found difficult and left untried.
[courage]
<<list-links "[tag{!!title}]">>
Writers and readers seek a solution to the problem that time passes, that those who have gone are gone and those who will go, will go. For there was a moment where anything was possible. And there will be a moment when nothing is possible. But in between we can create.
- in his book //How to get filthy rich in rising Asia//
This may be a weaker form of the saying by Rabbi Tarfon: [[It is not for you to finish the task, but nor are you free to desist from it.]]
Compare also to [[Brian Christian's take|We all start off the same and we all end up the same, with a brief moment of difference in between. Fertilization to fertilizer. Ashes to ashes. And we spark across the gap.]]
<<list-links "[tag{!!title}]">>
What exactly is it that I enjoy about writing?
I think it’s the clarity that can come from writing—and the truthfulness.
I love clarity, but I’m also very suspicious of it. When I say something that really articulates what I mean, and in addition, it’s clear, it can feel like the truth. It can be so convincing that I forget for a moment that any object or situation or feeling is always more than what can be said about it. In this way, writing both reveals a truth and conceals a deeper truth. All forms of articulation do that, not just writing.
: -- from [[his|Christian Dillo]] post titled [["Why I Write"|https://thedewdrop.org/2022/09/23/why-i-write-christian-dillo/]]
(compare to what [[Walter J. Ong]] said [[about language|To live and to understand fully, we need not only proximity but also distance.]])
[levels of abstraction] [ladder of abstraction]
Writing every day is the only discipline that gets you closer to the 10,000-hour proficiency marker [the reasonably well-accepted theory that to become thoroughly proficient at something, a person needs to practice for about 10,000 hours. (popularized by Malcolm Gladwell in his book "Outliers")].
Reading doesn’t do it.
Reading about writing doesn’t do it.
Thinking about what you want to write doesn’t do it.
Thinking about how rich and famous you’ll be after your first glittering book tour really doesn’t do it.
Writing (and programming!) is nature's way of letting you know how sloppy your thinking is.
Writing is our form of DNA for culture, in some sense; it's this digital form that we invent for encoding knowledge. Then we start building machinery to do information processing, systems, everything from legal systems to communication systems and computers and things like that.
: -- from his [[interview at Edge.org on Emergences and AI|https://www.edge.org/conversation/w_daniel_hillis-emergences]]
[Artificial Intelligence]
Writing's goal is to create clarity with novel ideas and novelty with familiar ones.
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
Yesterday is history, tomorrow is a mystery, and today is a gift; that's why they call it the present.
But also: [[The farther backward you can look, the farther forward you are likely to see.]]
<<list-links "[tag{!!title}]">>
* I really didn't say everything I said. [...] Then again, I might have said 'em, but you never know.
* If you ask me a question I don't know, I'm not going to answer.
** I wish I had an answer to that, because I’m tired of answering that question.
* If you don't know where you're going, you might not get there.
* What Time Is It? You Mean Now? (see also [[Pooh Bear's take on it|My favourite day is today.]])
* It gets late early out there. (see also [[It's a fine night to have an evening.]])
* It's déjà vu all over again.
* Nobody goes there anymore. It's too crowded.
** compare to “Everybody hates me because I'm so universally liked.” ― [[Peter De Vries]]
* We made too many wrong mistakes.
* When you come to a fork in the road, take it.
* You can observe a lot by watching.
Misattributed to [[Yogi Berra]]:
* In theory there is no difference between theory and practice; in practice there is.
* Never answer an anonymous letter.
* [[The future ain't what it used to be.|The future is not what it used to be.]]
You - you alone will have the stars as no one else has them...In one of the stars I shall be living. In one of them I shall be laughing. And so it will be as if all the stars were laughing, when you look at the sky at night...You - only you - will have stars that can laugh.
:: -- from The Little Prince
This can be viewed as both a __unity__ of the environment and you the individual, and/or the __interplay__ between the environment and yourself.
It is not that your true Self is “everlasting” or “lives forever” - that is not how one triumphs over death. Rather, your true Self is a moment without time — this present timeless moment, just as it is, before you think about past and future and thus bind yourself to the tortures of time.
The pure and timeless Self, existing fully in this timeless, present moment, is the gateway to the eternal — which does not mean existing forever in time, but being blissfully free of time. Because it never enters the world of time and its terror, your pure Self is the great Unborn. And because it never enters time, it never exits either: your pure Self is the great Undying. You triumph over death, not by living forever, but by living timelessly, by being present to the Present.
''You are not going to defeat death by identifying with the ego in the steam of time and then trying to make that ego go on forever in that temporal stream. You defeat death by finding that part of your own present awareness that never enters the stream of time in the first place and thus is truly Unborn and Undying.''
As the Buddha himself put it, “There is, o monks, a great Unborn, Unmanifest, Unmade. Were there not, there would be no escape from the born, the manifest, the made.”
: -- from [[his|Ken Wilber]] [[article about Grace and Grit|https://www.earthandspiritcenter.org/wp-content/uploads/2019/10/Session-9-1-Grace-and-Grit.pdf]]
The original Jorge Luis Borges quote: “Uno no es lo que es por lo que escribe, sino por lo que ha leído.”
The new Google A.I.-rendered Translate program version: “You are not what you write, but what you have read.”
(vs. the old non-A.I. translation: “One is not what is for what he writes, but for what he has read.”)
(Compare to [[Samuel Johnson]]'s [[take on reading and writing|I never desire to converse with a man who has written more than he has read.]]).
You are perfect the way you are, and you can use a little improvement.
This combines neatly [[self-acceptance with personal growth|Face the facts of being who you are, for that is what changes who you are.]].
(Compare to [[Johann Wolfgang von Goethe]]'s take on [[balanced living|Do not hurry; do not rest.]]).
----
In his entry titled [["I Wasted 8 Years of Meditation Because I Didn’t Understand These 4 Things"|http://rationaldharma.com/blog/i-wasted-8-years-of-meditation-because-i-didnt-understand-these-4-things/]], [[RationalShinkai]] wrote:
Overcoming obstacles in meditation such as distractions, dullness, aversion, craving, agitation, impatience, and so on, requires the application of the right kinds of intentions [...]. To apply the right kinds of intentions as an antidote to the corresponding kind of problem, one must be responsive to what arises. Equanimity and responsivity are not opposites therefore; they are in fact highly complementary, and one can and should train both simultaneously.
which reminded me of [[this (see title above) saying|You are perfect the way you are, and you can use a little improvement.]] by [[Shunryu Suzuki]] (and even if he hadn't said it, I still think it's good :).
I think that both of them make the point that one is "perfect" how and where they are at this point in time (how could they be any other way? :) , BUT (or even more appropriately, as Suzuki says, AND !) one can keep training (skillfully :).
Similar to [[RationalShinkai]]'s observation that "Equanimity and responsivity are not opposites", being "perfect" (and feeling ok/equanimous about it) doesn't negate continuing to work/practice (and responding skillfully and wholesomely).
Or as [[Winston Churchill]] observed:
> [[To improve is to change; to be perfect is to change often.]]
You are where you are today because you stand on somebody’s shoulders. And wherever you are heading, you cannot get there by yourself. If you stand on the shoulders of others, you have a reciprocal responsibility to live your life so that others may stand on your shoulders. It’s the quid pro quo of life. We exist temporarily through what we take, but we live forever through what we give.
(see what Irvin Yalom had written [[about leaving an endless ripple|The idea that we can leave something of ourselves, even beyond our knowing, offers a potent answer to those who claim that meaninglessness inevitably flows from one's finiteness and transiency.]]).
[parenting] [legacy]
You can complain because roses have thorns, or you can rejoice because thorns have roses.
Ziggy, a character in a comic strip by Tom Wilson
The very nature of the voyage, like a circumnavigation of the globe, implied return. You shall not go down twice to the same river, nor can you go home again. That we know. Yet from that acceptance of transience we can evolve a theory, wherein what is most changeable is shown to be fullest of eternity, and your relationship to the river, and the river’s relationship to you and to itself, turns out to be at once more complex and more reassuring than a mere lack of identity. You can go home again, so long as you understand that home is a place where you have never been.
[change]
You can have a 25-hour-day. Just go to sleep at your usual time, but wake up one hour earlier than usual.
(compare to [[We shall never have more time. We have, and have always had, all the time there is.]]).
I think that the poet Mary Oliver had the same desire to embrace serendipity and be awed by its mystery, when she said:
>You can have the other words-chance, luck, coincidence, serendipity. I'll take grace. I don't know what it is exactly, but I'll take it.
You can live to be a hundred if you give up all the things that make you want to live to be a hundred.
You can not compare this moment with any other, for there are no others. Memories of the past and anticipation of the future are not other moments, but parts of this one.
(Compare with Frank Wilczek's [[What was God doing before He created the world?]])
(compare to [[Time is a reality confined to the instant and suspended between two voids. Although time will no doubt be reborn, it must first die. It cannot transport its being from one instant to another in order to forge duration. The instant is already solitude… It is solitude in its barest metaphysical value.]]).
You can only be free when even the desire of seeking freedom becomes a harness to you, and when you cease to speak of freedom as a goal and a fulfillment.
You can safely assume you’ve created God in your own image when it turns out that God hates all the same people you do.
Compare to The Book [[Exodus Chapter 20 שְׁמוֹת|https://www.mechon-mamre.org/p/pt/pt0220.htm#1]]:
"""
ג לֹא-תַעֲשֶׂה לְךָ פֶסֶל, וְכָל-תְּמוּנָה, אֲשֶׁר בַּשָּׁמַיִם מִמַּעַל, וַאֲשֶׁר בָּאָרֶץ מִתָּחַת--וַאֲשֶׁר בַּמַּיִם, מִתַּחַת לָאָרֶץ.
3 Thou shalt not make unto thee a graven image, nor any manner of likeness, of any thing that is in heaven above, or that is in the earth beneath, or that is in the water under the earth;
ד לֹא-תִשְׁתַּחֲוֶה לָהֶם, וְלֹא תָעָבְדֵם: כִּי אָנֹכִי יְהוָה אֱלֹהֶיךָ, אֵל קַנָּא--פֹּקֵד עֲוֺן אָבֹת עַל-בָּנִים עַל-שִׁלֵּשִׁים וְעַל-רִבֵּעִים, לְשֹׂנְאָי.
4 thou shalt not bow down unto them, nor serve them; for I the LORD thy God am a jealous God, visiting the iniquity of the fathers upon the children unto the third and fourth generation of them that hate Me;
ה וְעֹשֶׂה חֶסֶד, לַאֲלָפִים--לְאֹהֲבַי, וּלְשֹׁמְרֵי מִצְוֺתָי.
5 and showing mercy unto the thousandth generation of them that love Me and keep My commandments.
"""
On the other hand, [[Stanislaw Lem]] wrote (in his Sci-Fi book "//Solaris//"):
>[[Man does not create gods, in spite of appearances. The times, the age, impose them on him. Man can serve his age or rebel against it, but the target of his cooperation or rebellion comes to him from outside.]]
You can say the equations of physics make no distinction between past and future, between forward and backward in time. But if you do, you are averting your gaze from the phenomena dearest to our hearts. You leave for another day or another department the puzzles of evolution, memory, consciousness, life itself. Elementary processes may be reversible; complex processes are not. In the world of things, time’s arrow is always flying.
You can't do something to get joy. Joy is what's there when you stop doing everything else.
[[There is no way to happiness, happiness is the way.]]
You can't have everything. Where would you put it?
You can't live a perfect day without doing something for someone who will never be able to repay you.
[giving]
You can't love something you don't know anymore than you can love someone you don't know.
You can't really take in life, you can only really give.
: -- from a movie with [[him|Phil Stutz]] made by Jonah Hill titled [["Stutz"|https://www.netflix.com/title/81387962]], covering some of his [[tools for living|https://www.netflix.com/tudum/articles/stutz-the-tools]], summarized as [[Tools for living - Phil Stutz]].
(see also [[Irvin Yalom]]'s take on the [[rippling effect|The idea that we can leave something of ourselves, even beyond our knowing, offers a potent answer to those who claim that meaninglessness inevitably flows from one's finiteness and transiency.]])
[kindness]
You can't take a picture of reality because it's a movie, or a cartoon, depending on your sensibility.
:: -- from a [[Wall Street Journal interview with J. Peder Zane|https://www.wsj.com/articles/physics-biology-and-economic-inequality-11549061005]]
compare to [[We snatch our freeze-frame of life from the simultaneity of existence by holding on to illusions of permanence, congruence, and linearity; of static selves and lives that unfold in sensical narratives.]]
You can't think about thinking unless you think about thinking about something.
You can’t connect the dots looking forward; you can only connect them looking backwards.
Similarly, Dick Costolo (the ex-CEO of Twitter) reflected on his unexpected journey and his own unscripted career outcome:
>You cannot draw that path looking forward. You can’t draw any path looking forward. You have to figure out what you love to do and what you have conviction about, and go do that.
<<comparequote "Soren Kierkegaard" "It is really true what philosophy tells us, that life must be understood backwards. But with this, one forgets the second proposition, that it must be lived forwards. A proposition which, the more it is subjected to careful thought, the more it ends up concluding precisely that life at any given moment cannot really ever be fully understood; exactly because there is no single moment where time stops completely in order for me to take position (to do this): going backwards." "reflection and living">>
<<comparequote "Wendy Lustbader" "Just as an Impressionist painting becomes coherent only at a distance, a lifetime is a journey whose full meaning only becomes comprehensible over time." "reflection and living">>
[serendipity]
You cannot always stay on the summits. You have to come down again…
So what’s the point? Only this: what is above knows what is below, what is below does not know what is above. While climbing, take note of all the difficulties along your path. During the descent, you will no longer see them, but you will know that they are there if you have observed carefully.
[...]
There is an art to finding your way in the lower regions by the memory of what you have seen when you were higher up. When you can no longer see, you can at least still know.
: -- from his book //Mount Analogue: A Tale of Non-Euclidean and Symbolically Authentic Mountaineering Adventures//
[perspective]
You cannot be really first rate at your work if your work is all you are.
: ― from [[her|Anna Quindlen]] book "//A Short Guide to a Happy Life//"
[excellence] [being great at what you do] [multi-disciplinary]
[The protagonist and narrator, Dr. Vivian Bearing (who, if she had a middle name, it would have been "Over"), lies in her hospital bed, recovering from a 3^^rd^^ round of chemotherapy, treating her stage four metastatic ovarian cancer which destroys her body ("Insidious cancer, with pernicious side effects." [on second thought] "No, the treatment has pernicious side effects.")]
You cannot imagine how time ... can be ... so still.
It hangs. It weighs. And yet there is so little of it.
It goes so slowly, and yet it is so scarce.
: -- from [[Margaret Edson]]'s play Wit: [ext[(local) play transcript|resources/wit-script-transcript-emma-thompson.html]] (or [[on script-o-rama|http://www.script-o-rama.com/movie_scripts/w/wit-script-transcript-emma-thompson.html]]) of the [[movie with Emma Thompson|http://openlibrary.org/books/OL9394233M/Wit]].
You cannot propel yourself forward by patting yourself on the back.
::-- [[Unix fortune|https://en.wikipedia.org/wiki/Fortune_(Unix)]]
This doesn't necessarily mean that you should not appreciate where you are or what you have achieved, but as [[Shunryu Suzuki]] had said:
> [[You are perfect the way you are, and you can use a little improvement.]]
Le soleil ni la mort ne se peuvent regarder en face.
(You cannot stare straight into the face of the sun, or death.)
: -- Maxim 26 ([[Francois La Rochefoucauld]]'s [[Maxims|https://www.gutenberg.org/files/9105/9105-h/9105-h.htm]]).
To which [[Irvin Yalom]] in his book "//Staring at the Sun - overcoming the terror of death//" responds:
> I feel strongly—as a man who will himself die one day in the not-too-distant future and as a psychiatrist who has spent decades dealing with death anxiety— that confronting death allows us, not to open some noisome Pandora's box, but to reenter life in a richer, more compassionate manner.
>
>So I offer this book optimistically. I believe that it will help you stare death in the face and, in so doing, not only ameliorate terror but enrich your life.
You do not have to sit outside in the dark. If, however, you want to look at the stars, you will find that darkness is necessary. But the stars neither require nor demand it.
: ― from [[her|Annie Dillard]] book //"Teaching a Stone to Talk: Expeditions and Encounters"//
[courage]
You don't have to optimize what you don't write. The most powerful optimization tool in existence may be the delete key.
One of my most productive days was throwing away 1000 lines of code.
Or as [[I|Haggai Mark]] say:
[[In computer programming: The most secure, the fastest, and the most maintainable code (by far :) is the code not written (or not needed).]]
[programming advice] [programming technique]
You don't understand something until you've taught a teenager to teach a computer to do it.
(compare to what [[Alan Perlis]] had said [[about understanding|You think you KNOW when you learn, are more sure when you can write, even more when you can teach, but certain when you can program.]].)
(compare to what [[William Zinsser]] had said [[about describing for understanding|Describing how a process works is valuable for two reasons. It forces you to make sure you know how it works. Then it forces you to take the reader through the same sequence of ideas and deductions that made the process clear to you.]]).
You don't want a million answers as much as you want a few forever questions. The questions are diamonds you hold in the light. Study a lifetime and you see different colors from the same jewel.
From an article titled [["Seeing Like a State"|https://www.cato-unbound.org/issues/september-2010/seeing-state-conversation-james-c-scott]] by [[James C. Scott]]:
Measuring and recording has the capacity to change the world it observes (analogous to the [[Heisenberg Uncertainty Principle|https://en.wikipedia.org/wiki/Uncertainty_principle]]^^1^^ in Physics).
>The window and door tax established in France under the Directory and abolished only in 1917 is a striking case in point. Its originator must have reasoned that the number of windows and doors in a dwelling was almost perfectly proportionate to the dwelling’s size. Thus a tax assessor need only walk around the house counting the windows and doors to estimate its size. As a simple expedient, it was a brilliant stroke, but not without consequences. Peasant dwellings were subsequently designed or renovated with the formula in mind so as to have as few apertures as possible! While the fiscal losses could be recouped by raising the tax per opening, the effects on the long term health of the rural population lasted for more than a century.
(so I guess that (sometimes? often?) "you get what you measure"^^2^^, and then some :(
This reminds me of the [[Bill Gates]] quote [[Measuring program and programmer effectiveness by lines of code is like measuring aircraft effectiveness by weight.]]
----
^^1^^ See [[Terry Pratchett]]'s take on the [[Uncertainty Principle|THE UNCERTAINTY PRINCIPLE - according to Sir Terry]].
^^2^^ or "you measure and conclude": [[Some men went fishing in the sea with a net, and upon examining what they caught they concluded that there was a minimum size to the fish in the sea.]]
You have to draw a Circle of Empathy around yourself and others in order to be moral. If you include too much in the circle, you become incompetent, while if you include too little you become cruel. This is the "Normal form" of the eternal liberal/conservative dichotomy.
(compare to what [[Haggai Mark]] said (not really my original :) [[about compassion, brain, and heart|From my experience: if you are not a capitalist/egoist when you are younger, then you don't have a brain; if you are not a socialist when you are older, then you don't have a heart.]])
When you go backstage (as a visitor or a friend) after a show to see actors, you've got to remember you're entering a burn ward. These people are raw, and this is not the time to analyze their work.
You hug them and you say "You were wonderful". You have to say //You//, you have to say //were//, and you have to say //wonderful//.^^1^^
Don't try to be honest^^2^^. The actor is a raw open wound after a performance. You can't say "The //play// was wonderful." That means you're deliberately avoiding talking about the actor. You can't say "You //are// wonderful." That means he's wonderful in general, but not tonight. And you have to say //wonderful// (//brilliant// is okay, too, but nothing less). No one needs to hear they were //interesting// or that they looked as if they were having a good time.
Never forget that when you go back after a play, you're talking to the walking wounded.
----
^^1^^ - this parsing of a sentence into individual words reminds me of[[ the scene in Mel Brooks's movie "The Twelve Chairs"|https://docs.google.com/document/d/1uuLpUsu-CX1Scf8Rq5kWPtGa1d-_mtQacJRpD84j_bc/edit?usp=sharing]], where the mother-in-law tells her son-in-law, on her death bed that she hid 50,000 Rubles worth of jewelry in one of twelve parlor chairs, which no one knows where they are. (His response: ''How could you do such a thing!?'' in about 6 different intonations).
^^2^^ - which, of course is not the same as "try not to be honest" :)
You live, and then you die. You may ask "why?", but the no less important question (and answer) is "how".
And with added "[[asides|https://www.clearwriter.com/cleartips/stunningsentences/6-4.htm]]":
You live, and then you die. You may ask (and it's a 'fruitful' question) "why?" (why you live, and why you die), but the no less important (guiding) question (and (hopefully actionable) answer) is "how" (how you live, and how you die).
(inspired by the book [["The Carpenter's Sister"|http://www.ithl.org.il/page_15907]] by Mira Magen)
You lived; you will always have lived. Death does not erase your life. It is mere punctuation^^1^^. If only time could be seen whole, then you could see the past remaining intact, instead of vanishing in the rearview mirror. There is your immortality. Frozen in amber.
For me the price of denying death in this way is denying life.
----
^^1^^ see [[John Donne]]'s [[sonnet|Holy Sonnets: Death, be not proud By John Donne]], and the discussion about punctuation in [[Margaret Edson]]'s play Wit: [ext[(local) play transcript|resources/wit-script-transcript-emma-thompson.html]]
You may be disappointed if you fail, but you are doomed if you don't try.
You might as well be a mensch.
A piece of solid advice Abe Trillin gave his son Calvin Trillin, the author of the book //Messages from My Father// among others.
(Compare to the [[Dalai Lama]]'s advice [[on being kind|Be kind whenever possible. It is always possible.]])
You miss 100 percent of the shots you never take.
As meditation teacher and psychologist Jack Kornfield likes to point out, the signs in Las Vegas casinos have it right: "You must be present to win.
You never change things by fighting the existing reality. To change something, build a new model that makes the existing model obsolete.
([[my|Haggai Mark]] comment/observation: It's not always possible (we think?), but when it happens/is, it is absolutely true and powerful!)
You never know beforehand what people are capable of, you have to wait, give it time, it's time that rules, time is our gambling partner on the other side of the table and it holds all the cards of the deck in its hand, we have to guess the winning cards of life, our lives.
(compare to [[Dee Hock]]'s [[take on playing/planning your cards|Life is so uncertain that it is far better and more joyous to play your way through it than to plan or pray your way through it.]])
[patience] [serendipity] [uncertainty]
You never know what worse luck your bad luck has saved you from.
: -- from [[his|Cormac McCarthy]] book //"No Country for Old Men"//
But also:
> [[I got what I needed instead of what I wanted and that's just about the best kind of luck you can have.]]
: -- from [[his|Cormac McCarthy]] book //"The Sunset Limited"//
I’m a writer, so I don’t wait for something interesting. I write. Period. [...] You set yourself afloat on the language.
"""
You talk when you cease to be at peace with your thoughts;
And when you can no longer dwell in the solitude of your heart you live in your lips, and sound is a diversion and a pastime.
And in much of your talking, thinking is half murdered.
For thought is a bird of space, that in a cage of words may indeed unfold its wings but cannot fly.
"""
:: -- from his poem [[On Talking|http://www.katsandogz.com/gibran/ontalking.php]]
(compare to [[Cormac McCarthy]]'s [[take on the unconscious|The fact that the unconscious prefers avoiding verbal instructions pretty much altogether—even where they would appear to be quite useful—suggests rather strongly that it doesn't much like language and even that it doesn't trust it.]])
You think when you wake up in the mornin' yesterday don't count. But yesterday is all that does count. What else is there? Your life is made out of the days it’s made out of. Nothin' else.
: -- from [[his|Cormac McCarthy]] book //"No Country for Old Men"//
( see what [[Annie Dillard]] had to say about [[the impact of what we do on who we are|How we spend our days is, of course, how we spend our lives.]]).
You think you KNOW when you learn, are more sure when you can write, even more when you can teach, but certain when you can program.
(compare to what [[William Zinsser]] had said [[about describing for understanding|Describing how a process works is valuable for two reasons. It forces you to make sure you know how it works. Then it forces you to take the reader through the same sequence of ideas and deductions that made the process clear to you.]]).
You wake up in the morning, and lo! your purse is magically filled with twenty-four hours of the unmanufactured tissue of the universe of your life! It is yours. It is the most precious of possessions.
:-- from his book //How to Live on 24 Hours a Day//
(see also [[The chief beauty about the constant supply of time is that you cannot waste it in advance. The next year, the next day, the next hour are lying ready for you, as perfect, as unspoilt, as if you had never wasted or misapplied a single moment in all your life.]]).
You want fantasy? Here's one... There's this species that lives on a planet a few miles above molten rock and a few miles below a vacuum that'd suck the air right out of them.
They live in a brief geological period between ice ages, when giant asteroids have temporarily stopped smacking into the surface. As far as they can tell, there's nowhere else in the universe where they could stay alive for ten seconds.
And what do they call their fragile little slice of space and time? They call it real life.
: ― from [[his|Terry Pratchett]] Collected Non-Fiction "A Slip of the Keyboard"
(see also [[Carl Sagan - A Pale Blue Dot]])
(see what [[Stephen Fry]] had said about the [[wondering about the miracle of life|This world is the only thing we've ever seen and yet it staggers us. It surprises us. We are surprised by what is "the case", "the case" being everything around us.]])
In the Woody Allen movie "You will meet a tall dark stranger".
The anguished and desperate mother who believes in mysticism, ebulliently tells her son-in-law ex-doctor (now aspiring writer), that the fortune teller she has been going to told her (in manners of love): "you will meet a tall dark stranger".
To which the more rational son-in-law "dutifully" responds: "we all do; at the end".
(but as Epicurus had said: [[Where death is I am not; where I am death is not, so we never meet.]])
You will never be happy if you continue to search for what happiness consists of. You will never live if you are looking for the meaning of life.
MEETING THE EYE
"""
You'll probably find
that it suits your book
to be a bit cleverer
than you look.
Observe that the easiest
method by far
is to look a bit stupider
than you are.
"""
Young people need models, not critics.
Or as [[he|John Wooden]] quotes in [[his TED Talk (2001)|https://www.ted.com/talks/john_wooden_the_difference_between_winning_and_succeeding]]:
>No written word, no spoken plea
>
>can teach our youth what they should be;
>
>nor all the books on all the shelves --
>
>it's what the teachers are themselves.
"""
Your children are not your children.
They are the sons and daughters of Life's longing for itself.
They come through you but not from you,
And though they are with you yet they belong not to you.
You may give them your love but not your thoughts,
For they have their own thoughts.
You may house their bodies but not their souls,
For their souls dwell in the house of tomorrow,
which you cannot visit, not even in your dreams.
You may strive to be like them,
but seek not to make them like you.
For life goes not backward nor tarries with yesterday.
You are the bows from which your children
as living arrows are sent forth.
The archer sees the mark upon the path of the infinite,
and He bends you with His might
that His arrows may go swift and far.
Let your bending in the archer's hand be for gladness;
For even as He loves the arrow that flies,
so He loves also the bow that is stable.
"""
:: -- from his poem [[On Children|http://www.katsandogz.com/gibran/onchildren.php]]
From [[his|Arthur C. Brooks]] article titled [[The Secret to Happiness at Work|https://www.theatlantic.com/family/archive/2021/09/dream-job-values-happiness/619951/]]:
* Your job doesn’t have to represent the most prestigious use of your potential. It just needs to be rewarding.
* To be happy at work, you don’t have to hold a fascinating job that represents the pinnacle of your educational achievement or the most prestigious use of your “potential,” and you don’t have to make a lot of money. What matters is not so much the “what” of a job, but more the “who” and the “why”: Job satisfaction comes from people, values, and a sense of accomplishment.
* Given that job satisfaction depends on fairly amorphous criteria such as people and values instead of concrete characteristics such as job duties and money, it’s worth noting that a good job can become a bad one without any changes that would be obvious to an outsider.
** One of the most famous examples of this comes from the first story in the Bible. In the second chapter of the Book of Genesis, God—who had recently created Adam and deemed his creation “very good”—gives Adam a blessed vocation that pleases both of them: He “put him in the Garden of Eden to work it and take care of it.” One chapter later, after the unpleasantness with the snake and the apple, God casts Adam and Eve out of Eden, cursing them: “By the sweat of your brow you will eat your food until you return to the ground.”
** Adam and Eve were still farmers in both cases, but you might say their relationship with the boss had soured, and they went from earning their success to dragging themselves to work to pay the bills.
** While a good job might not be quite as idyllic as the Garden of Eden, when we know the secrets to a career that is truly satisfying, work really can be a joy.
[career advice] [job satisfaction]
Referring to [[Tikkun Olam|https://en.wikipedia.org/wiki/Tikkun_olam]], and similarly to [[Rabbi Tarfon]]'s [[It is not for you to finish the task, but nor are you free to desist from it.]], and paraphrasing [[Brian Christian]] from his book "The Most Human Human" - where he writes about the game of chess.
:{{imgquote}} Grandmaster games are said to begin with a novelty, which is the first move of the game that "exits ''the book''" (i.e., is not played "by ''the book''"). It could be the fifth, it could be the thirty-fifth move.
: We think that a game of chess starts with move one and ends with a checkmate (or draw), but this is not the case. The game begins when it gets "out of book", and it ends when it goes "into book" (for the end game part). Like electricity, it only sparks in the gap.^^1^^
: ''The Book is massive. A game may end before you get out, but it doesn't begin until you do! Said differently, you may not get out alive; on the other hand, you're not alive until you get out!''
"""
"""
----
^^1^^ - See how [[David Hochman]] describes [[this brief opportunity we are given|Live the dash. Between the date you’re born and the date you die, you’d better make your time worthwhile.]]
"""
"""
And yet, your mind is, was, and will always be a room with a view. Your mental states exist inside this room you can never leave and no one else can ever enter. The world you perceive through the window of mind (where you can never go—where no one can ever go) is the objective world. Both worlds, inside and outside, are real.
From an [[article in Commentary|http://www.commentarymagazine.com/article/the-closing-of-the-scientific-mind/]]
A word-play on a 1908 novel by English writer [[E. M. Forster]] ("A Room with a View"), about a young woman in the repressed culture of Edwardian era England. Set in Italy and England, the story is both a romance and a critique of English society at the beginning of the 20th century. Merchant-Ivory produced an award-winning film adaptation in 1985 (with Helena Bonham Carter, Maggie Smith, Denholm Elliott, Judi Dench, Daniel Day-Lewis and others).
Your stature as a fisherman isn't determine by how big a trout you can catch but by how small a trout you can catch without being disappointed.
: -- in his book //Dumb Luck and the Kindness of Strangers//.
He also [[said (in Trout Unlimited)|https://www.tu.org/blog/john-gierach-the-secret/]]:
> If you want to go fishing, go fishing. If you think you’d like to be a writer, try and be a writer. You can’t waste your life making money and then go back and buy that life back.
On this point ("do what you love", etc.), I'm not sure. It sounds good. It's a notion/belief that circulates in certain circles. But I know I did not do it. I almost did, (wanting to go to a non-vocational school, across the street from my house, instead of going to a vocational school (ORT). Or when I thought I wanted to study architecture at University, instead of studying engineering).
I think/believe that you can find joy (or moments/nuggets of it) in many different occupations and circumstances. In other words, [[there are paths in life combining good living with good fortune|Life offers more than one path to combine "good living" with "good fortune".]] (true in the dual (at least) meaning of "good living" and "good fortune" :)
[logic] [career advice]
"""
Your teachers
Are all around you.
All that you perceive,
All that you experience,
All that is given to you
or taken from you,
All that you love or hate,
need or fear
Will teach you--
If you will learn.
God is your first
and your last teacher.
God^^1^^ is your harshest teacher:
subtle,
demanding.
Learn or die.
"""
[intelligence]
: ― from [[her[[Octavia E. Butler]] book //Parable of the Sower//
----
^^1^^ [[On the nature of God]]
Your vision will become clear only when you look into your heart.
Referring to the interview [[Krista Tippett]] did with [[Naomi Shihab Nye]] [[at OnBeing|https://onbeing.org/programs/naomi-shihab-nye-your-life-is-a-poem-mar2018/]]:
In Japanese, there is a term for the kind of unexpected spaciousness one sometimes experiences – yutori.
Poet Naomi Shihab Nye learned this word from a Japanese student. It is like “leaving early enough to get somewhere so that you know you’re going to arrive early, so when you get there, you have time to look around.”
With yutori, life becomes more like a poem. Naomi’s post in OnBeing (Krista Tippett’s popular podcast and blog series) reflected on the ways you might view your life as a poem. Her student eloquently further explained, “when you think, when you’re in a very quiet place, when you’re remembering, when you’re savoring an image, when you’re allowing your mind calmly to leap from one thought to another, that’s a poem. That’s what a poem does.”
Or as they say: You don’t arrive early by going fast; you leave early to arrive early.
(see also [[David Whyte]]'s [[Silence is like a cradle holding our endeavors and our will; a silent spaciousness sustains us in our work and at the same time connects us to larger worlds that, in the busyness of our daily struggle to achieve, we have not yet investigated. Silence is the soul's break for freedom.]])
Other meanings of Yutori^^1^^:
"""
elbowroom
leeway
room
reserve
margin
allowance
latitude
time
flexibility
leisure
comfortableness
playfulness
foolishness
peace of mind
mood of ease
(German) Gemutlichkeit ?
"""
----
^^1^^ see [[On the perfect aptness of words]].
<<list-links "[tag{!!title}]">>
<<list-links "[tag{!!title}]">>
''מי האיש''
מילים: תהילים לד , יג
[[Psalms 34, 13|https://www.sefaria.org/Psalms.34.14?lang=bi]]
לחן: ברוך חייט
"""
מי האיש החפץ חיים,
אוהב ימים
אוהב ימים לראות טוב.
נצור לשונך מרע
ושפתיך מדבר מירמה
סור מרע, עשה טוב
בקש שלום ורדפהו.
"""
''Who is the Man''
"""
Who is the man
Who desires life
Who loves all his days
To see good
Guard your tongue from evil
And your lips from speaking deceit
Turn away from bad And do good
Seek peace And pursue it
"""
From [[https://mechon-mamre.org/p/pt/pt2634.htm]]:
"""
יג מִי-הָאִישׁ, הֶחָפֵץ חַיִּים; אֹהֵב יָמִים, לִרְאוֹת טוֹב.
Who is the man that desireth life, and loveth days, that he may see good therein?
יד נְצֹר לְשׁוֹנְךָ מֵרָע; וּשְׂפָתֶיךָ, מִדַּבֵּר מִרְמָה
Keep thy tongue from evil, and thy lips from speaking guile.
טו סוּר מֵרָע, וַעֲשֵׂה-טוֹב; בַּקֵּשׁ שָׁלוֹם וְרָדְפֵהוּ.
Depart from evil, and do good; seek peace, and pursue it.
"""
[advice for a good life] [moral behavior]
[performed by: Chava Alberstein, Ronit Ophir, Shuli Natan, and others]
[for spelling/search: mi ha-ish, mi haish, mi ha ish, mi hayish]